diff --git a/server_side/api/app.py b/server_side/api/app.py index 653df3f..d6cf584 100644 --- a/server_side/api/app.py +++ b/server_side/api/app.py @@ -24,6 +24,8 @@ if __name__ == '__main__': api.add_resource( user_info.Users, '/users', '/users/' ) api.add_resource( user_info.User, '/users/', '/users//' ) api.add_resource( user_info.Login, '/login', '/login/' ) + api.add_resource(user_info.QRCode, '/qr', '/qr/') + api.add_resource(user_info.QRRead, '/qr_data', '/qr_data/') api.add_resource(utility.Resources, '/resources', '/resources/') diff --git a/server_side/api/images/9vard12ty0ad2yvwp3q53rsf3h43r2vq_qr.png b/server_side/api/images/9vard12ty0ad2yvwp3q53rsf3h43r2vq_qr.png new file mode 100644 index 0000000..e86b7fd Binary files /dev/null and b/server_side/api/images/9vard12ty0ad2yvwp3q53rsf3h43r2vq_qr.png differ diff --git a/server_side/api/modules/user_info.py b/server_side/api/modules/user_info.py index fc76082..35b5aab 100644 --- a/server_side/api/modules/user_info.py +++ b/server_side/api/modules/user_info.py @@ -1,12 +1,17 @@ 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') @@ -80,9 +85,38 @@ class Login(Resource): 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) \ No newline at end of file + app.run(host='0.0.0.0', port=5000) diff --git a/server_side/api/modules/voting_system.py b/server_side/api/modules/voting_system.py index 3c79f8f..842ee30 100644 --- a/server_side/api/modules/voting_system.py +++ b/server_side/api/modules/voting_system.py @@ -47,7 +47,6 @@ class Votings(Resource): """ args = request.form - args = request.form voting_id = len(votings) + 1 voting = { 'id': voting_id, diff --git a/server_side/api/requirements.txt b/server_side/api/requirements.txt index 327aa5d..6d1c379 100644 --- a/server_side/api/requirements.txt +++ b/server_side/api/requirements.txt @@ -9,3 +9,6 @@ MarkupSafe==1.1.1 pytz==2018.9 six==1.12.0 Werkzeug==0.14.1 +pyDes==2.0.1 +qrcode==6.1 +Pillow==6.0.0 \ No newline at end of file