From c71ec519c3c0bc6ede905627018cd86b4d9aff0a Mon Sep 17 00:00:00 2001 From: Jonas Braathen Date: Sat, 9 Aug 2014 22:13:49 +0200 Subject: [PATCH] Updates action column in din_sms_received. Cares about codewords. --- tekstmelding.py | 78 +++++++++++++++++++++++++++++++------------------ 1 file changed, 50 insertions(+), 28 deletions(-) diff --git a/tekstmelding.py b/tekstmelding.py index 6dd2a35..8f527b6 100644 --- a/tekstmelding.py +++ b/tekstmelding.py @@ -1,12 +1,11 @@ from flask import Flask, request, g, abort, jsonify +from utils import CustomJSONEncoder, generate_activation_code import MySQLdb import MySQLdb.cursors import datetime import config -from utils import CustomJSONEncoder, generate_activation_code - app = Flask(__name__) app.config.from_object('config') app.json_encoder = CustomJSONEncoder @@ -61,12 +60,11 @@ def get_user_by_phone(number): (CASE WHEN (user.expires IS NULL) THEN 1 ELSE 0 END) AS expires_lifelong FROM din_user user, din_userphonenumber phone WHERE phone.number = %s AND - user.id = phone.user_id""", - [number], one=True) + user.id = phone.user_id + """, [number], one=True) return user def log_incoming(**kwargs): - app.logger.debug(kwargs) return query_db(""" INSERT INTO din_sms_received (userid, gsm, codeword, message, operator, shortno, action, IP, simulation) @@ -74,6 +72,13 @@ def log_incoming(**kwargs): (%(userid)s, %(gsm)s, %(codeword)s, %(message)s, %(operator)s, %(shortno)s, %(action)s, %(ip)s, %(simulation)s) """, kwargs, lastrowid=True) +def set_incoming_action(**kwargs): + query_db(""" + UPDATE din_sms_received + SET action = %(action)s + WHERE smsid = %(smsid)s + """, kwargs) + def log_sent(**kwargs): query_db(""" INSERT INTO din_sms_sent @@ -92,16 +97,20 @@ def callback(): gsm = request.args.get('gsm', None) operator = request.args.get('operator', None) codeword = request.args.get('kodeord', None) - message = request.args.get('tekst', None) + message = request.args.get('tekst', '') shortno = request.args.get('kortnr', None) ip = request.remote_addr + if None in (gsm, operator, codeword, shortno): + abort(400) # Bad Request + if not gsm.isdigit(): # What the fuck, man, that's not a phone number, man. abort(400) # Bad Request - # We could use the country code from 'operator' here, - # but can we can't receive messages from operators. Right? + if not codeword.strip().upper() in ('DNS', 'DNSMEDLEM'): + abort(400) # Bad Request + user = get_user_by_phone("+47%s" % gsm) id_incoming_sms = log_incoming( @@ -115,7 +124,14 @@ def callback(): ip = ip, simulation = 0) - app.logger.debug("cursor.lastrowid: %s", id_incoming_sms) + app.logger.info("Incoming SMS from gsm:%s saved with smsid:%s", gsm, id_incoming_sms) + + if codeword.strip().upper() == 'DNS': + app.logger.info("Sent SMS to gsm:%s with payment options", gsm) + set_incoming_action(smsid=id_incoming_sms, action='notify_payment_options') + return 'notify_payment_options' + + # Past this point, codeword is DNSMEDLEM if user: # A friendly reminder about how the 'expires' column works: @@ -132,38 +148,44 @@ def callback(): # Does this user have a lifelong membership? if expires_lifelong: app.logger.info("Membership of user_id:%s gsm:%s never expires", user['id'], gsm) + set_incoming_action(smsid=id_incoming_sms, action='notify_already_a_member') # No need to renew non-expired memberships. - elif type(expires) is datetime.date and expires > datetime.date.today(): - app.logger.info("Membership of user_id:%s gsm:%s had not expired yet", user['id'], gsm) + elif type(expires) is datetime.date and expires >= datetime.date.today(): + app.logger.info("Membership of user_id:%s gsm:%s has not expired yet", user['id'], gsm) + set_incoming_action(smsid=id_incoming_sms, action='notify_already_a_member') # Should we renew? elif not expires or (type(expires) is datetime.date and expires < datetime.date.today()): new_expire = datetime.date.today() + datetime.timedelta(days=365) - app.logger.info("Membership of user_id:%s gsm:%s renewed to %s", user['id'], gsm, new_expire) + app.logger.info("Membership of user_id:%s gsm:%s was renewed to %s", user['id'], gsm, new_expire) + set_incoming_action(smsid=id_incoming_sms, action='renew_membership') else: assert False, "What a trainwreck, we shouldn't be here" return jsonify(user.items()) else: - result = {'result': 'No existing member.', 'action': 'new_membership_send_code'} - activation_code = generate_activation_code() - log_sent( - response_to = id_incoming_sms, - msgid = 1337, - sender = 'dns', - receiver = gsm, - countrycode = operator[:1], - message = "Velkommen! Dette er et midlertidig medlemsbevis. Aktiver medlemskapet ditt her: https://s.neuf.no/sms?n=%s&c=%s" % (gsm, activation_code), - operator = operator, - codeword = codeword, - billing_price = 230 * 100, - use_dlr = 0, - simulation = 0, - activation_code = activation_code) + app.logger.info("New membership for gsm:%s, activation code sent", gsm) + set_incoming_action(smsid=id_incoming_sms, action='new_membership_send_code') + result = {'result': 'No existing member.', 'action': 'new_membership_send_code'} + activation_code = generate_activation_code() - return jsonify(result) + log_sent( + response_to = id_incoming_sms, + msgid = 1337, + sender = 'dns', + receiver = gsm, + countrycode = operator[:1], + message = "Velkommen! Dette er et midlertidig medlemsbevis. Aktiver medlemskapet ditt her: https://s.neuf.no/sms?n=%s&c=%s" % (gsm, activation_code), + operator = operator, + codeword = codeword, + billing_price = 230 * 100, + use_dlr = 0, + simulation = 0, + activation_code = activation_code) + + return jsonify(result) if __name__ == '__main__': app.run()