deploy/klingel: Add classification support

This commit is contained in:
jaseg 2020-01-26 22:38:02 +01:00
parent 6345b9eec6
commit b595518607

View file

@ -34,10 +34,10 @@ with db as conn:
mail_routes = {} mail_routes = {}
def mail_route(name, receiver, subject, secret): def mail_route(name, receiver, secret):
def wrap(func): def wrap(func):
global routes global routes
mail_routes[name] = (receiver, subject, func, secret) mail_routes[name] = (receiver, func, secret)
return func return func
return wrap return wrap
@ -109,9 +109,10 @@ def authenticate(route_name, secret, clock_delta_tolerance:'s'=120):
return msg_time, payload['scope'], payload['d'] return msg_time, payload['scope'], payload['d']
@mail_route('klingel', 'computerstuff@jaseg.de', 'It rang!', app.config['SECRET_KLINGEL']) @mail_route('klingel', 'computerstuff@jaseg.de', app.config['SECRET_KLINGEL'])
def klingel(rms=None, capture=None, **kwargs): def klingel(classification='somewhere', rms=None, capture=None, **kwargs):
return f'rms={rms}\ncapture={capture}\nextra_args={kwargs}' return (f'It rang {classification}!',
f'rms={rms}\ncapture={capture}\nextra_args={kwargs}')
def send_mail(route_name, receiver, subject, body): def send_mail(route_name, receiver, subject, body):
@ -134,13 +135,16 @@ def send_mail(route_name, receiver, subject, body):
@app.route('/v1/notify/<route_name>', methods=['POST']) @app.route('/v1/notify/<route_name>', methods=['POST'])
def notify(route_name): def notify(route_name):
receiver, notify_subject, func, secret = mail_routes[route_name] receiver, func, secret = mail_routes[route_name]
msg_time, scope, kwargs = authenticate(route_name, secret) msg_time, scope, kwargs = authenticate(route_name, secret)
if scope == 'default': if scope == 'default':
# Exceptions will yield a 500 error # Exceptions will yield a 500 error
body = func(**kwargs) subject, body = func(**kwargs)
send_mail(route_name, receiver, notify_subject, body or 'empty message') send_mail(route_name, receiver, subject, body or 'empty message')
elif scope == 'info':
send_mail(route_name, receiver, f'System info: {kwargs["info_msg"]}', f'Logged data: {kwargs}')
elif scope == 'boot': elif scope == 'boot':
formatted = datetime.utcfromtimestamp(msg_time).isoformat() formatted = datetime.utcfromtimestamp(msg_time).isoformat()