-
Notifications
You must be signed in to change notification settings - Fork 0
/
html_pages_routes.py
169 lines (129 loc) · 5.11 KB
/
html_pages_routes.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#!/usr/bin/python3
"""
the main module of the app
"""
from flask import Flask, redirect, url_for, session, request, jsonify, render_template
from authlib.integrations.flask_client import OAuth
import requests
from backend_code.database.data_operations import close_session, get_data_with_email, get_emails_data, insert_data
from backend_code.database.user_operations import get_user_data_email_username, update_user_data_id
from backend_code.word_fliter import words_filter
from flask import Flask, make_response, jsonify, request, render_template, make_response
from flask_cors import CORS
import re
import base64
from validate import validate
from jwt_encoding_decoding_method import create_jwt, verify_jwt
from datetime import datetime, timedelta
app = Flask(__name__)
CORS(app, supports_credentials=True)
app.secret_key = 'i am good'
google_client_id = '616226883527-al4o834funvq9v121lpnuaorqnrpn2u1.apps.googleusercontent.com'
google_client_secret = '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'
google_redirect_uri = 'http://localhost:8000/authorize'
oauth = OAuth(app)
google = oauth.register(
name='google',
client_id=google_client_id,
client_secret=google_client_secret,
authorize_url='https://accounts.google.com/o/oauth2/auth',
authorize_params=None,
access_token_url='https://accounts.google.com/o/oauth2/token',
access_token_params=None,
refresh_token_url=None,
redirect_uri=google_redirect_uri,
client_kwargs={'scope': 'email profile'},
)
@app.route('/login')
def login():
if request.cookies.get('token') is None:
if request.args.get('next_page') is not None:
session['next_page'] = request.args.get('next_page')
redirect_uri = url_for('authorize', _external=True)
return google.authorize_redirect(redirect_uri, prompt='consent')
else:
return redirect(url_for('landing_page'))
@app.route('/authorize')
def authorize():
try:
token = google.authorize_access_token()
session['google_token'] = token
google_token = session['google_token']
resp = (google.get('https://www.googleapis.com/oauth2/v1/userinfo', token=google_token)).json()
data = get_user_data_email_username(resp["email"])
if data is None:
google_data = {
"email_address": resp["email"],
"name": resp["name"],
"photo_url": resp["picture"]
}
new_user = insert_data("User", google_data)
user_id = new_user.id
else:
user_object = update_user_data_id(data["user_id"],
{"name": resp["name"],
"photo_url": resp["picture"]})
user_id = user_object.id
token = create_jwt({"data_1": user_id, 'exp': datetime.utcnow() + timedelta(seconds=1200)})
if 'next_page' in session:
next_page = session['next_page']
del session['next_page']
response = make_response(redirect(next_page))
elif 'next' in session:
next_url = session['next']
del session['next']
response = make_response(redirect(next_url))
else:
response = make_response(jsonify({"status": "okay"}), 200)
response.set_cookie('token', token, samesite='None', secure=True)
return response
except Exception as e:
print(e)
#return redirect('/')
@app.route('/logout')
def logout():
session.pop('google_token', None)
return jsonify({"status": "okay"}), 200
@app.route("/", strict_slashes=False, methods=['GET'])
def landing_page():
""" return the landing page"""
jwt_token = request.cookies.get('token')
data = None
name = False
if jwt_token is not None:
data = verify_jwt(jwt_token)
if data is not None:
name = True
img_source = "/static/spam.jpg"
return render_template("landing_page.html", img_source=img_source, name=name)
@app.route("/spam_filter", strict_slashes=False, methods=['GET'])
def reder_filter_page():
""" reder the main page of spam filter """
jwt_token = request.cookies.get('token')
data = None
if jwt_token is not None:
data = verify_jwt(jwt_token)
if jwt_token is None or data is None:
session['next'] = '/spam_filter'
res = make_response(redirect(url_for('login')))
if jwt_token is not None:
res.delete_cookie('token')
return res
return render_template("spam_filter.html")
@app.route("/user_profile", strict_slashes=False, methods=['GET'])
def get_user_profile_page():
""" render the user profile page """
jwt_token = request.cookies.get('token')
data = None
if jwt_token is not None:
data = verify_jwt(jwt_token)
if jwt_token is None or data is None:
session['next'] = '/user_profile'
return redirect(url_for('login'))
return render_template("profile.html")
@app.errorhandler(404)
def not_found(error):
""" handler for 404 errors """
return make_response(jsonify({'error': 'Not found'}), 404)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8000, threaded=True, debug=True)