This repository has been archived on 2025-01-14. You can view files and clone it, but cannot push or open issues or pull requests.
messagearr/app/messagearr.py
Parker 517c0b328c
Remove 24 hour accounts
Remove the additional will you be watching a show or movie question as well as 24 hour accounts. All accounts are now just available for 4 hours.
2024-04-30 21:22:19 -05:00

103 lines
3.9 KiB
Python

import flask
import datetime
from create_message import create_message
from commands.request import request
from commands.status import status
from commands.number_response_request import number_response_request
from commands.create_jellyfin_account import create_jellyfin_account
import initialize_variables
app = flask.Flask(__name__)
"""
POST request route to accept incoming notifications from UptimeKuma
regarding the status of certain services. Messages are sent to the
'notif_receivers' list whenever a service goes down or comes back up.
"""
@app.route('/kuma', methods=['POST'])
def kuma():
# Make sure the request is coming from UptimeKuma (Configured to use this authorization token)
if flask.request.headers.get('Authorization') == initialize_variables.authorization_header_tokens:
data = flask.request.get_json()
if data['heartbeat']['status'] == 0:
message = f"{data['monitor']['name']} is down!"
elif data['heartbeat']['status'] == 1:
message = f"{data['monitor']['name']} is up!"
for number in initialize_variables.notifs_recievers:
create_message(number, message)
return 'OK'
# If the request does not contain the correct authorization token, return 401
else:
return 'Unauthorized', 401
"""
POST request route to accept incoming message from the SMS API,
then process the incoming message in order to see if it is a valid command
and then run the command if it is valid.
"""
@app.route('/incoming', methods=['POST'])
def incoming():
# Get the data and define the from_number (number that sent the message)
if initialize_variables.sms_service == 'telnyx':
from_number = flask.request.get_json()['data']['payload']['from']['phone_number']
message = str(flask.request.get_json()['data']['payload']['text'])
if initialize_variables.sms_service == 'twilio':
from_number = flask.request.form['From']
message = str(flask.request.form['Body'])
# Make sure the number is a valid_sender, this stops random people from
# adding movies to the library
if from_number not in initialize_variables.valid_senders:
return 'OK'
if message.strip().lower().startswith('/request'):
request(from_number, message)
return 'OK'
# If a user responded with a number, they are responding to
# the 'request' command prompt
elif message.strip().lower() in initialize_variables.numbers_responses.keys():
number_response_request(from_number, message)
return 'OK'
elif message.strip().lower().startswith('/status'):
status(from_number)
return 'OK'
elif message.strip().lower().startswith('/newaccount'):
if initialize_variables.enable_jellyfin_temp_accounts.lower() == 'true':
# If number is already in the temp dict, delete it so that they can redo the request
if from_number in initialize_variables.jellyfin_active_accounts.keys():
if datetime.datetime.now() - initialize_variables.jellyfin_active_accounts[from_number] < datetime.timedelta(hours=4):
create_message(from_number, "You already have an active account. Please wait until it expires to create a new one.")
return 'OK'
create_jellyfin_account(from_number)
initialize_variables.jellyfin_active_accounts[from_number] = datetime.datetime.now()
return 'OK'
# No valid commands were found, so just return
else:
return 'OK'
# Handle 405 errors - when a user attempts a GET request on a POST only route
@app.errorhandler(405)
def method_not_allowed(e):
if initialize_variables.home_domain != 'None':
return flask.redirect(initialize_variables.home_domain)
return 'Method Not Allowed'
@app.errorhandler(404)
def page_not_found(e):
if initialize_variables.home_domain != 'None':
return flask.redirect(initialize_variables.home_domain)
return 'Page Not Found'