четверг, 13 февраля 2014 г.

Пишем свою систему уведомлений через skype, часть 2


Итак настало время добавить какой-то интерфейс для того чтобы делать push в скайп-сервер. Для этого пригодится хорошо себя зарекомендовавший маленький http-сервер mini-httpd, который нашел приют на многих-многих роутерах в качестве веб-сервера для веб-интерфейса роутера.
А использовать мы его будем как веб для наших cgi-скриптов, написанных на… bash :) Коряво? Не то слово! С другой стороны, работает и ладно.

Установим mini-httpd:

root@skype:/# aptitude install mini-httpd

/etc/mini-httpd.conf
port=8880
user=skype
chroot
dir=/home/skype/
data_dir=/cgi
cgipat=*.cgi
logfile=/home/skype/mini-httpd.log
pidfile=/home/skype/mini-httpd.pid
charset=utf-8
/etc/sv/mini-httpd/run
#!/bin/bash

TIME="Finished. Process took %E. %P CPU was eaten. %MK memory was used." # time stuff

name=`basename $(dirname $(pwd)/fake)` # ugly hack
workingdir="/home/skype/"
command="/usr/sbin/mini-httpd -C /etc/mini-httpd.conf -D"
exec 2>&1

echo starting $name...
export TIME
set -x
cd $workingdir
exec chpst -v time $command
Не забываем включить ранит-службу mini-httpd.

Создадим нужные директории:
root@skype:/# su - skype

skype@skype:~$ mkdir -p /home/skype/cgi/

skype@skype:~$ cd /home/skype/cgi/
Создадим наши скрипты. sendim.cgi
#!/bin/bash
printf "Content-type: text/html\n\n"
set -- $QUERY_STRING


../addcontact.sh "$1"
index.cgi
#!/bin/bash
printf "Content-type: text/html\n\n"
echo "Go away"
sendim.cgi
#!/bin/bash
if [ "$REQUEST_METHOD" = "POST" ]; then
    if [ "$CONTENT_LENGTH" -gt 0 ]; then
        read -n $CONTENT_LENGTH POST_DATA <&0
    fi
else
  printf "Content-type: text/html\n\n"
  echo "use POST"
  exit 0
fi

printf "Content-type: text/html\n\n"

set -- $QUERY_STRING

../sendim.sh "$1" "$POST_DATA"
Не забываем сделать файлы исполняемыми и проверяем! Запустим со своего компьютера:
~ $ curl -d "Hello from curl" 'http://ipaddress:8880/sendim.cgi?skypename'
А если нужно выполнить запрос авторизации, то:
~ $ curl 'http://ipaddress:8880/addcontact.cgi?skypename'
Вот и все, готово! Скрипты вполне вероятно содержат какие-то уязвимости, поэтому не забываем ограничить доступ к серверу с помощью iptables.

Комментариев нет:

Отправить комментарий