import os import copy import json import base64 import pyDes import qrcode from api.modules import utils from flask import Flask, request from flask_restful import Resource, Api, abort enc = pyDes.triple_des(b'Kz\n\x1a\xc1~\x05#\xf9\xad\xc8\xa2\x15\xd5J\x89\xe4RT\x8d\xb3?\x93\x1c') app = Flask(__name__) api = Api(app) db_path = os.path.join(app.root_path, 'databases', 'users.json') with open(db_path, 'r') as f: users = json.load(f) class Users(Resource): def post(self): """ Example POST Data: username=& password=& realname=& # OPTIONAL avatar=& # OPTIONAL """ args = request.form user_id = utils.generate_id() user = { 'id': user_id, 'username': args['username'], 'realname': args.get('realname'), 'avatar' : args.get('avatar'), 'password': utils.md5( args[ 'password' ] ), 'stats': { 'bus_usage_week': 0, 'bus_usage_month': 0, 'bus_usage_year': 0 }, 'daily_electricity_usage': [], 'points': 0 } users.append(user) with open(db_path, 'w') as f: json.dump(users, f, indent=4) return user class User(Resource): def get(self, user_id): try: user = utils.find_by_id( users.values(), user_id ) if not user: raise Exception('User not found!') del user['password'] return user except: abort(404, error="User {} doesn't exist".format(user_id)) class Login(Resource): def post(self): """ Example POST Data: username=& password= """ #Password for efe is 12345 args = request.form username = args['username'] password = utils.md5( args[ 'password' ] ) if not username in users: return [False, {}] user = copy.deepcopy(users[username]) if user['password'] == password: del user["password"] return [True, json.dumps(user)] else: return [False, {}] class QRCode(Resource): def post(self): """ POST Data: id= """ user_id = request.form['id'] if utils.find_by_id(users.values(), user_id): image_path = os.path.join(app.root_path, '..', 'images', user_id + '_qr' + '.png') if not os.path.exists(image_path): encrypted_id = enc.encrypt(user_id, padmode=2) img = qrcode.make(base64.b64encode(encrypted_id).decode('utf-8')) img.save(image_path) return '/img/' + user_id + '_qr' + '.png' else: abort(404, error="User {} doesn't exist".format(user_id)) class QRRead(Resource): def post(self): """ POST Data: qr_data= """ qr_data = base64.b64decode(request.form['qr_data']) user_id = enc.decrypt(qr_data, padmode=2) return utils.find_by_id(users.values(), user_id.decode()) if __name__ == '__main__': api.add_resource(Users, '/users', '/users/') api.add_resource(User, '/users/', '/users//') api.add_resource(Login, '/login', '/login/') app.run(host='0.0.0.0', port=5000)