Updates action column in din_sms_received. Cares about codewords.

This commit is contained in:
ponas committed 2014-08-09 22:13:49 +02:00
1 parent 48c8183c64
commit c71ec519c3
1 file changed
+50 -28
+50 -28
View File
@@ -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()