diff --git a/prepare_userdb.py b/prepare_userdb.py index af72c2e3a8da4a4a900c29d7105c356a5fa65d34..c338a9affb25284b0fb3296513ebf8ac1f3df890 100644 --- a/prepare_userdb.py +++ b/prepare_userdb.py @@ -77,13 +77,16 @@ conn.commit() conn.execute('''CREATE TABLE users (id INT PRIMARY KEY NOT NULL, name TEXT NOT NULL, + password BLOB NOT NULL, language INT NOT NULL, FOREIGN KEY(language) REFERENCES convoc_language(id));''') -conn.execute("INSERT INTO users (id,name,language) \ - VALUES (1, 'User English', 0)") -conn.execute("INSERT INTO users (id,name,language) \ - VALUES (2, 'Benutzer Deutsch', 1)") +blob = b'...' +conn.execute("INSERT INTO users (id,name,password,language) \ + VALUES (1, 'User English', ?, 0)", (blob,)) +blob = b'...' +conn.execute("INSERT INTO users (id,name,password,language) \ + VALUES (2, 'Benutzer Deutsch', ?, 1)", (blob,)) conn.commit() diff --git a/requirements.txt b/requirements.txt index d7e4723547a80ee08751acc85e29f3fe8d436bea..97fe3afaed96178cb2ed4c778c84ea2d1164d6b3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ cartopy +cryptography dash dash-bootstrap-components joblib diff --git a/src/pages/dashboard.py b/src/pages/dashboard.py index b6c578bbe9c49fc35b435a6c49389c7d6d2c91e6..77e7d53d67252119e40c595fab13b1e1a06ce473 100644 --- a/src/pages/dashboard.py +++ b/src/pages/dashboard.py @@ -13,6 +13,8 @@ import numpy as np from eurad_plot import get_euradim_plot, get_timeseries_plot import os import zipfile +from cryptography.fernet import Fernet +from deployment_settings import key # the following should be done with static files! APP_HOME = Path.cwd() @@ -179,6 +181,10 @@ def create_login_button(title="login"): dbc.Row([ dbc.Col(dbc.Label("Name:"), width=3), dbc.Col(dbc.Input(id='login_name', type="text")) + ]), + dbc.Row([ + dbc.Col(dbc.Label("Password:"), width=3), + dbc.Col(dbc.Input(id='login_password', type="password")) ]) ]), html.Div(id="alert_nouser", children=[]), @@ -786,23 +792,29 @@ layout = html.Div([ Input("login_button", "n_clicks"), Input("login_close", "n_clicks"), State("login_name", "value"), + State("login_password", "value"), prevent_initial_call=True ) -def login_open(lb_click, lc_click, name): +def login_open(lb_click, lc_click, name, password): if ctx.triggered_id == "login_close": conn = sqlite3.connect(DATA_PATH.joinpath('destine_de370c_users.db')) cur = conn.cursor() - cur.execute(f"SELECT * FROM users WHERE name ='{name}'") + cur.execute(f"SELECT id, password, language FROM users WHERE name ='{name}'") user = cur.fetchone() conn.close() if not user: return no_update, no_update, no_update, no_update, dbc.Alert(["No such user!"], color="danger") else: - language_id=user[2] - return create_login_button(f"{user_label[language_id]} {user[1]}"), \ - '{"user_id": ' + f'{user[0]}, "language_id": {user[2]}' +'}', \ - create_tabs_layout(user_id=user[0], language_id=language_id),\ - False, no_update + fernet = Fernet(key) + db_password = fernet.decrypt(user[1]).decode() + if db_password == password: + language_id=user[2] + return create_login_button(f"{user_label[language_id]} {name}"), \ + '{"user_id": ' + f'{user[0]}, "language_id": {user[2]}' +'}', \ + create_tabs_layout(user_id=user[0], language_id=language_id),\ + False, no_update + else: + return no_update, no_update, no_update, no_update, dbc.Alert(["Wrong password given!"], color="danger") else: return create_login_button(), '{"user_id": 1, "language_id": 0}', \ create_tabs_layout() , True, no_update