From 7717ac3b7a0b62bca46463381c56ce0076812e47 Mon Sep 17 00:00:00 2001 From: Stef Date: Fri, 25 Apr 2025 20:16:15 +0200 Subject: [PATCH] Moved frontend stuff to main area --- AT_frontend/.gitignore | 2 -- AT_frontend/app.py | 18 ----------- app.py | 3 +- application/__init__.py | 23 ++++++++++++++ application/auth/views.py | 29 +++++++++++++++++- .../dashboard}/templates/dashboard.html | 0 .../dashboard}/templates/login.html | 0 .../static/images/car.png | Bin .../static/images/logo-light.png | Bin 9 files changed, 53 insertions(+), 22 deletions(-) delete mode 100644 AT_frontend/.gitignore delete mode 100644 AT_frontend/app.py rename {AT_frontend => application/dashboard}/templates/dashboard.html (100%) rename {AT_frontend => application/dashboard}/templates/login.html (100%) rename {AT_frontend => application}/static/images/car.png (100%) rename {AT_frontend => application}/static/images/logo-light.png (100%) diff --git a/AT_frontend/.gitignore b/AT_frontend/.gitignore deleted file mode 100644 index 585c88d..0000000 --- a/AT_frontend/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -venvs/ -.__pychache__/ \ No newline at end of file diff --git a/AT_frontend/app.py b/AT_frontend/app.py deleted file mode 100644 index 90560ce..0000000 --- a/AT_frontend/app.py +++ /dev/null @@ -1,18 +0,0 @@ -from flask import Flask, render_template, session, redirect, url_for, session -from flask_wtf import FlaskForm -from wtforms import ( - StringField, - BooleanField, - RadioField, - SelectField, - TextAreaField, - SubmitField, -) -from wtforms.validators import DataRequired - -app = Flask(__name__) - -app.config["SECRET_KEY"] = "mijngeheimesleutel" - -if __name__ == "__main__": - app.run(debug=True) diff --git a/app.py b/app.py index 1847dba..56ccf0f 100644 --- a/app.py +++ b/app.py @@ -2,6 +2,7 @@ from application import app from application.api.views import api_blueprint from application.auth.views import auth_blueprint from application.dashboard.views import dash_blueprint +from flask import redirect, url_for app.register_blueprint(api_blueprint, url_prefix="/api") app.register_blueprint(auth_blueprint, url_prefix="/auth") @@ -11,7 +12,7 @@ app.register_blueprint(dash_blueprint, url_prefix="/dash") # Default app route @app.route("/") def home(): - return "Hello, World!" + return redirect(url_for("auth.demo")) if __name__ == "__main__": diff --git a/application/__init__.py b/application/__init__.py index eb55496..7e17a12 100644 --- a/application/__init__.py +++ b/application/__init__.py @@ -2,6 +2,7 @@ from flask import Flask from flask_migrate import Migrate from flask_sqlalchemy import SQLAlchemy from pyplatex import ANPR # type: ignore +from authlib.integrations.flask_client import OAuth # Web Server app = Flask(__name__) @@ -17,3 +18,25 @@ migrate = Migrate(app, db) # ANPR instance anpr = ANPR() + +# Keycloak +oauth = OAuth(app=app) +url = "http://192.168.69.1:8180" +keycloak: ... = oauth.register( + name="keycloak", + client_id="ProjectIOT", + client_secret="IWKfsx2aLHCMr0iUaZOuws6UwiYrVQ60", + authorize_url=(f"{url}/realms/ProjectIOT/protocol/openid-connect/auth"), + authorize_params=None, + access_token_url=( + f"{url}/realms/ProjectIOT/protocol/openid-connect/token" + ), + refresh_token_url=( + f"{url}/realms/ProjectIOT/protocol/openid-connect/token" + ), + api_base_url=(f"{url}/realms/ProjectIOT/protocol/openid-connect"), + client_kwargs={"scope": "openid profile email"}, + server_metadata_url=( + "{url}/realms/ProjectIOT/.well-known/openid-configuration" + ), +) diff --git a/application/auth/views.py b/application/auth/views.py index 9b4d77c..0abcb97 100644 --- a/application/auth/views.py +++ b/application/auth/views.py @@ -1,3 +1,30 @@ -from flask import Blueprint +from flask import Blueprint, session, redirect, url_for, render_template +from application import keycloak auth_blueprint = Blueprint("auth", __name__, template_folder="templates") + + +@auth_blueprint.route("/demo") +def demo(): + return render_template("login.html") + + +@auth_blueprint.route("/") +def home(): + user = session.get("user") + if user: + return f'Hello, {user["name"]}' + return redirect(url_for("auth.login")) + + +@auth_blueprint.route("/login") +def login(): + redirect_uri = url_for("auth.auth", _external=True) + return keycloak.authorize_redirect(redirect_uri) + + +@auth_blueprint.route("/auth") +def auth(): + user = keycloak.userinfo() + session["user"] = user + return redirect(url_for("auth.home")) diff --git a/AT_frontend/templates/dashboard.html b/application/dashboard/templates/dashboard.html similarity index 100% rename from AT_frontend/templates/dashboard.html rename to application/dashboard/templates/dashboard.html diff --git a/AT_frontend/templates/login.html b/application/dashboard/templates/login.html similarity index 100% rename from AT_frontend/templates/login.html rename to application/dashboard/templates/login.html diff --git a/AT_frontend/static/images/car.png b/application/static/images/car.png similarity index 100% rename from AT_frontend/static/images/car.png rename to application/static/images/car.png diff --git a/AT_frontend/static/images/logo-light.png b/application/static/images/logo-light.png similarity index 100% rename from AT_frontend/static/images/logo-light.png rename to application/static/images/logo-light.png