Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagepy
titlesend_sms.py
collapsetrue
#!/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
languagebash
titlesend_sms.sh
#!/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


Ввод кода подтверждения

Абонент получает код на телефон и вводит его в поле "Код". Если код совпадает с сохраненным в кеше, то абонент переходит на шаг смены пароля. Если код не приходит, то можно отправить повторно с помощью ссылки "Отправить ещё раз". Повторная отправка вызовет генерацию нового кода, вызовет скрипт для отправки СМС и обновит запись в кеше.

...