-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathserver.py
69 lines (61 loc) · 1.97 KB
/
server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/python
# -*- coding: utf-8 -*-
from re import match
from flask import Flask, render_template, g, request, jsonify, abort
from utils.db.auth_methods import register as do_register
from utils.db.auth_methods import login as do_login
app = Flask(__name__)
# Response Meta Dictionary
R = {
"fail": {
"msg" : "Request Failed",
"code" : 0
},
"success": {
"msg" : "Request Succeed",
"code" : 1
}
}
ERRORS = { 'invalid_param': 'invalid %s' }
RESPONSE = { "data" : "", "meta" : R['success'] }
REG_IP = r"^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
REG_EMAIL = r"^[A-Za-z0-9\.\+_-]+@[A-Za-z0-9\._-]+\.[a-zA-Z]*$"
REG_PASSWORD = r"[A-Za-z0-9\._-]"
regis_req = {
"email": REG_EMAIL,
"password": REG_PASSWORD,
"ip": REG_IP
}
login_req = {
"email": REG_EMAIL,
"password": REG_PASSWORD,
"ip": REG_IP
}
def handlePOSTRequest(req, handler, method):
r = RESPONSE
if request.method == 'POST' and request.is_json:
req_dict = request.get_json()
req_dict['ip'] = request.remote_addr
if req_dict.keys() == req.keys():
for key in req_dict.keys():
if not match(req[key], req_dict[key]):
r['meta'] = R['fail']
r['data'] = ERRORS['invalid_param'] % key
return jsonify(**r)
return handler(req_dict, r, method)
abort(401)
def request_handler(request_dict, r, method):
succeed, result = method(request_dict)
if not succeed:
r['meta'] = R['fail']
r['data'] = ERRORS['invalid_param'] % result
else:
r['meta'] = R['success']
r['data'] = result
return jsonify(**r)
@app.route("/register", methods=['POST'])
def register():
return handlePOSTRequest(regis_req, request_handler, do_register)
@app.route("/login", methods=['POST'])
def login():
return handlePOSTRequest(login_req, request_handler, do_login)