From 078e85f812108234ed771124e95c63bc67a3cdf1 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Fri, 26 Sep 2025 09:57:12 +0200 Subject: [PATCH] AareGUI: Auth based on local user --- gui/src/aaregui/auth.py | 36 ++++++++++++++++++++++++++++++++++++ gui/src/aaregui/gui.py | 24 ++++++++++++------------ 2 files changed, 48 insertions(+), 12 deletions(-) create mode 100644 gui/src/aaregui/auth.py diff --git a/gui/src/aaregui/auth.py b/gui/src/aaregui/auth.py new file mode 100644 index 00000000..e399a478 --- /dev/null +++ b/gui/src/aaregui/auth.py @@ -0,0 +1,36 @@ +import os +import jwt +import requests + +from aaredaqlib.models import TokenData + +def auth(base_url: str | None) -> str: + curr_user = os.getlogin() + if base_url is None: + token_data = TokenData(sub=curr_user, + staff=True, + session=15, + pgroups=["p16371", "p22233"]) + return jwt.encode(token_data.model_dump(), "ABC123") + + try: + response = requests.post( + f"{base_url}/token", + data={ + "username": curr_user, + "password": "" + }, + headers={ + "Content-Type": "application/x-www-form-urlencoded" + } + ) + + if response.status_code == 200: + response_json = response.json() + if "access_token" in response_json: + return response_json["access_token"] + + except requests.RequestException as e: + print(f"Authentication request failed: {e}") + + return "" diff --git a/gui/src/aaregui/gui.py b/gui/src/aaregui/gui.py index af58f261..74c790ee 100644 --- a/gui/src/aaregui/gui.py +++ b/gui/src/aaregui/gui.py @@ -3,6 +3,7 @@ import sys from PySide6.QtCore import QCommandLineParser, QCommandLineOption from PySide6.QtWidgets import QApplication, QDialog +from aaregui.auth import auth from aaregui.main_window import MainWindow from aaregui.widgets.login import LoginDialog from aaredaqlib.beamline import MXBeamline, mx_beamline @@ -66,16 +67,15 @@ if __name__ == "__main__": default_image = parser.value(defaultImage) else: default_image = None - - dialog = LoginDialog(base_url=base_url) - - if dialog.exec() == QDialog.DialogCode.Accepted and dialog.token: - win = MainWindow(base_url=base_url, - token=dialog.token, - default_image=default_image, - zmq_addr=zmq_addr) - win.show() - sys.exit(app.exec()) - else: - print("Cannot connect to AareDAQ server. Exiting.") + try: + token = auth(base_url) + except Exception as e: + print(f"Cannot connect to AareDAQ server. Exiting. {e}") sys.exit() + + win = MainWindow(base_url=base_url, + token=token, + default_image=default_image, + zmq_addr=zmq_addr) + win.show() + sys.exit(app.exec())