Spaces:
Sleeping
Sleeping
File size: 5,103 Bytes
428a607 6954bf4 428a607 6954bf4 428a607 78bf9c7 428a607 6954bf4 428a607 |
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 |
import json
from datetime import datetime
from flask import Blueprint, render_template, request, flash, redirect, url_for
from requests.exceptions import HTTPError
from firebase_config import firebase_auth, firebase_db
from flask_login import logout_user, login_user
from middleware import load_user
from pytz import timezone
auth = Blueprint('auth', __name__, template_folder='templates')
tz = timezone('Asia/Jakarta')
@auth.route('/sign-up', methods=['GET', 'POST'])
def sign_up():
if request.method == 'POST':
nama = request.form['nama']
email = request.form['email']
password = request.form['password']
confirm_password = request.form['confirm_password']
if not nama or not email or not password or not confirm_password:
flash(('Pendaftaran Gagal', 'Semua isian harus diisi'), 'error')
return render_template('auth/sign_up.html')
if not email.endswith('pnj.ac.id'):
flash(('Pendaftaran Gagal', 'Harus menggunakan email Politeknik Negeri Jakarta'), 'error')
return render_template('auth/sign_up.html')
if password != confirm_password:
flash(('Pendaftaran Gagal', 'Password dan konfirmasi password tidak sama'), 'error')
return render_template('auth/sign_up.html')
try:
user = firebase_auth.create_user_with_email_and_password(email, password)
data = {
'nama': nama,
'email': email,
'role': 'pengguna',
'registered_at': datetime.now(tz),
'inactive': '0'
}
firebase_db.collection('users').document(user['localId']).set(data)
firebase_auth.send_email_verification(user['idToken'])
flash(('Pendaftaran Diproses', 'Periksa email untuk verifikasi akun'), 'success')
except HTTPError as e:
message = json.loads(e.strerror)['error']['message']
if 'WEAK_PASSWORD' in message:
message = 'Password minimal 6 karakter'
if 'EMAIL_EXISTS' in message:
message = 'Email sudah terdaftar'
flash(('Pendaftaran Gagal', message), 'error')
return render_template('auth/sign_up.html')
@auth.route('/sign-in', methods=['GET', 'POST'])
def sign_in():
if request.method == 'POST':
email = request.form['email']
password = request.form['password']
if not email or not password:
flash(('Masuk Gagal', 'Semua isian harus diisi'), 'error')
return render_template('auth/sign_in.html')
try:
user = firebase_auth.sign_in_with_email_and_password(email, password)
user_info = firebase_auth.get_account_info(user['idToken'])['users'][0]
if user_info['emailVerified'] == False:
flash(('Masuk Gagal', 'Email belum diverifikasi'), 'error')
return render_template('auth/sign_in.html')
except HTTPError as e:
message = json.loads(e.strerror)['error']['message']
if 'INVALID_LOGIN_CREDENTIALS' in message:
message = 'Email atau password salah'
flash(('Masuk Gagal', message), 'error')
return render_template('auth/sign_in.html')
except Exception as e:
flash(('Masuk Gagal', 'Server sedang bermasalah'), 'error')
return render_template('auth/sign_in.html')
user_id = user_info['localId']
user = load_user(user_id)
if user.inactive == "1":
flash(('Masuk Gagal', 'Akun anda dinonaktifkan oleh admin'), 'error')
return render_template('auth/sign_in.html')
if user:
login_user(user)
if user.role == 'admin':
return redirect(url_for('dashboard.lecturer'))
elif user.role == "pengguna":
return redirect(url_for('dashboard.classifier'))
return render_template('auth/sign_in.html')
@auth.route('/reset-password', methods=['GET', 'POST'])
def reset_password():
if request.method == 'POST':
email = request.form['email']
if not email:
flash(('Reset Password Gagal', 'Email harus diisi'), 'error')
return render_template('auth/reset_password.html')
try:
firebase_auth.send_password_reset_email(email)
flash(('Reset Password Diproses', 'Periksa email untuk reset password'), 'success')
except HTTPError as e:
message = json.loads(e.strerror)['error']['message']
if 'INVALID_EMAIL' in message:
message = 'Email tidak ditemukan'
flash(('Reset Password Gagal', message), 'error')
except Exception as e:
flash(('Reset Password Gagal', 'Server sedang bermasalah'), 'error')
return render_template('auth/reset_password.html')
@auth.route('/sign-out')
def sign_out():
logout_user()
return redirect(url_for('auth.sign_in')) |