#!/usr/bin/python3 import sys import os from flask import render_template, url_for from app import app from flask import request, jsonify, send_from_directory from flask_restful import Resource, Api import PopufareAPI as api cache = {} def _cache_get_group(): if "group" not in cache: res = api.Request({"action":"get","function":"Group"}) cache["group"] = res["group"] return cache["group"] def _cache_get_other_pass(): if "ruleclass" not in cache: res = api.Request({"action":"search","function":"Ruleclass"}) cache["ruleclass"] = res["ruleclass"] cache["other_pass"] = [] for r in cache["ruleclass"]: if r["ruleclass"] != "OTHER": continue cache["other_pass"].append(r) return cache["other_pass"] def _cache(): _cache_get_group() _cache_get_other_pass() return cache @app.route('/favicon.ico') def favicon(): return send_from_directory(os.path.join(app.root_path, 'static'), 'favicon.ico', mimetype='favicon.ico') @app.route("/api/v1/User") def api_user(): field_names = [ "username", "first_name", "last_name", "email", "phone", "address", "city", "state", "zip", "shipping_name", "shipping_address", "shipping_city", "shipping_state", "shipping_country_code", "shipping_country_name", "shipping_zip", "password"]; args = request.args res = {} if 'action' in args: if args['action'] == 'add': api_req = { "action":"add", "function":"User" } for f in field_names: if f in args: api_req[f] = args[f] res = api.Request(api_req) elif args['action'] == 'get': api_req = { "action":"get", "function":"User" } if "userid" in args: api_req["userid"] = args["userid"] res = api.Request(api_req) return jsonify(res) @app.route("/api/v1/Card") def api_card(): field_names = [ "logical_card_id", "mag_token", "rfid_token", "userid" ] args = request.args res = {} print("api.card args:", args) if 'action' in args: if args['action'] == 'add': api_req = { "action":"add", "function":"Card" } for f in field_names: if f in args: api_req[f] = args[f] print("avpi/v1/Card send:", api_req) res = api.Request(api_req) print("got:...", res) elif args['action'] == 'update': cardid = -1 if ("logical_card_id" in args) and (args["logical_card_id"] != ''): cardid = args["logical_card_id"] else: subreq = {"action":"search", "function":"Card"} if ("mag_token" in args) and ("mag_token" != ""): subreq["mag_token"] = args["mag_token"] elif ("rfid_token" in args) and ("rfid_token" != ""): subreq["rfid_token"] = args["rfid_token"] x = api.Request(subreq) if ("logical_card_ids" in x) and (len(x["logical_card_ids"]) > 0): cardid = x["logical_card_ids"][0] api_req = { "action":"update", "function":"Card" } if "userid" in args: api_req["userid"] = args["userid"] api_req["logical_card_id"] = cardid res = api.Request(api_req) return jsonify(res) @app.route("/api/v1/Pass") def api_pass(): field_names = [ "logical_card_id", "nrides_orig", "nrides_remain", "nday_orig", "nday_expiration", "rule", "issued", "firstused", "lastused"] args = request.args res = {} print("api.pass args:", args) if 'action' in args: if args['action'] == 'add': api_req = { "action":"add", "function":"Pass" } for f in field_names: if f in args: api_req[f] = args[f] print("avpi/v1/Pass send:", api_req) res = api.Request(api_req) print("got:...", res) elif args['action'] == 'update': api_req = { "action":"update", "function":"Pass" } if "user_pass_id" in args: api_req["user_pass_id"] = args["user_pass_id"] print("avpi/v1/Pass.update send:", api_req) res = api.Request(api_req) elif args["action"] == "deactivate": api_req = { "action":"deactivate", "function":"Pass" } if "user_pass_id" in args: api_req["user_pass_id"] = args["user_pass_id"] print("avpi/v1/Pass.deactivate send:", api_req) res = api.Request(api_req) elif args["action"] == "search": api_req = {"action":"search", "function":"Pass" } return jsonify(res) @app.route("/api/v1/CardInfo") def api_card_info(): res = {} args = request.args print("....", args) if 'action' in args: if args['action'] == 'search': api_req = { "action":"search", "function":"CardInfo" } search_fields = ["logical_card_id", "mag_token", "rfid_token"] for sf in search_fields: if sf in args: api_req[sf] = args[sf] res = api.Request(api_req) print("got:...", res) else: api_req = { "function":"CardInfo" } search_fields = ["logical_card_id"] for sf in search_fields: if sf in args: api_req[sf] = args[sf] res = api.Request(api_req) print("got:...", res) return jsonify(res) @app.route("/api/v1/UserInfo") def api_user_info(): res = {} args = request.args userid = -1 if "username" in args: res = api.Request({"action":"search", "function":"User", "username":args["username"]}) if ("userids" in res) and (len(res["userids"]) > 0): userid = res["userids"][0] else: return jsonify({"error":"error", "message":"user not found"}) elif "userid" in args: userid = args["userid"] else: return jsonify({"error":"error", "message":"no userid"}) api_req = { "function":"UserInfo", "userid":userid } res = api.Request(api_req) return jsonify(res) @app.route("/api/v1/Group") def api_group_info(): return jsonify(_cache_get_group()) @app.route("/") @app.route("/index") def index(): usr = { "username":"clementine", "content" : "index" } return render_template( usr["content"] + '.html', title='home', user=usr) @app.route("/manage_card") def manage_card(): usr = { "username":"clementine" } x = _cache_get_group() print(x) x = _cache() print(x) return render_template( 'manage_card.html', title='home', user=usr, groups=_cache_get_group(), cache=_cache()) @app.route("/manage_user") def manage_user(): usr = { "username":"clementine" } return render_template( 'manage_user.html', title='home', user=usr, groups=_cache_get_group(), cache=_cache()) @app.route("/create_user") def create_user(): usr = { "username":"clementine" } return render_template( 'create_user.html', title='home', user=usr, groups=_cache_get_group(), cache=_cache()) @app.route("/reissue_card") def reissue_card(): usr = { "username":"clementine" } return render_template( 'reissue_card.html', title='home', user=usr, groups=_cache_get_group(), cache=_cache()) @app.route("/recycle_card") def recycle_card(): usr = { "username":"clementine" } return render_template( 'recycle_card.html', title='home', user=usr, groups=_cache_get_group(), cache=_cache()) @app.route("/add_card_block") def add_card_block(): usr = { "username":"clementine" } return render_template( 'add_card_block.html', title='home', user=usr, groups=_cache_get_group(), cache=_cache()) @app.route("/process_pending_card") def process_pending_card(): usr = { "username":"clementine" } return render_template( 'process_pending_card.html', title='home', user=usr, groups=_cache_get_group(), cache=_cache()) @app.route("/search") def search(): usr = { "username":"clementine" } return render_template( 'search.html', title='home', user=usr) @app.route("/help") def help(): usr = { "username":"clementine" } return render_template( 'help.html', title='home', user=usr, groups=_cache_get_group()) @app.route("/api/v1/hello") def api_hello(): #data = { "version":"v1", "type":"hello", "data":"hello" } sessid = request.cookies.get('sessionid') uname = request.cookies.get('username') sess_data = { "sessionid":sessid, "username":uname } data = popfareapi.hello(sess_data) return jsonify(data) ### #class Database: # def __init__(self): # host = "127.0.0.1" # user = "bus" # password = "" # db = "busdb" # # self.con = pymysql.connect(host=host, user=user, db=db, cursorclass=pymysql.cursors.DictCursor) # self.cur = self.con.cursor() # # def ok(self): # self.cur.execute("select rulename from rule_class where id = %s", 1) # res = self.cur.fetchall() # return res # #@app.route("/api/v1/card") #def api_card(): # # print(request.args) # param = request.args # # cardid = param.get("id") # mag_token = param.get("mag_token") # rfid_token = param.get("rfid_token") # # db = Database() # ok = db.ok() # # print(ok) # # if cardid: # print("cardid:", cardid) # elif mag_token: # print("mag:", mag_token) # elif rfid_token: # print("rfid:", rfid_token) # # # return jsonify({ "message": "card not implemented"}) # #@app.route("/api/v1/user") #def api_user(): # return jsonify({ "message": "user not implemented"}) # #@app.route("/api/v1/pass") #def api_pass(): # return jsonify({ "message": "pass not implemented"}) # #@app.route("/api/v1/group") #def api_group(): # return jsonify({ "message": "group not implemented"})