Archived
Updates action column in din_sms_received. Cares about codewords.
This commit is contained in:
1 parent
48c8183c64
commit
c71ec519c3
1 file changed
+50
-28
+50
-28
@@ -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()
|
||||
Reference in new issue
Block a user