|
| 1 | +from configparser import ConfigParser |
| 2 | + |
1 | 3 | from flask import Flask
|
2 | 4 | from flask import jsonify
|
3 |
| -from flask import request |
| 5 | +from flask import request, url_for, redirect, session |
| 6 | +from flask_login import logout_user |
4 | 7 |
|
5 | 8 | from authenticator.adapters.db import api as db_api
|
6 |
| -from authenticator import config |
| 9 | +from authenticator.adapters.login import loginmanager |
| 10 | + |
| 11 | +config = ConfigParser() |
| 12 | +config.read("config.ini") |
| 13 | + |
| 14 | +database = config.get('default', 'db') |
| 15 | +host = config.get('default', 'db_host') |
| 16 | +port = config.get('default', 'db_port') |
7 | 17 |
|
8 | 18 | app = Flask(__name__)
|
| 19 | +app.config['MONGO_URI'] = f'mongodb://{host}:{port}/{database}' |
| 20 | +app.config['SECRET_KEY'] = "b9dd1b2f" |
| 21 | +app.config['GOOGLE_CLIENT_ID'] = config.get('google-oauth', 'client_id') |
| 22 | +app.config['GOOGLE_CLIENT_SECRET'] = config.get( |
| 23 | + 'google-oauth', 'client_secret') |
9 | 24 |
|
10 |
| -app.config['MONGO_DBNAME'] = config.DATABASE |
11 |
| -app.config['MONGO_URI'] = f'mongodb://{config.DB_HOST}:{config.DB_PORT}/{config.DATABASE}' |
12 | 25 |
|
13 | 26 | db_obj = db_api.MongoAdapters(app)
|
| 27 | +login_obj = loginmanager.loginManager(app) |
14 | 28 |
|
15 | 29 |
|
16 | 30 | @app.route('/users', methods=['GET'])
|
17 | 31 | def get_users():
|
18 | 32 | return db_obj.get_all_users()
|
19 | 33 |
|
20 | 34 |
|
21 |
| -@app.route('/add', methods=['POST']) |
22 |
| -def add_users(): |
23 |
| - name = request.json['name'] |
24 |
| - email = request.json['email'] |
25 |
| - return db_obj.add_users(name, email) |
| 35 | +@app.route('/', methods=['GET']) |
| 36 | +def index(): |
| 37 | + return "Welcome to nomad Authenticator." |
| 38 | + |
| 39 | + |
| 40 | +def add_users(name, email, provider): |
| 41 | + return db_obj.add_users(name, email, provider) |
| 42 | + |
| 43 | + |
| 44 | +@app.route('/login/google') |
| 45 | +def google_login(): |
| 46 | + login_obj.auth.register( |
| 47 | + name='google', |
| 48 | + client_id=app.config["GOOGLE_CLIENT_ID"], |
| 49 | + client_secret=app.config["GOOGLE_CLIENT_SECRET"], |
| 50 | + access_token_url='https://accounts.google.com/o/oauth2/token', |
| 51 | + access_token_params=None, |
| 52 | + authorize_url='https://accounts.google.com/o/oauth2/auth', |
| 53 | + authorize_params=None, |
| 54 | + api_base_url='https://www.googleapis.com/oauth2/v1/', |
| 55 | + userinfo_endpoint='https://openidconnect.googleapis.com/v1/userinfo', |
| 56 | + client_kwargs={'scope': 'openid email profile'}, |
| 57 | + ) |
| 58 | + google = login_obj.auth.create_client('google') |
| 59 | + redirect_uri = url_for('google_authorize', _external=True) |
| 60 | + return google.authorize_redirect(redirect_uri) |
| 61 | + |
| 62 | + |
| 63 | +@app.route('/login/google/authorize') |
| 64 | +def google_authorize(): |
| 65 | + google = login_obj.auth.create_client('google') |
| 66 | + token = google.authorize_access_token() |
| 67 | + resp = google.get('userinfo').json() |
| 68 | + return add_users(resp['name'], resp['email'], "google") |
| 69 | + |
| 70 | + |
| 71 | +@app.route('/logout') |
| 72 | +def user_logout(): |
| 73 | + for key in list(session.keys()): |
| 74 | + session.pop(key) |
| 75 | + return redirect('/') |
26 | 76 |
|
27 | 77 |
|
28 | 78 | if __name__ == '__main__':
|
|
0 commit comments