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.
103 lines
3.9 KiB
Python
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' |