/
app.py
90 lines (70 loc) · 2.45 KB
/
app.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# RESTful API Example
from flask import Flask, request, redirect,render_template
import base64
import random
import time
app = Flask(__name__)
redirect_uri = "http://localhost:5000/client/passport"
client_id = '123456'
users[client_id] = []
auth_code = {}
oauth_redirect_uri = []
users = {
"zagjab": ["123456"]
}
def gen_token(uid):
token = base64.b64encode(":".join([str(uid), str(random.random()), str(time.time() + 7200)]))
users[uid].append(token)
return token
def gen_auth_code(uri):
code=random.randint(0,10000)
auth_code[code]=uri
return code
def verify_token(token):
_token = base64.b64decode(token)
if not users.get(_token.split(':')[0])[-1] == token:
return -1
if float(_token.split(':')[-1]) >= time.time():
return 1
else:
return 0
@app.route('/', methods=['POST', 'GET'])
def index():
return render_template('Hello')
@app.route('/login', methods=['POST', 'GET'])
def login():
uid, pw = base64.b64decode(request.headers['Authorization'].split(' ')[-1]).split(':')
if users.get(uid)[0] == pw:
return gen_token(uid)
else:
return 'error'
@app.route('/oauth', methods=['POST', 'GET'])
def oauth():
if request.args.get('user'):
if users.get(request.args.get('user'))[0] ==request.args.get('pw') and oauth_redirect_uri:
uri = oauth_redirect_uri[0] + '?code=%s'% gen_auth_code(oauth_redirect_uri[0])
return redirect(uri)
if request.args.get('code'):
if auth_code.get(int(request.args.get('code'))) == request.args.get('redirect_uri'):
return gen_token(request.args.get('client_id'))
if request.args.get('redirect_uri'):
oauth_redirect_uri.append(request.args.get('redirect_uri'))
return 'please login'
@app.route('/client/login', methods=['POST','GET'])
def client_login():
uri = "http://localhost:5000/oauth?response_type=code&client_id=%s&redirect_uri=%s" %(client_id,redirect_uri)
return redirect(uri)
@app.route('/client/passport', methods=['POST','GET'])
def client_passport():
code = request.args.get('code')
uri = 'http://localhost:5000/oauth?response_type=%s&client_id=%s&redirect_uri=%s' %(code,client_id,redirect_uri)
return redirect(uri)
@app.route('/test1', methods=['POST', 'GET'])
def test():
token = request.args.get('token')
if verify_token(token) == 1:
return 'data'
else:
return 'error'
if __name__ == '__main__':
app.run(debug=True)