...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
#!/usr/bin/env python # -*- coding: UTF-8 -*- import sys, os, re login = "SmsCenterLogin" password = "PassHere" # Проверка корректности передачи аргументов if len(sys.argv) < 3: os._exit(0) # Аргументы phone_number = sys.argv[3] # Номер телефона msg = sys.argv[1] # Сообщение, уже содержит код code = sys.argv[2] # Код подтверждения # Проверка корректности номера телефона p = re.compile("^\d{11}$") phone_match = p.match(phone_number) if not(phone_match) or ((phone_match) and (phone_match.group() != phone_number)): os._exit(0) # Формирование команды с запросом к SMS-центру cmd = "curl --url \"https://smsc.ru/sys/send.php\" -d " + \ "\"login=%s&psw=%s&phones=%s&mes=%s&charset=utf-8\"" % \ (login, password, phone_number, msg) # Отправка команды через SMS-центр os.system(cmd) |
Вызов скрипта для отправки сообщения внутри docker-контейнера
После переезда HUPO внутрь docker-контейнера чтобы не возиться с pyenv и дополнительными модулями, зачастую проще написать скрипт на bash, если отправка смс сводится к curl запросу. Скрипт должен быть проброшен в docker-compose.yml и быть исполняемым (chmod +x send_sms.sh).
Ниже пример такого скрипта:
Code Block | ||||
---|---|---|---|---|
| ||||
#!/bin/bash
# ВНИМАНИЕ! Проверка отправки смс должна делаться только на определенные номера, которые пропускает СМС-шлюз !
#set -x - раскомментировать для отладки!
# Проверка корректности передачи аргументов
if [ "$#" -ne 3 ]; then
exit 1
fi
MSG=$1
PIN=$2
PHONE=$3
#PHONE='998933229597' #обрати внимание - номер 12 знакомест, а не 11 как в РФ
DATE=$(date +"%x %T")
LOGFILE=/tmp/password_recovery_hupo.log
PSW='CHANGE_ME'
LGN='CHANGE_ME'
CGPN='CHANGE_ME'
URL='http://sms.etc.uz:8084/json2sms' # заменить на свою точку входа
# Проверка корректности номера телефона
PHONE=`echo "$3" | sed -n '/^[0-9]\{12\}$/p'` #обрати внимание - номер 12 знакомест, а не 11 как в РФ
if [ -z "$PHONE" ]; then
exit 1
fi
# Формирование команды с запросом к SMS-центру
echo -e | curl --header "Content-Type: application/json" --request POST --data \
"{\"login\":\"$LGN\",\"pwd\":\"$PSW\",\"CgPN\":\"$CGPN\",\"CdPN\":\"$PHONE\",\"text\":\"$MSG\"}" --url $URL -v
echo "$DATE curl --header \"Content-Type: application/json\" --request POST --data \
'{\"login\":\"$LGN\",\"pwd\":\"$PSW\",\"CgPN\":\"$CGPN\",\"CdPN\":\"$PHONE\",\"text\":\"$MSG\"}' --url $URL -v" >> $LOGFILE |
Ввод кода подтверждения
Абонент получает код на телефон и вводит его в поле "Код". Если код совпадает с сохраненным в кеше, то абонент переходит на шаг смены пароля. Если код не приходит, то можно отправить повторно с помощью ссылки "Отправить ещё раз". Повторная отправка вызовет генерацию нового кода, вызовет скрипт для отправки СМС и обновит запись в кеше.
...