|
1 | | -import os |
| 1 | +"""Auth0's sample server |
| 2 | +""" |
| 3 | +from functools import wraps |
2 | 4 | import json |
| 5 | +import os |
3 | 6 |
|
4 | | -import requests |
5 | | -from functools import wraps |
6 | | -from flask import Flask, request, jsonify, session, redirect, render_template, send_from_directory |
7 | 7 | from dotenv import Dotenv |
| 8 | +from flask import Flask |
| 9 | +from flask import redirect |
| 10 | +from flask import render_template |
| 11 | +from flask import request |
| 12 | +from flask import send_from_directory |
| 13 | +from flask import session |
| 14 | +import requests |
| 15 | + |
| 16 | +import constants |
8 | 17 |
|
9 | 18 | # Load Env variables |
10 | 19 | env = None |
11 | 20 |
|
12 | 21 | try: |
13 | | - env = Dotenv('./.env') |
| 22 | + env = Dotenv('./.env') |
14 | 23 | except IOError: |
15 | | - env = os.environ |
| 24 | + env = os.environ |
16 | 25 |
|
17 | | -app = Flask(__name__, static_url_path= '') |
18 | | -app.secret_key = '@mgonto' |
| 26 | +app = Flask(__name__, static_url_path='') |
| 27 | +app.secret_key = constants.SECRET_KEY |
19 | 28 | app.debug = True |
20 | 29 |
|
21 | 30 | # Requires authentication annotation |
22 | | - |
23 | 31 | def requires_auth(f): |
24 | | - @wraps(f) |
25 | | - def decorated(*args, **kwargs): |
26 | | - if 'profile' not in session: |
27 | | - return redirect('/') |
28 | | - return f(*args, **kwargs) |
29 | | - |
30 | | - return decorated |
31 | | - |
| 32 | + @wraps(f) |
| 33 | + def decorated(*args, **kwargs): |
| 34 | + if constants.PROFILE_KEY not in session: |
| 35 | + return redirect('/') |
| 36 | + return f(*args, **kwargs) |
| 37 | + return decorated |
32 | 38 |
|
33 | 39 | # Controllers API |
34 | | -@app.route("/") |
| 40 | +@app.route('/') |
35 | 41 | def home(): |
36 | 42 | return render_template('home.html', env=env) |
37 | 43 |
|
38 | | -@app.route("/dashboard") |
| 44 | +@app.route('/dashboard') |
39 | 45 | @requires_auth |
40 | 46 | def dashboard(): |
41 | | - return render_template('dashboard.html', user=session['profile']) |
| 47 | + return render_template('dashboard.html', user=session[constants.PROFILE_KEY]) |
42 | 48 |
|
43 | 49 | @app.route('/public/<path:filename>') |
44 | 50 | def static_files(filename): |
45 | 51 | return send_from_directory('./public', filename) |
46 | 52 |
|
47 | 53 | @app.route('/callback') |
48 | 54 | def callback_handling(): |
49 | | - code = request.args.get('code') |
50 | | - |
51 | | - json_header = {'content-type': 'application/json'} |
52 | | - |
53 | | - token_url = "https://{domain}/oauth/token".format(domain=env["AUTH0_DOMAIN"]) |
54 | | - token_payload = { |
55 | | - 'client_id' : env['AUTH0_CLIENT_ID'], \ |
56 | | - 'client_secret' : env['AUTH0_CLIENT_SECRET'], \ |
57 | | - 'redirect_uri' : env['AUTH0_CALLBACK_URL'], \ |
58 | | - 'code' : code, \ |
59 | | - 'grant_type': 'authorization_code' \ |
60 | | - } |
61 | | - |
62 | | - token_info = requests.post(token_url, data=json.dumps(token_payload), headers = json_header).json() |
63 | | - |
64 | | - user_url = "https://{domain}/userinfo?access_token={access_token}" \ |
65 | | - .format(domain=env["AUTH0_DOMAIN"], access_token=token_info['access_token']) |
66 | | - |
67 | | - user_info = requests.get(user_url).json() |
68 | | - |
69 | | - session['profile'] = user_info |
70 | | - |
71 | | - return redirect('/dashboard') |
| 55 | + code = request.args.get(constants.CODE_KEY) |
| 56 | + json_header = {constants.CONTENT_TYPE_KEY: constants.APP_JSON_KEY} |
| 57 | + token_url = 'https://{domain}/oauth/token'.format(domain=env[constants.AUTH0_DOMAIN]) |
| 58 | + token_payload = { |
| 59 | + constants.CLIENT_ID_KEY : env[constants.AUTH0_CLIENT_ID], |
| 60 | + constants.CLIENT_SECRET_KEY : env[constants.AUTH0_CLIENT_SECRET], |
| 61 | + constants.REDIRECT_URI_KEY : env[constants.AUTH0_CALLBACK_URL], |
| 62 | + constants.CODE_KEY : code, |
| 63 | + constants.GRANT_TYPE_KEY : constants.AUTHORIZATION_CODE_KEY |
| 64 | + } |
| 65 | + |
| 66 | + token_info = requests.post(token_url, data=json.dumps(token_payload), |
| 67 | + headers=json_header).json() |
| 68 | + user_url = 'https://{domain}/userinfo?access_token={access_token}'.format( |
| 69 | + domain=env[constants.AUTH0_DOMAIN], access_token=token_info[constants.ACCESS_TOKEN_KEY]) |
| 70 | + user_info = requests.get(user_url).json() |
| 71 | + session[constants.PROFILE_KEY] = user_info |
| 72 | + return redirect('/dashboard') |
72 | 73 |
|
73 | 74 | if __name__ == "__main__": |
74 | | - app.run(host='0.0.0.0', port = int(os.environ.get('PORT', 3000))) |
| 75 | + app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 3000))) |
0 commit comments