From a1b84fa128a4f88fe8cc4ac57e120c8ab36e1c23 Mon Sep 17 00:00:00 2001 From: Nikolai R Kristiansen Date: Fri, 31 Jul 2015 15:52:23 +0200 Subject: [PATCH] Starts kassa integration WIP --- .gitignore | 1 + tekstmelding.py | 54 +++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 88788ca..b3c48d9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.pyc config.py env/ +.idea diff --git a/tekstmelding.py b/tekstmelding.py index 25dedf6..60f7804 100644 --- a/tekstmelding.py +++ b/tekstmelding.py @@ -1,7 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- - -from flask import Flask, request, g, abort +from flask import Flask, request, g, abort, jsonify import MySQLdb import MySQLdb.cursors import datetime @@ -380,6 +379,10 @@ def has_pending_new_membership(number): AND event2.incoming_id = event.incoming_id AND event2.action = 'new_membership_delivered') AND activation_code IS NOT NULL""", [number], one=True) + + # What about card_number,phonenumber-tuples from kassa.neuf.no? + # TODO: lookup phone number-bound-memberships from kassa, not from incoming sms-s + # TODO: or should the place calling this function check an inside-table? return row.get('activation_code') if row else None @@ -405,6 +408,53 @@ def inside_code_purchase_date(): return purchase_date or '' +@app.route('/kassa-pending-membership') +def kassa_pending_membership(): + """ Checks has_pending_new_membership on specified number and returns activation code and purchase date. """ + number = request.args.get('number') + api_key = request.args.get('api_key') + + if api_key != app.config['INSIDE_API_KEY']: + abort(403) # Forbidden + + if number is None or len(number) == 0: + return jsonify(**{'error': 'Missing or empty param number'}) + + if number[0] == '+': + number = number.replace('+', '') + + if not number.isdigit(): + return jsonify(**{'error': "Param number is not numerical '{}'".format(number)}) + + activation_code = has_pending_new_membership(number) + if activation_code is None: + return jsonify(**{'result': None}) + + result = { + 'number': number, + 'activation_code': activation_code, + 'purchase_date': get_activation_code_purchase_date(number, activation_code) if activation_code else None + } + return jsonify(**{'result': result}) + + +@app.route('/kassa-add-pending-membership') +def kassa_add_pending_membership(): + """ Adds a pending membership to specified number """ + api_key = request.args.get('api_key') + data = request.get_json() + number = data['number'] + + if api_key != app.config['INSIDE_API_KEY']: + abort(403) # Forbidden + + app.logger.debug("Kassa add pending, number: %s", number) + + # TODO: insert event new_kassa_membership or renew_kassa_membership + result = 'TODO: Not implemented' + return jsonify(**{'result': result}) + + @app.route('/sendega-incoming', methods=['POST']) def incoming(): args = {'ip': request.headers.get('X-Real-IP') or request.remote_addr}