Jon Solow commited on
Commit
56d0518
·
1 Parent(s): a27d436

Connect existing user email form and display user name when logged in

Browse files
Files changed (1) hide show
  1. src/login.py +58 -11
src/login.py CHANGED
@@ -53,10 +53,42 @@ def check_email(email: str) -> bool:
53
 
54
  def new_user_form():
55
  """Form to collect new user information and submit"""
56
- with st.form("New User Registration"):
57
- st.text_input("Email Address", key="new_user_email")
58
- st.text_input("Name", key="new_user_name")
59
- st.form_submit_button("Submit", on_click=new_user_submitted)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
 
61
 
62
  def create_new_user_request(email: str, name: str):
@@ -88,19 +120,18 @@ def new_user_submitted():
88
  )
89
  return
90
  create_new_user_request(email, name)
 
 
91
 
92
 
93
  def check_password():
94
  # if not logged in offer new user registration
95
- if logged_in_user := st.session_state.get("logged_in_user"):
96
- st.write(f"Logged in as: {logged_in_user}")
 
97
  return True
98
  else:
99
  new_user_form()
100
-
101
- # Return True if the token is validated.
102
- if st.session_state.get("password_correct", False):
103
- return True
104
  return False
105
 
106
 
@@ -134,7 +165,6 @@ def login_by_token(token: str):
134
  for row in df.itertuples():
135
  if hmac.compare_digest(row.token, token):
136
  user_id = int(row.id)
137
- st.session_state["password_correct"] = True
138
  st.session_state["logged_in_user"] = user_id
139
  return True
140
  return False
@@ -147,3 +177,20 @@ def email_exists(email: str):
147
  ttl=1,
148
  )
149
  return bool(email in df.email.tolist())
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
 
54
  def new_user_form():
55
  """Form to collect new user information and submit"""
56
+ if st.button("Existing User get Login link"):
57
+ existing_user_new_token()
58
+ else:
59
+ """Form to collect new user information and submit"""
60
+ with st.form("New User Registration"):
61
+ st.header("New User Registration")
62
+ st.write("After submitting, a url to login will be emailed to you.")
63
+ st.text_input("Email Address", key="new_user_email")
64
+ st.text_input("Name", key="new_user_name")
65
+ st.form_submit_button("Submit", on_click=new_user_submitted)
66
+
67
+
68
+ def existing_user_new_token():
69
+ with st.form("Existing User New URL"):
70
+ st.header("Existing User Login Link Request")
71
+ st.write("After submitting, a url to login will be emailed to you if a user with the email exists.")
72
+ st.text_input("Email Address", key="reset_token_user_email")
73
+ st.form_submit_button("Submit", on_click=generate_new_token_request)
74
+
75
+
76
+ def generate_new_token_request():
77
+ if not check_email(email := st.session_state["reset_token_user_email"]):
78
+ st.warning("Sorry email is invalid. Please try a valid email address.")
79
+ return
80
+
81
+ conn.update(
82
+ worksheet="token-requests",
83
+ data=pd.DataFrame(
84
+ {
85
+ "email": email,
86
+ },
87
+ index=[0],
88
+ ),
89
+ )
90
+ st.info("Request submitted. Please check your email for a login url with a few minutes.")
91
+ del st.session_state["reset_token_user_email"]
92
 
93
 
94
  def create_new_user_request(email: str, name: str):
 
120
  )
121
  return
122
  create_new_user_request(email, name)
123
+ del st.session_state["new_user_email"]
124
+ del st.session_state["new_user_name"]
125
 
126
 
127
  def check_password():
128
  # if not logged in offer new user registration
129
+ if st.session_state.get("logged_in_user"):
130
+ _, name = get_logged_in_user_name_email()
131
+ st.write(f"Logged in as: {name}")
132
  return True
133
  else:
134
  new_user_form()
 
 
 
 
135
  return False
136
 
137
 
 
165
  for row in df.itertuples():
166
  if hmac.compare_digest(row.token, token):
167
  user_id = int(row.id)
 
168
  st.session_state["logged_in_user"] = user_id
169
  return True
170
  return False
 
177
  ttl=1,
178
  )
179
  return bool(email in df.email.tolist())
180
+
181
+
182
+ def get_logged_in_user_name_email() -> tuple[str | None, str | None]:
183
+ if not (user_id := st.session_state.get("logged_in_user")):
184
+ # if not logged
185
+ return (None, None)
186
+
187
+ df = conn.read(
188
+ worksheet="users",
189
+ usecols=[0, 1, 2],
190
+ ttl=1,
191
+ )
192
+
193
+ user_info_series = df[df["id"] == user_id].squeeze()
194
+ email = user_info_series["email"]
195
+ name = user_info_series["name"]
196
+ return email, name