1
1
import os
2
- import requests
2
+ import oauthlib
3
3
4
4
from flask import Flask , session , url_for , abort , redirect , request
5
5
6
6
from authenticator .adapters .db import api as db_api
7
7
from authenticator .adapters .login import google_adapter
8
8
from authenticator .utils import utils
9
9
10
- database = os .environ .get ("db" , "authenticator" )
10
+
11
+ app = Flask (__name__ )
12
+
11
13
host = os .environ .get ("db_host" , "mongo" )
12
14
port = os .environ .get ("db_port" , "27017" )
13
15
14
- app = Flask (__name__ )
15
- app .config ["MONGO_URI" ] = f"mongodb://{ host } :{ port } /{ database } "
16
16
app .config ["SECRET_KEY" ] = "b9dd1b2f"
17
17
os .environ ["OAUTHLIB_INSECURE_TRANSPORT" ] = "1"
18
18
app .config ["GOOGLE_CLIENT_ID" ] = os .environ .get ("GOOGLE_CLIENT_ID" , None )
19
19
app .config ["GOOGLE_CLIENT_SECRET" ] = os .environ .get ("GOOGLE_CLIENT_SECRET" , None )
20
20
21
21
22
- db_obj = db_api .MongoAdapters (app )
22
+ db_obj = db_api .MongoAdapters (host , port )
23
23
google_adapter_obj = google_adapter .GoogleLoginAdapter ()
24
24
25
25
@@ -33,11 +33,6 @@ def wrapper(*args, **kwargs):
33
33
return wrapper
34
34
35
35
36
- @app .route ("/users" , methods = ["GET" ])
37
- def get_users ():
38
- return db_obj .get_all_users ()
39
-
40
-
41
36
@app .route ("/" )
42
37
def index ():
43
38
return "Hello World <a href='/googlelogin'><button>Sign Up with google</button></a>"
@@ -46,10 +41,20 @@ def index():
46
41
def add_users (name , email , provider = None , provider_id = None ):
47
42
48
43
return db_obj .add_users (
49
- name , email , utils .get_current_time (), "admin" , provider , provider_id
44
+ name ,
45
+ email ,
46
+ utils .get_current_time (),
47
+ "admin" ,
48
+ provider ,
49
+ provider_id ,
50
50
)
51
51
return db_obj .add_users (
52
- name , email , utils .get_current_time (), "user" , provider = None , provider_id = None
52
+ name ,
53
+ email ,
54
+ utils .get_current_time (),
55
+ "user" ,
56
+ provider ,
57
+ provider_id ,
53
58
)
54
59
55
60
@@ -60,20 +65,34 @@ def login():
60
65
return redirect (authorization_url )
61
66
62
67
63
- @app .route ("/callback" )
64
- def callback ():
65
- id_info = google_adapter_obj .get_basic_info (request , session )
68
+ @app .route ("/googlecallback" )
69
+ def googlecallback ():
70
+ try :
71
+ id_info = google_adapter_obj .get_basic_info (request , session )
72
+ except oauthlib .oauth2 .rfc6749 .errors .InvalidGrantError :
73
+ return redirect ("/" )
74
+
66
75
if not session ["state" ] == request .args ["state" ]:
67
76
abort (500 ) # State does not match!
68
77
69
78
name = id_info .get ("name" )
70
79
email = id_info .get ("email" )
71
80
google_id = id_info .get ("sub" )
81
+
72
82
session ["google_id" ] = google_id
73
83
session ["name" ] = name
74
84
session ["email" ] = email
75
- add_users (name , email , "google" , google_id )
76
- return redirect ("/protected_area" )
85
+ return add_users (name , email , "google" , google_id )
86
+
87
+
88
+ @app .route ("/fetch" , methods = ["GET" ])
89
+ def validate_users ():
90
+ token = request .args .get ("token" )
91
+ result = db_obj .is_valid_user (token )
92
+ if isinstance (result , dict ):
93
+ return result
94
+ else :
95
+ abort (401 , "unauthorized" )
77
96
78
97
79
98
@app .route ("/logout" )
0 commit comments