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 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 login import login_by_token
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():