| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import os
- import logging
- import time
- import requests
- from .KdeConnect import KDEConnect
- from app.schemas.responses import AccessTokenResponse, SMSResponse
- def send_sms_from_api(url: str, login: str, pwd: str, device_name: str):
- """Connect to sms-server API to retreieve sms to be send and send them using kdeconnect-cli"""
- # Log in to API get access token
- response = requests.post(
- url + "/auth/access-token",
- data={"grant_type": "password", "username": login, "password": pwd},
- )
- authentication = AccessTokenResponse.model_validate(response.json())
- headers = {"Authorization": "Bearer " + authentication.access_token}
- # Notify the server you are trying to send sms
- requests.post(url + "/status", headers=headers)
- # List SMS to be sent
- response = requests.get(url + "/sms/to-send", headers=headers)
- sms_list: list[SMSResponse] = [SMSResponse.model_validate(obj) for obj in response.json()]
- logging.info(f"{len(sms_list):5} SMS a envoyer")
- # Init KDE Connect
- kde = KDEConnect(device_name=device_name)
- # send sms & update database
- for sms in sms_list:
- try:
- kde.send_sms(sms.phone_number, sms.content)
- requests.post(url + "/sms/send-now/" + sms.id, headers=headers)
- except Exception as exc:
- logging.warning(f"Echec lors de l'envoie du sms {sms.id}\n{str(exc)}")
- time.sleep(5)
- class InvalidEnvironnementVariable(Exception):
- pass
- def get_env(key: str) -> str:
- """Get a variable from the environment or raise an InvalidEnvironnementVariable"""
- value = os.environ.get(key, None)
- if value is None:
- raise InvalidEnvironnementVariable(key)
- return value
- def main():
- API_URL = get_env("API_URL")
- API_LOGIN = get_env("API_LOGIN")
- API_PASSWORD = get_env("API_PASSWORD")
- DEVICE_NAME = get_env("DEVICE_NAME")
- send_sms_from_api(API_URL, API_LOGIN, API_PASSWORD, DEVICE_NAME)
- if __name__ == "__main__":
- logging.basicConfig(
- format="%(asctime)s %(levelname)s - %(message)s",
- level=logging.INFO,
- filemode="a",
- filename="log.txt",
- )
- while True:
- starting_time = time.time()
- try:
- main()
- except Exception:
- logging.exception("An error as occured : ")
- elapsed_time = time.time() - starting_time
- time.sleep(max(180 - elapsed_time, 0))
|