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