Всем привет!
Предлагаю вам ознакомится со следующей статьей из серии создания и тюнинга собственного SMPP сервера для приема СМС на платформе Exolve. Уже на протяжении долгого времени сервер работает в открытом доступе, что кажется не так безопасно. Так давайте настроим вход по логину и паролю. Данные для входа вы можете найти в кабинете разработчика dev.exolve.ru
Как это будет работать теперь?
app.py1. Инициализация Flask и SQLAlchemy:
- Flask используется для создания веб-приложения, а SQLAlchemy для работы с базой данных SQLite, где будут храниться SMS-сообщения.
- Приложение настроено на использование секретного ключа для управления сессиями и хранения состояния авторизации.
- Создана модель для хранения SMS-сообщений в базе данных. Каждое сообщение содержит информацию об отправителе, получателе, тексте сообщения и времени получения.
- client - это объект SMPP клиента, который используется для подключения и работы с SMPP сервером. Глобальная переменная connection_status используется для отслеживания состояния подключения.
- Функция handle_message обрабатывает входящие сообщения и сохраняет их в базе данных.
- Функция connect_to_smpp принимает учетные данные (System ID и пароль) и пытается подключиться к SMPP серверу. Если подключение успешно, запускается поток для прослушивания входящих сообщений.
- / - форма для ввода учетных данных и подключения к SMPP серверу. После успешного подключения пользователь перенаправляется на страницу со списком сообщений.
- /messages - страница, отображающая полученные SMS-сообщения.
- /get_messages - маршрут, который возвращает список сообщений в формате JSON для отображения их на странице.
- Функция close_smpp_client корректно завершает соединение с SMPP сервером при завершении работы приложения.
Статус подключения и список сообщений:
На странице отображается текущий статус подключения к SMPP серверу и список полученных SMS-сообщений.
Сообщения обновляются каждые 5 секунд без необходимости перезагрузки страницы, благодаря JavaScript.
Форма для подключения:
Пользователь вводит System ID и пароль для подключения к SMPP серверу. После отправки формы происходит подключение, и пользователь перенаправляется на страницу с сообщениями.
Итого получаемПользователь сначала заходит на страницу с формой (login.html), вводит свои учетные данные и подключается к SMPP серверу.
Если подключение успешно, он перенаправляется на страницу (index.html), где отображаются полученные SMS-сообщения.
Статус подключения и сообщения обновляются в реальном времени, и сообщения сохраняются в базе данных для последующего просмотра.
А теперь сам код app.py:
Код |
---|
import smpplib.clientimport smpplib.constsimport smpplib.gsmimport smpplib.exceptionsfrom flask import Flask, jsonify, render_template, request, redirect, url_for, sessionfrom flask_sqlalchemy import SQLAlchemyimport threadingimport atexit |
Код |
---|
<!DO CTYPE html><ht ml lang="ru"><head> <met a charset="UTF-8"> <met a name="viewport" content="width=device-width, initial-scale=1.0"> <title>Полученные SMS сообщения</title> <st yle> .message-text { color: green; font-weight: bold; } .status { margin-bottom: 20px; font-weight: bold; } </style> <sc ript> // Функция для загрузки сообщений function loadMessages() { fetch('/get_messages') .then(response => response.json()) .then(data => { const messageList = document.getElementById('message-list'); messageList.innerHTML = ''; // Очищаем список сообщений data.forEach(sms => { const listItem = document.createElement('li'); listItem.innerHTML = `<span class="message-text">${sms.message}</span> <strong>От:</strong> ${sms.source} <strong>Кому:</strong> ${sms.destination} <strong>Получено в:</strong> ${sms.timestamp}`; messageList.appendChild(listItem); }); }) .catch(error => console.error('Error loading messages:', error)); } |
Код |
---|
<!DO CTYPE html><ht ml lang="ru"><head> <met a charset="UTF-8"> <met a name="viewport" content="width=device-width, initial-scale=1.0"> <title>Подключение к SMPP серверу</title> <st yle> .form-container { margin: 0 auto; max-width: 300px; padding: 20px; border: 1px solid #ccc; border-radius: 5px; } .form-container h1 { text-align: center; } .form-container label { display: block; margin-bottom: 10px; } .form-container input { width: 100%; padding: 8px; margin-bottom: 20px; } .form-container button { width: 100%; padding: 10px; background-color: #4CAF50; color: white; border: none; border-radius: 5px; cursor: pointer; } .form-container button:hover { background-color: #45a049; } .status { margin-bottom: 20px; font-weight: bold; text-align: center; } </style></head><body> <div class="form-container"> <h1>Подключение к SMPP серверу</h1> <div class="status"> Статус подключения: {{ connection_status }} </div> <fo rm method="POST" action="/"> <label for="system_id">System ID:</label> <input type="text" id="system_id" name="system_id" required> |
Тут кстати стоит уделить внимание структуре файлов, наверное в предыдущих публикациях не писал.
Сперва создаем папку для приложения smpp_priem, внутри создаем файл app.py куда пишем код выше. В этой же папке нужно создать новую папку с названием templates, внутри которого должны находится файлы index.html и login.html.
Для запуска используем python app.py находясь в вышеуказанной папке. И чтобы увидеть веб интерфейс, заходим localhost:5001
На этом сегодня все. Надеюсь было интересно и кто нибудь уже повторил проект.
Для того, чтобы оставлять комментарии, необходимо пройти авторизацию
Авторизоваться