Jon Solow
commited on
Commit
•
0b5b559
1
Parent(s):
86b69b9
Implement db reset button in admin page and login via db
Browse files- src/data_storage.py +8 -0
- src/login.py +0 -17
- src/pages/99_Admin.py +18 -1
- src/shared_page.py +1 -2
src/data_storage.py
CHANGED
@@ -105,3 +105,11 @@ def create_new_token_for_user(user_id: int, existing_user: bool = False):
|
|
105 |
"""
|
106 |
)
|
107 |
return token
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
"""
|
106 |
)
|
107 |
return token
|
108 |
+
|
109 |
+
|
110 |
+
def drop_tables():
|
111 |
+
with get_db_connection() as con:
|
112 |
+
cur = con.cursor()
|
113 |
+
cur.execute("DROP TABLE user_rosters")
|
114 |
+
cur.execute("DROP TABLE users")
|
115 |
+
cur.execute("DROP TABLE tokens")
|
src/login.py
CHANGED
@@ -1,4 +1,3 @@
|
|
1 |
-
import hmac
|
2 |
import json
|
3 |
import pandas as pd
|
4 |
import re
|
@@ -140,22 +139,6 @@ def check_password():
|
|
140 |
return False
|
141 |
|
142 |
|
143 |
-
def login_by_token(token: str):
|
144 |
-
# returns true if logged in successfully
|
145 |
-
df = conn.read(
|
146 |
-
worksheet="user-tokens",
|
147 |
-
usecols=[0, 1],
|
148 |
-
ttl=3600,
|
149 |
-
)
|
150 |
-
df = df[df.token.notna()]
|
151 |
-
for row in df.itertuples():
|
152 |
-
if hmac.compare_digest(row.token, token):
|
153 |
-
user_id = int(row.id)
|
154 |
-
st.session_state["logged_in_user"] = user_id
|
155 |
-
return True
|
156 |
-
return False
|
157 |
-
|
158 |
-
|
159 |
def get_logged_in_user_name_email() -> tuple[str | None, str | None]:
|
160 |
if not (user_id := st.session_state.get("logged_in_user")):
|
161 |
# if not logged
|
|
|
|
|
1 |
import json
|
2 |
import pandas as pd
|
3 |
import re
|
|
|
139 |
return False
|
140 |
|
141 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
def get_logged_in_user_name_email() -> tuple[str | None, str | None]:
|
143 |
if not (user_id := st.session_state.get("logged_in_user")):
|
144 |
# if not logged
|
src/pages/99_Admin.py
CHANGED
@@ -4,7 +4,7 @@ import streamlit as st
|
|
4 |
from config import DEFAULT_ICON
|
5 |
from shared_page import common_page_config
|
6 |
|
7 |
-
from data_storage import add_new_user, is_admin, DB_PATH
|
8 |
|
9 |
|
10 |
def admin_add_new_user():
|
@@ -28,6 +28,22 @@ def database_backup_form():
|
|
28 |
st.download_button("Download db", f, file_name=file_name)
|
29 |
|
30 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
def get_page():
|
32 |
page_title = "Admin"
|
33 |
st.set_page_config(page_title=page_title, page_icon=DEFAULT_ICON, layout="wide")
|
@@ -40,6 +56,7 @@ def get_page():
|
|
40 |
|
41 |
database_backup_form()
|
42 |
admin_add_new_user_form()
|
|
|
43 |
|
44 |
|
45 |
if __name__ == "__main__":
|
|
|
4 |
from config import DEFAULT_ICON
|
5 |
from shared_page import common_page_config
|
6 |
|
7 |
+
from data_storage import add_new_user, is_admin, DB_PATH, drop_tables
|
8 |
|
9 |
|
10 |
def admin_add_new_user():
|
|
|
28 |
st.download_button("Download db", f, file_name=file_name)
|
29 |
|
30 |
|
31 |
+
def drop_db_if_confirmed():
|
32 |
+
confirmed = st.session_state.get("delete_confirmation") == "delete"
|
33 |
+
if confirmed:
|
34 |
+
drop_tables()
|
35 |
+
st.warning("Database tables have been dropped")
|
36 |
+
else:
|
37 |
+
st.warning("Must confirm deletion by typing 'delete'")
|
38 |
+
|
39 |
+
|
40 |
+
def drop_db_form():
|
41 |
+
with st.form("Reset DB"):
|
42 |
+
st.header("Reset DB")
|
43 |
+
st.text_input("Enter 'delete' to confirm deletion", key="delete_confirmation")
|
44 |
+
st.form_submit_button("Submit", on_click=drop_db_if_confirmed)
|
45 |
+
|
46 |
+
|
47 |
def get_page():
|
48 |
page_title = "Admin"
|
49 |
st.set_page_config(page_title=page_title, page_icon=DEFAULT_ICON, layout="wide")
|
|
|
56 |
|
57 |
database_backup_form()
|
58 |
admin_add_new_user_form()
|
59 |
+
drop_db_form()
|
60 |
|
61 |
|
62 |
if __name__ == "__main__":
|
src/shared_page.py
CHANGED
@@ -2,8 +2,7 @@ import os
|
|
2 |
import streamlit as st
|
3 |
|
4 |
from queries.nflverse.github_data import load_assets_if_no_tables
|
5 |
-
from
|
6 |
-
from data_storage import initialize_data_storage
|
7 |
|
8 |
|
9 |
def get_local_style():
|
|
|
2 |
import streamlit as st
|
3 |
|
4 |
from queries.nflverse.github_data import load_assets_if_no_tables
|
5 |
+
from data_storage import initialize_data_storage, login_by_token
|
|
|
6 |
|
7 |
|
8 |
def get_local_style():
|