Skip to content

Commit

Permalink
🎨 • Fixed README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Oneloutre committed Apr 23, 2024
1 parent caa8d80 commit 7a5efb9
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 15 deletions.
58 changes: 48 additions & 10 deletions app.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,70 @@
from routes.auth.login import *
from routes.auth.register import *
import os
from flask_jwt_extended import jwt_required, JWTManager, unset_jwt_cookies, get_jwt_identity, get_jwt
from datetime import timedelta, datetime, timezone


# Create the application.
APP = flask.Flask(__name__)
jwt = JWTManager(APP)

@APP.route('/login', methods=['GET', 'POST'])
def login():
return log_in()
APP.config['JWT_TOKEN_LOCATION'] = ['cookies']
APP.config['JWT_SECRET_KEY'] = 'your-secret-key'
APP.config['JWT_ACCESS_TOKEN_EXPIRES'] = timedelta(days=1)


@APP.route('/login', methods=['POST', 'GET'])
def login():
if os.path.exists('user_files/admin/admin.json'):
return log_in()
else:
return redirect(url_for('register'), code=301)


@APP.route('/register', methods=['GET', 'POST'])
def register():
if os.path.exists('user_files/admin/user.json'):
if os.path.exists('user_files/admin/admin.json'):
return 'You are already registered'
return redirect(url_for('index'), code=301)
else:
return register_user()


@APP.route('/', methods=['GET', 'POST'])
@jwt_required()
def index():
if os.path.exists('user_files/admin/admin.json'):
return 'You are logged in'
else:
return register_user()
return render_template('index.html', code=200)


@APP.route('/logout', methods=['POST'])
def logout():
resp = flask.make_response(flask.redirect(flask.url_for('login')))
unset_jwt_cookies(resp)
return resp


@jwt.unauthorized_loader
def my_invalid_token_callback(expired_token):
print("unauthorized_loader", expired_token)
return redirect(url_for('login'))


@APP.errorhandler(401)
def unauthorized_error(error):
return redirect(url_for('login'))


@APP.after_request
def refresh_expiring_jwts(response):
try:
exp_timestamp = get_jwt()["exp"]
now = datetime.now(timezone.utc)
target_timestamp = datetime.timestamp(now + timedelta(minutes=30))
if target_timestamp > exp_timestamp:
access_token = create_access_token(identity=get_jwt_identity())
set_access_cookies(response, access_token)
return response
except (RuntimeError, KeyError):
return response


if __name__ == '__main__':
Expand Down
13 changes: 8 additions & 5 deletions routes/auth/login.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from flask import render_template, request, redirect, url_for, make_response
from flask import render_template, request, redirect, url_for, make_response, jsonify
import json, bcrypt
from flask_jwt_extended import create_access_token, set_access_cookies


def log_in():
error = None
Expand All @@ -9,8 +11,11 @@ def log_in():

encrypted_username, encrypted_email, encrypted_password = load_encrypted_creds('user_files/admin/admin.json')

if bcrypt.checkpw(username.encode('utf8'), encrypted_username) or bcrypt.checkpw(username.encode('utf8'), encrypted_email) and bcrypt.checkpw(password.encode('utf8'), encrypted_password):
return redirect(url_for('index'))
if (bcrypt.checkpw(username.encode('utf8'), encrypted_username) or bcrypt.checkpw(username.encode('utf8'), encrypted_email)) and bcrypt.checkpw(password.encode('utf8'), encrypted_password):
access_token = create_access_token(identity=username)
response = make_response(redirect(url_for('index')))
set_access_cookies(response, access_token)
return response
else:
error = 'Invalid Credentials. Please try again.'
return render_template('login/login.html', error=error)
Expand All @@ -24,5 +29,3 @@ def load_encrypted_creds(file):
password = loaded_json["password"].encode('utf8')
return username, email, password



43 changes: 43 additions & 0 deletions templates/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Page d'accueil</title>
<!-- Ajouter Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KyZXEAg3QhqLMpG8r+Knujsl5+zr/2+AzmbPFEY1pck9Oi7qOB7w5BzWRwKtk81U" crossorigin="anonymous">
<style>
/* Styles personnalisés ici */
</style>
</head>
<body>
<div class="container">
<h1 class="mt-5">Bienvenue sur notre site</h1>
<p>Ceci est une page d'accueil simple.</p>
<!-- Bouton de déconnexion -->
<button id="btnLogout" class="btn btn-danger mt-3">Déconnexion</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" integrity="sha384-QFhL/tFfQaTZYZF/Q2vRTJPnC/tfG4S7ZcK/GK8fSYyZOd4yi7ujF0pDc5cW4kE1" crossorigin="anonymous"></script>
<script>
// Ajoutez votre code JavaScript personnalisé ici
document.getElementById("btnLogout").addEventListener("click", function() {
// Redirection vers la route de déconnexion
fetch('/logout', {
method: 'POST',
credentials: 'same-origin'
})
.then(response => {
if (response.ok) {
// Si la déconnexion réussit, redirigez l'utilisateur vers la page de connexion
window.location.href = '/login'; // Remplacez '/login' par l'URL de votre page de connexion
} else {
console.error('Erreur lors de la déconnexion');
}
})
.catch(error => {
console.error('Erreur lors de la déconnexion :', error);
});
});
</script>
</body>
</html>

0 comments on commit 7a5efb9

Please sign in to comment.