mirror of
https://github.com/aaronleetw/Attendance.git
synced 2024-11-14 19:11:39 -08:00
Add token refresh; Add functions.py
This commit is contained in:
parent
345e32af17
commit
5fa1c62d7d
4 changed files with 88 additions and 118 deletions
44
app.py
44
app.py
|
@ -1,10 +1,4 @@
|
||||||
from flask import *
|
from functions import *
|
||||||
import pyrebase
|
|
||||||
from datetime import datetime
|
|
||||||
import pytz
|
|
||||||
import os
|
|
||||||
from dotenv import load_dotenv
|
|
||||||
import requests
|
|
||||||
from manage import manage
|
from manage import manage
|
||||||
from upload import upload
|
from upload import upload
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
@ -13,39 +7,6 @@ app.register_blueprint(manage)
|
||||||
app.register_blueprint(upload)
|
app.register_blueprint(upload)
|
||||||
|
|
||||||
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY')
|
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY')
|
||||||
config = {
|
|
||||||
"apiKey": os.environ.get('apiKey'),
|
|
||||||
"authDomain": os.environ.get('authDomain'),
|
|
||||||
"databaseURL": os.environ.get('databaseURL'),
|
|
||||||
"storageBucket": os.environ.get('storageBucket'),
|
|
||||||
"serviceAccount": os.environ.get('serviceAccount'),
|
|
||||||
"messagingSenderId": os.environ.get('messagingSenderId'),
|
|
||||||
"appId": os.environ.get('appId'),
|
|
||||||
"measurementId": os.environ.get('measurementId'),
|
|
||||||
}
|
|
||||||
firebase = pyrebase.initialize_app(config)
|
|
||||||
db = firebase.database()
|
|
||||||
auth = firebase.auth()
|
|
||||||
tz = pytz.timezone('Asia/Taipei')
|
|
||||||
|
|
||||||
|
|
||||||
def check_login_status():
|
|
||||||
return ('is_logged_in' not in session or
|
|
||||||
session['is_logged_in'] == False or
|
|
||||||
(datetime.now(tz) - session['loginTime']).total_seconds() > 3600)
|
|
||||||
|
|
||||||
|
|
||||||
def verify_recaptcha(response):
|
|
||||||
return True
|
|
||||||
data = {
|
|
||||||
'secret': os.environ.get('RECAPTCHA_SECRET'),
|
|
||||||
'response': response,
|
|
||||||
'remoteip': request.remote_addr
|
|
||||||
}
|
|
||||||
r = requests.post(
|
|
||||||
'https://www.google.com/recaptcha/api/siteverify', data=data)
|
|
||||||
print(r.json())
|
|
||||||
return r.json()['success']
|
|
||||||
|
|
||||||
|
|
||||||
@ app.route('/', methods=['GET', 'POST'])
|
@ app.route('/', methods=['GET', 'POST'])
|
||||||
|
@ -106,6 +67,7 @@ def selSubUser():
|
||||||
session.clear()
|
session.clear()
|
||||||
flash("Timeout. 遇時,請重新登入")
|
flash("Timeout. 遇時,請重新登入")
|
||||||
return redirect('/')
|
return redirect('/')
|
||||||
|
refresh_token()
|
||||||
if 'subuser_type' in session and session['subuser_type'] == 'admin':
|
if 'subuser_type' in session and session['subuser_type'] == 'admin':
|
||||||
return redirect('/manage')
|
return redirect('/manage')
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
|
@ -143,6 +105,7 @@ def chgPassword():
|
||||||
data = {}
|
data = {}
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
if not check_login_status():
|
if not check_login_status():
|
||||||
|
refresh_token()
|
||||||
return render_template('chgPassword.html')
|
return render_template('chgPassword.html')
|
||||||
else:
|
else:
|
||||||
return abort(404)
|
return abort(404)
|
||||||
|
@ -150,6 +113,7 @@ def chgPassword():
|
||||||
oldEmail = session['email']
|
oldEmail = session['email']
|
||||||
delUser = False
|
delUser = False
|
||||||
if not check_login_status():
|
if not check_login_status():
|
||||||
|
refresh_token()
|
||||||
try:
|
try:
|
||||||
if (verify_recaptcha("")):
|
if (verify_recaptcha("")):
|
||||||
oldUsr = auth.sign_in_with_email_and_password(
|
oldUsr = auth.sign_in_with_email_and_password(
|
||||||
|
|
78
functions.py
Normal file
78
functions.py
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
from flask import *
|
||||||
|
from typing import OrderedDict
|
||||||
|
from flask import *
|
||||||
|
import pyrebase
|
||||||
|
from datetime import datetime
|
||||||
|
import pytz
|
||||||
|
import os
|
||||||
|
import base64
|
||||||
|
import csv
|
||||||
|
import os
|
||||||
|
import pandas as pd
|
||||||
|
from random import randint
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
config = {
|
||||||
|
"apiKey": os.environ.get('apiKey'),
|
||||||
|
"authDomain": os.environ.get('authDomain'),
|
||||||
|
"databaseURL": os.environ.get('databaseURL'),
|
||||||
|
"storageBucket": os.environ.get('storageBucket'),
|
||||||
|
"serviceAccount": os.environ.get('serviceAccount'),
|
||||||
|
"messagingSenderId": os.environ.get('messagingSenderId'),
|
||||||
|
"appId": os.environ.get('appId'),
|
||||||
|
"measurementId": os.environ.get('measurementId'),
|
||||||
|
}
|
||||||
|
firebase = pyrebase.initialize_app(config)
|
||||||
|
db = firebase.database()
|
||||||
|
auth = firebase.auth()
|
||||||
|
storage = firebase.storage()
|
||||||
|
tz = pytz.timezone('Asia/Taipei')
|
||||||
|
|
||||||
|
|
||||||
|
def refresh_token():
|
||||||
|
user = auth.refresh(session['refreshToken'])
|
||||||
|
session['is_logged_in'] = True
|
||||||
|
session['token'] = user['idToken']
|
||||||
|
session['refreshToken'] = user['refreshToken']
|
||||||
|
session['loginTime'] = datetime.now(tz)
|
||||||
|
|
||||||
|
|
||||||
|
def next_item(odic, key):
|
||||||
|
return list(odic)[list(odic.keys()).index(key) + 1]
|
||||||
|
|
||||||
|
|
||||||
|
def check_login_status():
|
||||||
|
return ('is_logged_in' not in session or
|
||||||
|
session['is_logged_in'] == False or
|
||||||
|
(datetime.now(tz) - session['loginTime']).total_seconds() > 3600)
|
||||||
|
|
||||||
|
# LOGIN
|
||||||
|
|
||||||
|
|
||||||
|
def verify_recaptcha(response):
|
||||||
|
return True
|
||||||
|
data = {
|
||||||
|
'secret': os.environ.get('RECAPTCHA_SECRET'),
|
||||||
|
'response': response,
|
||||||
|
'remoteip': request.remote_addr
|
||||||
|
}
|
||||||
|
r = requests.post(
|
||||||
|
'https://www.google.com/recaptcha/api/siteverify', data=data)
|
||||||
|
print(r.json())
|
||||||
|
return r.json()['success']
|
||||||
|
|
||||||
|
# UPLOAD
|
||||||
|
|
||||||
|
|
||||||
|
def check_permission():
|
||||||
|
return (db.child('Users').child(session['uid']).child('permission').get(session['token']).val() == 'admin' and
|
||||||
|
db.child("Users").child(session['uid']).child("showUpload").get(session['token']).val() == '1')
|
||||||
|
|
||||||
|
|
||||||
|
def addZeroesUntil(str, number):
|
||||||
|
if len(str) >= number:
|
||||||
|
return str
|
||||||
|
else:
|
||||||
|
str = str + '0'
|
||||||
|
return addZeroesUntil(str, number)
|
41
manage.py
41
manage.py
|
@ -1,41 +1,6 @@
|
||||||
from flask import *
|
from functions import *
|
||||||
from typing import OrderedDict
|
|
||||||
from flask import *
|
|
||||||
import pyrebase
|
|
||||||
from datetime import datetime
|
|
||||||
import pytz
|
|
||||||
import os
|
|
||||||
import base64
|
|
||||||
from dotenv import load_dotenv
|
|
||||||
load_dotenv()
|
|
||||||
|
|
||||||
|
|
||||||
manage = Blueprint('manage', __name__)
|
manage = Blueprint('manage', __name__)
|
||||||
config = {
|
|
||||||
"apiKey": os.environ.get('apiKey'),
|
|
||||||
"authDomain": os.environ.get('authDomain'),
|
|
||||||
"databaseURL": os.environ.get('databaseURL'),
|
|
||||||
"storageBucket": os.environ.get('storageBucket'),
|
|
||||||
"serviceAccount": os.environ.get('serviceAccount'),
|
|
||||||
"messagingSenderId": os.environ.get('messagingSenderId'),
|
|
||||||
"appId": os.environ.get('appId'),
|
|
||||||
"measurementId": os.environ.get('measurementId'),
|
|
||||||
}
|
|
||||||
firebase = pyrebase.initialize_app(config)
|
|
||||||
db = firebase.database()
|
|
||||||
auth = firebase.auth()
|
|
||||||
storage = firebase.storage()
|
|
||||||
tz = pytz.timezone('Asia/Taipei')
|
|
||||||
|
|
||||||
|
|
||||||
def next_item(odic, key):
|
|
||||||
return list(odic)[list(odic.keys()).index(key) + 1]
|
|
||||||
|
|
||||||
|
|
||||||
def check_login_status():
|
|
||||||
return ('is_logged_in' not in session or
|
|
||||||
session['is_logged_in'] == False or
|
|
||||||
(datetime.now(tz) - session['loginTime']).total_seconds() > 3600)
|
|
||||||
|
|
||||||
|
|
||||||
def removeprefix(s, prefix):
|
def removeprefix(s, prefix):
|
||||||
|
@ -51,6 +16,7 @@ def manageProcess(fCommand, fData):
|
||||||
db.child("Users").child(
|
db.child("Users").child(
|
||||||
session['uid']).child("permission").get(session['token']).val()
|
session['uid']).child("permission").get(session['token']).val()
|
||||||
# end bug fix
|
# end bug fix
|
||||||
|
refresh_token()
|
||||||
pl = session['subuser_type']
|
pl = session['subuser_type']
|
||||||
if pl == 'admin':
|
if pl == 'admin':
|
||||||
homerooms = db.child("Homerooms").get(session['token']).val()
|
homerooms = db.child("Homerooms").get(session['token']).val()
|
||||||
|
@ -233,6 +199,7 @@ def manage_admin():
|
||||||
def group_teach_publish():
|
def group_teach_publish():
|
||||||
if (check_login_status()):
|
if (check_login_status()):
|
||||||
return redirect('/logout')
|
return redirect('/logout')
|
||||||
|
refresh_token()
|
||||||
cclass = {
|
cclass = {
|
||||||
"name": db.child("Classes").child("GP_Class").child(session['category']).child(
|
"name": db.child("Classes").child("GP_Class").child(session['category']).child(
|
||||||
"Class").child(session['class']).child("name").get(session['token']).val(),
|
"Class").child(session['class']).child("name").get(session['token']).val(),
|
||||||
|
@ -289,6 +256,7 @@ def group_teach_publish():
|
||||||
def homeroom_abs_publish():
|
def homeroom_abs_publish():
|
||||||
if (check_login_status()):
|
if (check_login_status()):
|
||||||
return redirect('/logout')
|
return redirect('/logout')
|
||||||
|
refresh_token()
|
||||||
date = request.form['date']
|
date = request.form['date']
|
||||||
homeroom = request.form['homeroom'].split('^')
|
homeroom = request.form['homeroom'].split('^')
|
||||||
period = request.form['period']
|
period = request.form['period']
|
||||||
|
@ -326,6 +294,7 @@ def homeroom_abs_publish():
|
||||||
def homeroom_confirm():
|
def homeroom_confirm():
|
||||||
if (check_login_status()):
|
if (check_login_status()):
|
||||||
return redirect('/logout')
|
return redirect('/logout')
|
||||||
|
refresh_token()
|
||||||
date = request.form['date']
|
date = request.form['date']
|
||||||
homeroom = request.form['homeroom'].split('^')
|
homeroom = request.form['homeroom'].split('^')
|
||||||
signature = request.form['signatureData']
|
signature = request.form['signatureData']
|
||||||
|
|
43
upload.py
43
upload.py
|
@ -1,48 +1,7 @@
|
||||||
from flask import *
|
from functions import *
|
||||||
import pyrebase
|
|
||||||
from datetime import datetime
|
|
||||||
import pytz
|
|
||||||
import csv
|
|
||||||
import os
|
|
||||||
import pandas as pd
|
|
||||||
from dotenv import load_dotenv
|
|
||||||
from random import randint
|
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
upload = Blueprint('upload', __name__)
|
upload = Blueprint('upload', __name__)
|
||||||
config = {
|
|
||||||
"apiKey": os.environ.get('apiKey'),
|
|
||||||
"authDomain": os.environ.get('authDomain'),
|
|
||||||
"databaseURL": os.environ.get('databaseURL'),
|
|
||||||
"storageBucket": os.environ.get('storageBucket'),
|
|
||||||
"serviceAccount": os.environ.get('serviceAccount'),
|
|
||||||
"messagingSenderId": os.environ.get('messagingSenderId'),
|
|
||||||
"appId": os.environ.get('appId'),
|
|
||||||
"measurementId": os.environ.get('measurementId'),
|
|
||||||
}
|
|
||||||
firebase = pyrebase.initialize_app(config)
|
|
||||||
db = firebase.database()
|
|
||||||
auth = firebase.auth()
|
|
||||||
tz = pytz.timezone('Asia/Taipei')
|
|
||||||
|
|
||||||
|
|
||||||
def check_login_status():
|
|
||||||
return ('is_logged_in' not in session or
|
|
||||||
session['is_logged_in'] == False or
|
|
||||||
(datetime.now(tz) - session['loginTime']).total_seconds() > 3600)
|
|
||||||
|
|
||||||
|
|
||||||
def check_permission():
|
|
||||||
return (db.child('Users').child(session['uid']).child('permission').get(session['token']).val() == 'admin' and
|
|
||||||
db.child("Users").child(session['uid']).child("showUpload").get(session['token']).val() == '1')
|
|
||||||
|
|
||||||
|
|
||||||
def addZeroesUntil(str, number):
|
|
||||||
if len(str) >= number:
|
|
||||||
return str
|
|
||||||
else:
|
|
||||||
str = str + '0'
|
|
||||||
return addZeroesUntil(str, number)
|
|
||||||
|
|
||||||
|
|
||||||
@upload.route('/upload/users', methods=['GET', 'POST'])
|
@upload.route('/upload/users', methods=['GET', 'POST'])
|
||||||
|
|
Loading…
Reference in a new issue