Bash скрипт для Boxcar уведомлений

в 3:41, , рубрики: Песочница, метки: , , , ,

image

Есть отличный сервис для отсылки Push уведомлений iOS и Safari в Mac OS. Но, к сожалению, я не нашел готовых скриптов, упрощающих работу с ним. Отсутсвие оного подтолкнуло меня на его написание.

На официальном сайте есть только простенькое описание API. Отправлять собственно уведомления можно двумя способами: отправкой email на адрес, который сервис выдает после регистрации, и отправкой POST запроса c использованием личного токена. Эти вещи можно посмотреть в настройках приложения или на сайте.

Мне понадобились уведомления при заходе людей на сервер через ssh. Написать скрипт оказалось не сложно, на сайте есть пример отправки с помощью cURL

curl -d "user_credentials=ACCESS_TOKEN" 
     -d "notification[title]=message title" 
     -d "notification[long_message]=<b>Some text or HTML for the full layout page notification</b>" 
     -d "notification[sound]=bird-1" 
     -d "notification[source_name]=My own alert" 
     -d "notification[icon_url]=http://new.boxcar.io/images/rss_icons/boxcar-64.png" 
     https://new.boxcar.io/api/notifications

Оставалось подсунуть свой токен и все. Спустя пару часов получился у меня простенький скрипт.

Код

#! /bin/bash
#
# authors: Ritter Dmitry
# version: 1.00
# 
# Для нормального использования нужно установить парсер JSON - jq   http://stedolan.github.io/jq/
#
# Пример использования pusher`а
# ./pusher.sh 'test push/full mess/Test/boing'
# Можно пропускать то что не нужно, например полное сообщение:
# ./pusher.sh 'test push//Test/boing'
#
#   'Тест Symbols "<>/`~[]±§_+-=()*^$#!@№:'  - Можно отправлять
#   '%&;'    - Нельзя
#
# Важно: Кавычки обязательны!

IFS1="$IFS"; IFS="/"; S="$1"; A=( $S ); IFS="$IFS1"
token="Сюда копировать свой токен!!!"  	# Токен устройства
log_file="log.file"   			# Имя лог фала, если пусто - лога не будет


message_def="defMess"                        # Дефолтные значения, если пусто - их не будет :)
source_name_def="Test"                       # Дефолтные значения, если пусто - их не будет :)
sound_def="echo"                             # Дефолтные значения, если пусто - их не будет :)
icon_def="http://belyashek.tk/Web-icon.png"  # Дефолтные значения, если пусто - их не будет :)


txtgrn='e[0;32m' # Green
txtylw='e[0;33m' # Yellow
txtred='e[0;31m' # Red

if [ -z "$1" ]
then
	printf "$txtylw Usage: $txtgrn {title/message/sourse_name/sound/icon} n"
	tput sgr0
else
	printf "$txtylw Sending push:"
	
	if [ "${A[0]}" ]
	then
		title="${A[0]}"
	fi

	if [ "${A[1]}" ]
	then
		message="${A[1]}"
	else
		message=$message_def
	fi

	if [  "${A[2]}" ]
	then
		source_name="${A[2]}"
	else
		source_name=$source_name_def
	fi

	if [ "${A[3]}" ]
	then
		sound="${A[3]}"
	else
		sound=$sound_def
	fi

	if [ "${A[4]}" ]
	then
		icon="${A[4]}"
	else
		icon=$icon_def
	fi
	
	pushing=$(curl -s 
   		 -d "user_credentials=$token" 
   		 -d "notification[title]=$title" 
   		 -d "notification[long_message]=$message" 
   		 -d "notification[source_name]=$source_name" 
   		 -d "notification[sound]=$sound" 
   		 -d "notification[icon_url]=$icon" 
		 https://new.boxcar.io/api/notifications)
	
	if [ "$log_file" ]
	then 
		echo $pushing >> "$log_file"
	fi
	
	tes=$(echo $pushing | jq '.id')
	erroe=$(echo $pushing | jq '.Response')
	error=$(echo $pushing | jq '.error|.message')

	if [ "$erroe" == null ]
	then
		erroe=$error
	fi

	if [ "$tes" != null ]
	then
		printf "$txtgrn [OK] n"
	else
		printf "$txtred [ERROR]: "
		printf "$erroe n"
	fi
tput sgr0
fi

Скачать можно по ссылке // комментарии на русском, могут быть проблемы при открытии в браузере

Для нормальной работы нужно установить парсер JSON, «jq». Можно и поставить через apt-get, но там старая версия, так что:

$ wget http://stedolan.github.io/jq/download/linux32/jq (32-bit system)
$ wget http://stedolan.github.io/jq/download/linux64/jq (64-bit system)
$ chmod +x ./jq
$ sudo cp jq /usr/bin

Перелогиниваемся, теперь все должно работать.

Заходим в папку, у меня это /usr:

$ cd /usr 
$ wget http://sourcerda.tk/pusher.sh     // Скачиваем парсер
$ chmod +x ./pusher.sh    // Даем права на запуск

Теперь можно отправлять уведомления, перед этим вписав свой токен в скрипт.

Пример:

$ ./pusher.sh 'test push/full mess/Test/boing'
$ Sending push: [OK]  // Все работает)

Отправлять можно:
Заголовок
Полный текст сообщения
Выбирать звук уведомления
Иконку

Для отправки через скрипт нужно перечислить их в кавычках ' в этой же последовательности через /. Если например нам полный текст не нужен, пропускаем НО КАВЫЧКИ СТАВИМ.

Есть еще дефолтные значения, что бы каждый раз не прописывать например звук, но указав нужный будет воспроизводиться именно он.

p.s. Если захотите уведомление при заходе пользователя, добавьте в .profile что то вроде:

bash /root/pusher.sh 'root login'

Конечно, наверно есть и более легкий способ. Но и пускай будет и этот как вариант.


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js