Spaces:
Running
Running
a-v-bely
commited on
Commit
·
6cf0970
1
Parent(s):
9c14039
Update app
Browse files
pages/2_👨🏫_Начало_работы.py
CHANGED
@@ -232,7 +232,7 @@ if st.session_state.get('-LOGGED_IN_BOOL-'):
|
|
232 |
save_type='download',
|
233 |
save_name=USER__SAVE_IN_CLOUD_FILE_NAME,
|
234 |
cefr_level=CEFR_TEXT_LEVEL,
|
235 |
-
|
236 |
creator_name=st.session_state.get('-USER_NAME-'),
|
237 |
generated_result=__TASK_DATA__,
|
238 |
distractor_model=DISTRACTOR_MODEL)
|
|
|
232 |
save_type='download',
|
233 |
save_name=USER__SAVE_IN_CLOUD_FILE_NAME,
|
234 |
cefr_level=CEFR_TEXT_LEVEL,
|
235 |
+
timestamp=str(datetime.datetime.now())[:-7],
|
236 |
creator_name=st.session_state.get('-USER_NAME-'),
|
237 |
generated_result=__TASK_DATA__,
|
238 |
distractor_model=DISTRACTOR_MODEL)
|
pages/4_📝_Онлайн-тест (эксперимент).py
CHANGED
@@ -54,7 +54,7 @@ if st.session_state.get('-ONLINE_TEST_READY-') and st.session_state.get('-LOGGED
|
|
54 |
save_type='online_test',
|
55 |
save_name=st.session_state['-UPLOAD_CLOUD_FILE_NAME-'],
|
56 |
cefr_level=st.session_state['-LOADED_CEFR_LEVEL-'],
|
57 |
-
|
58 |
creator_name=st.session_state.get('-USER_NAME-'),
|
59 |
test_taker_name=st.session_state.get('-USER_NAME-'),
|
60 |
test_taker_answers=RETURN_TEST_DATA,
|
|
|
54 |
save_type='online_test',
|
55 |
save_name=st.session_state['-UPLOAD_CLOUD_FILE_NAME-'],
|
56 |
cefr_level=st.session_state['-LOADED_CEFR_LEVEL-'],
|
57 |
+
timestamp=str(datetime.datetime.now())[:-7],
|
58 |
creator_name=st.session_state.get('-USER_NAME-'),
|
59 |
test_taker_name=st.session_state.get('-USER_NAME-'),
|
60 |
test_taker_answers=RETURN_TEST_DATA,
|
utilities_database/user_database_utils.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
import re
|
|
|
2 |
import secrets
|
3 |
-
import requests
|
4 |
import pandas as pd
|
5 |
import streamlit as st
|
6 |
from trycourier import Courier
|
@@ -14,27 +14,20 @@ def check_usr_pass(user_log_in_database, user_name: str, password: str) -> bool:
|
|
14 |
"""
|
15 |
Authenticates the user_name and password.
|
16 |
"""
|
17 |
-
registered_user = user_log_in_database.
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
return False
|
23 |
-
except VerifyMismatchError:
|
24 |
-
pass
|
25 |
-
except IndexError:
|
26 |
-
pass
|
27 |
-
return False
|
28 |
-
|
29 |
-
|
30 |
-
def load_lottie_url(url: str) -> str or None:
|
31 |
-
"""
|
32 |
-
Fetches the lottie animation using the URL.
|
33 |
-
"""
|
34 |
-
r = requests.get(url)
|
35 |
-
if r.status_code != 200:
|
36 |
-
return None
|
37 |
-
return r.json()
|
38 |
|
39 |
|
40 |
def check_valid_name(name_sign_up: str) -> bool:
|
@@ -51,20 +44,21 @@ def check_valid_name(name_sign_up: str) -> bool:
|
|
51 |
|
52 |
def check_valid_email(email_sign_up: str) -> bool:
|
53 |
"""
|
54 |
-
Checks if the user entered a valid
|
55 |
"""
|
56 |
regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
return
|
|
|
61 |
|
62 |
|
63 |
def check_unique_email(user_log_in_database, email_sign_up: str) -> bool:
|
64 |
"""
|
65 |
-
Checks if the
|
66 |
"""
|
67 |
-
authorized_users_data = user_log_in_database.
|
68 |
if len(authorized_users_data) == 0:
|
69 |
return True
|
70 |
return False
|
@@ -90,11 +84,9 @@ def check_unique_usr(user_log_in_database, user_name_sign_up: str):
|
|
90 |
Checks if the user_name already exists (since user_name needs to be unique),
|
91 |
also checks for non-empty user_name.
|
92 |
"""
|
93 |
-
authorized_users_data = user_log_in_database.
|
94 |
if len(authorized_users_data) != 0:
|
95 |
return False
|
96 |
-
if user_name_sign_up in authorized_users_data:
|
97 |
-
return False
|
98 |
non_empty_check = non_empty_str_check(user_name_sign_up)
|
99 |
if not non_empty_check:
|
100 |
return None
|
@@ -102,24 +94,25 @@ def check_unique_usr(user_log_in_database, user_name_sign_up: str):
|
|
102 |
|
103 |
|
104 |
def register_new_usr(user_log_in_database, name_sign_up: str, email_sign_up: str, user_name_sign_up: str,
|
105 |
-
password_sign_up: str, professional_level: str) -> None:
|
106 |
"""
|
107 |
Saves the information of the new user in the _secret_auth.json file.
|
108 |
"""
|
109 |
new_usr_data = {'user_name': user_name_sign_up,
|
110 |
'name': name_sign_up,
|
111 |
-
'
|
112 |
'password': ph.hash(password_sign_up),
|
113 |
-
'professional_level': professional_level
|
|
|
114 |
|
115 |
-
return user_log_in_database.
|
116 |
|
117 |
|
118 |
def check_user_name_exists(user_log_in_database, user_name: str) -> bool:
|
119 |
"""
|
120 |
Checks if the user_name exists in the _secret_auth.json file.
|
121 |
"""
|
122 |
-
authorized_users_data = user_log_in_database.
|
123 |
if len(authorized_users_data) == 1:
|
124 |
return True
|
125 |
return False
|
@@ -127,9 +120,9 @@ def check_user_name_exists(user_log_in_database, user_name: str) -> bool:
|
|
127 |
|
128 |
def check_email_exists(user_log_in_database, email_forgot_passwd: str):
|
129 |
"""
|
130 |
-
Checks if the
|
131 |
"""
|
132 |
-
authorized_users_data = user_log_in_database.
|
133 |
if len(authorized_users_data) == 1:
|
134 |
return True, authorized_users_data[0]['user_name']
|
135 |
return False, None
|
@@ -137,7 +130,7 @@ def check_email_exists(user_log_in_database, email_forgot_passwd: str):
|
|
137 |
|
138 |
def generate_random_passwd() -> str:
|
139 |
"""
|
140 |
-
Generates a random password to be sent in
|
141 |
"""
|
142 |
password_length = 10
|
143 |
return secrets.token_urlsafe(password_length)
|
@@ -146,7 +139,7 @@ def generate_random_passwd() -> str:
|
|
146 |
def send_passwd_in_email(auth_token: str, user_name_forgot_passwd: str, email_forgot_passwd: str, company_name: str,
|
147 |
random_password: str) -> None:
|
148 |
"""
|
149 |
-
Triggers an
|
150 |
"""
|
151 |
client = Courier(auth_token=auth_token)
|
152 |
|
@@ -171,9 +164,8 @@ def change_passwd(user_log_in_database, email_forgot_passwd: str, random_passwor
|
|
171 |
"""
|
172 |
Replaces the old password with the newly generated password.
|
173 |
"""
|
174 |
-
user_key = user_log_in_database.fetch({'e-mail': email_forgot_passwd}).items[0]['key']
|
175 |
updates = {'password': ph.hash(random_password)}
|
176 |
-
return user_log_in_database.update(updates,
|
177 |
|
178 |
|
179 |
def check_current_passwd(user_log_in_database, email_reset_passwd: str, current_passwd: str = None) -> bool:
|
@@ -181,7 +173,7 @@ def check_current_passwd(user_log_in_database, email_reset_passwd: str, current_
|
|
181 |
Authenticates the password entered against the user_name when
|
182 |
resetting the password.
|
183 |
"""
|
184 |
-
authorized_user_data = user_log_in_database.
|
185 |
if current_passwd is None:
|
186 |
current_passwd = 'b'
|
187 |
try:
|
@@ -192,18 +184,23 @@ def check_current_passwd(user_log_in_database, email_reset_passwd: str, current_
|
|
192 |
return False
|
193 |
|
194 |
|
195 |
-
def save_data_in_database(user_task_database, save_type, save_name, cefr_level,
|
196 |
generated_result=None, test_taker_name=None, test_taker_answers=None, test_taker_result=None,
|
197 |
-
comments=None, distractor_model=None):
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
206 |
-
|
|
|
|
|
|
|
|
|
|
|
207 |
if save_name == '' and save_type == 'download':
|
208 |
save_name = generated_result['name']
|
209 |
if len(already_saved_names) != 0 and save_type == 'download':
|
@@ -219,7 +216,7 @@ def save_data_in_database(user_task_database, save_type, save_name, cefr_level,
|
|
219 |
'save_type': save_type,
|
220 |
'save_name': save_name,
|
221 |
'cefr_level': cefr_level,
|
222 |
-
'
|
223 |
'creator_name': creator_name,
|
224 |
'generated_result': generated_result,
|
225 |
'distractor_model': distractor_model
|
@@ -229,55 +226,45 @@ def save_data_in_database(user_task_database, save_type, save_name, cefr_level,
|
|
229 |
'save_type': save_type,
|
230 |
'save_name': save_name,
|
231 |
'cefr_level': cefr_level,
|
232 |
-
'
|
233 |
'creator_name': creator_name,
|
234 |
'test_taker_name': test_taker_name,
|
235 |
'test_taker_answers': test_taker_answers,
|
236 |
'generated_result': generated_result,
|
237 |
'test_taker_result': test_taker_result,
|
238 |
'comments': comments}
|
239 |
-
user_task_database.
|
240 |
if save_type == 'download':
|
241 |
-
|
|
|
242 |
elif save_type == 'online_test':
|
243 |
return st.success('Ответы успешно сохранены!')
|
244 |
|
245 |
|
246 |
def load_user_tasks_data(user_task_database, save_type, creator_name=None, test_taker_name=None):
|
247 |
if save_type == 'download':
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
user_data = user_task_database.fetch({'creator_name': creator_name, 'save_type': save_type}, last=_last)
|
254 |
-
_last = user_data.last
|
255 |
-
names = [item['save_name'] for item in ITEMS]
|
256 |
-
cefr_level = [item['cefr_level'] for item in ITEMS]
|
257 |
-
time_stamps = [item['time_stamp'] for item in ITEMS]
|
258 |
-
return_data = pd.DataFrame([names, cefr_level, time_stamps]).transpose()
|
259 |
return_data.columns = ['Название', 'Уровень', 'Время создания']
|
260 |
else:
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
names = [item['save_name'] for item in ITEMS]
|
269 |
-
cefr_level = [item['cefr_level'] for item in ITEMS]
|
270 |
-
time_stamps = [item['time_stamp'] for item in ITEMS]
|
271 |
-
creator_name = [item['creator_name'] for item in ITEMS]
|
272 |
-
test_taker_result = [item['test_taker_result'] for item in ITEMS]
|
273 |
-
return_data = pd.DataFrame([names, cefr_level, test_taker_result, time_stamps, creator_name]).transpose()
|
274 |
return_data.columns = ['Название', 'Уровень', 'Оценка', 'Дата прохождения', 'Автор заданий']
|
275 |
return return_data
|
276 |
|
277 |
|
278 |
def load_users_particular_task(user_task_database, load_mode, creator_name, save_name, cefr_level,):
|
279 |
-
return_data = user_task_database.
|
280 |
-
|
281 |
-
|
282 |
-
|
|
|
283 |
return return_data
|
|
|
1 |
import re
|
2 |
+
import json
|
3 |
import secrets
|
|
|
4 |
import pandas as pd
|
5 |
import streamlit as st
|
6 |
from trycourier import Courier
|
|
|
14 |
"""
|
15 |
Authenticates the user_name and password.
|
16 |
"""
|
17 |
+
registered_user = user_log_in_database.select('*').eq('user_name', user_name).execute()
|
18 |
+
if not registered_user.data:
|
19 |
+
return False
|
20 |
+
else:
|
21 |
+
try:
|
22 |
+
passwd_verification_bool = ph.verify(registered_user.data[0]['password'], password)
|
23 |
+
if passwd_verification_bool:
|
24 |
+
return True
|
25 |
+
return False
|
26 |
+
except VerifyMismatchError:
|
27 |
+
pass
|
28 |
+
except IndexError:
|
29 |
+
pass
|
30 |
return False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
32 |
|
33 |
def check_valid_name(name_sign_up: str) -> bool:
|
|
|
44 |
|
45 |
def check_valid_email(email_sign_up: str) -> bool:
|
46 |
"""
|
47 |
+
Checks if the user entered a valid email while creating the account.
|
48 |
"""
|
49 |
regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')
|
50 |
+
return True
|
51 |
+
|
52 |
+
# if re.fullmatch(regex, email_sign_up):
|
53 |
+
# return True
|
54 |
+
# return False
|
55 |
|
56 |
|
57 |
def check_unique_email(user_log_in_database, email_sign_up: str) -> bool:
|
58 |
"""
|
59 |
+
Checks if the email already exists (since email needs to be unique).
|
60 |
"""
|
61 |
+
authorized_users_data = user_log_in_database.select('*').eq('email', email_sign_up).execute().data
|
62 |
if len(authorized_users_data) == 0:
|
63 |
return True
|
64 |
return False
|
|
|
84 |
Checks if the user_name already exists (since user_name needs to be unique),
|
85 |
also checks for non-empty user_name.
|
86 |
"""
|
87 |
+
authorized_users_data = user_log_in_database.select('*').eq('user_name', user_name_sign_up).execute().data
|
88 |
if len(authorized_users_data) != 0:
|
89 |
return False
|
|
|
|
|
90 |
non_empty_check = non_empty_str_check(user_name_sign_up)
|
91 |
if not non_empty_check:
|
92 |
return None
|
|
|
94 |
|
95 |
|
96 |
def register_new_usr(user_log_in_database, name_sign_up: str, email_sign_up: str, user_name_sign_up: str,
|
97 |
+
password_sign_up: str, professional_level: str, timestamp: str) -> None:
|
98 |
"""
|
99 |
Saves the information of the new user in the _secret_auth.json file.
|
100 |
"""
|
101 |
new_usr_data = {'user_name': user_name_sign_up,
|
102 |
'name': name_sign_up,
|
103 |
+
'email': email_sign_up,
|
104 |
'password': ph.hash(password_sign_up),
|
105 |
+
'professional_level': professional_level,
|
106 |
+
'created_at': timestamp}
|
107 |
|
108 |
+
return user_log_in_database.insert(new_usr_data).execute()
|
109 |
|
110 |
|
111 |
def check_user_name_exists(user_log_in_database, user_name: str) -> bool:
|
112 |
"""
|
113 |
Checks if the user_name exists in the _secret_auth.json file.
|
114 |
"""
|
115 |
+
authorized_users_data = user_log_in_database.select('*').eq('user_name', user_name).execute().data
|
116 |
if len(authorized_users_data) == 1:
|
117 |
return True
|
118 |
return False
|
|
|
120 |
|
121 |
def check_email_exists(user_log_in_database, email_forgot_passwd: str):
|
122 |
"""
|
123 |
+
Checks if the email entered is present in the _secret_auth.json file.
|
124 |
"""
|
125 |
+
authorized_users_data = user_log_in_database.select('*').eq('email', email_forgot_passwd).execute().data
|
126 |
if len(authorized_users_data) == 1:
|
127 |
return True, authorized_users_data[0]['user_name']
|
128 |
return False, None
|
|
|
130 |
|
131 |
def generate_random_passwd() -> str:
|
132 |
"""
|
133 |
+
Generates a random password to be sent in email.
|
134 |
"""
|
135 |
password_length = 10
|
136 |
return secrets.token_urlsafe(password_length)
|
|
|
139 |
def send_passwd_in_email(auth_token: str, user_name_forgot_passwd: str, email_forgot_passwd: str, company_name: str,
|
140 |
random_password: str) -> None:
|
141 |
"""
|
142 |
+
Triggers an email to the user containing the randomly generated password.
|
143 |
"""
|
144 |
client = Courier(auth_token=auth_token)
|
145 |
|
|
|
164 |
"""
|
165 |
Replaces the old password with the newly generated password.
|
166 |
"""
|
|
|
167 |
updates = {'password': ph.hash(random_password)}
|
168 |
+
return user_log_in_database.update(updates).eq('email', email_forgot_passwd).execute()
|
169 |
|
170 |
|
171 |
def check_current_passwd(user_log_in_database, email_reset_passwd: str, current_passwd: str = None) -> bool:
|
|
|
173 |
Authenticates the password entered against the user_name when
|
174 |
resetting the password.
|
175 |
"""
|
176 |
+
authorized_user_data = user_log_in_database.select('*').eq('email', email_reset_passwd).execute().data[0]
|
177 |
if current_passwd is None:
|
178 |
current_passwd = 'b'
|
179 |
try:
|
|
|
184 |
return False
|
185 |
|
186 |
|
187 |
+
def save_data_in_database(user_task_database, save_type, save_name, cefr_level, created_at, creator_name=None,
|
188 |
generated_result=None, test_taker_name=None, test_taker_answers=None, test_taker_result=None,
|
189 |
+
comments=None, distractor_model=None, allow=False):
|
190 |
+
already_saved = user_task_database.select('*').execute().data
|
191 |
+
already_saved_names = [task for task in already_saved
|
192 |
+
if (task['creator_name']==creator_name
|
193 |
+
& task['save_name']==save_name
|
194 |
+
& task['cefr_level']==cefr_level)]
|
195 |
+
already_saved_tasks = [task for task in already_saved
|
196 |
+
if (task['creator_name']==creator_name
|
197 |
+
& task['generated_result']==generated_result
|
198 |
+
& task['cefr_level']==cefr_level)]
|
199 |
+
already_saved_tests = [task for task in already_saved
|
200 |
+
if (task['test_taker_name']==test_taker_name
|
201 |
+
& task['save_name']==save_name
|
202 |
+
& task['cefr_level']==cefr_level)]
|
203 |
+
|
204 |
if save_name == '' and save_type == 'download':
|
205 |
save_name = generated_result['name']
|
206 |
if len(already_saved_names) != 0 and save_type == 'download':
|
|
|
216 |
'save_type': save_type,
|
217 |
'save_name': save_name,
|
218 |
'cefr_level': cefr_level,
|
219 |
+
'created_at': created_at,
|
220 |
'creator_name': creator_name,
|
221 |
'generated_result': generated_result,
|
222 |
'distractor_model': distractor_model
|
|
|
226 |
'save_type': save_type,
|
227 |
'save_name': save_name,
|
228 |
'cefr_level': cefr_level,
|
229 |
+
'created_at': created_at,
|
230 |
'creator_name': creator_name,
|
231 |
'test_taker_name': test_taker_name,
|
232 |
'test_taker_answers': test_taker_answers,
|
233 |
'generated_result': generated_result,
|
234 |
'test_taker_result': test_taker_result,
|
235 |
'comments': comments}
|
236 |
+
user_task_database.insert(new_save_data).execute()
|
237 |
if save_type == 'download':
|
238 |
+
if allow:
|
239 |
+
return st.success('Задания успешно сохранены! Можете переходить на следующие вкладки')
|
240 |
elif save_type == 'online_test':
|
241 |
return st.success('Ответы успешно сохранены!')
|
242 |
|
243 |
|
244 |
def load_user_tasks_data(user_task_database, save_type, creator_name=None, test_taker_name=None):
|
245 |
if save_type == 'download':
|
246 |
+
user_data = user_task_database.select('*').eq('creator_name', creator_name).eq('save_type', save_type).execute().data
|
247 |
+
names = [item['save_name'] for item in user_data]
|
248 |
+
cefr_level = [item['cefr_level'] for item in user_data]
|
249 |
+
created_ats = [item['created_at'] for item in user_data]
|
250 |
+
return_data = pd.DataFrame([names, cefr_level, created_ats]).transpose()
|
|
|
|
|
|
|
|
|
|
|
|
|
251 |
return_data.columns = ['Название', 'Уровень', 'Время создания']
|
252 |
else:
|
253 |
+
user_data = user_task_database.select('*').eq('test_taker_name', test_taker_name).eq('save_type', save_type).execute().data
|
254 |
+
names = [item['save_name'] for item in user_data]
|
255 |
+
cefr_level = [item['cefr_level'] for item in user_data]
|
256 |
+
created_ats = [item['created_at'] for item in user_data]
|
257 |
+
creator_name = [item['creator_name'] for item in user_data]
|
258 |
+
test_taker_result = [item['test_taker_result'] for item in user_data]
|
259 |
+
return_data = pd.DataFrame([names, cefr_level, test_taker_result, created_ats, creator_name]).transpose()
|
|
|
|
|
|
|
|
|
|
|
|
|
260 |
return_data.columns = ['Название', 'Уровень', 'Оценка', 'Дата прохождения', 'Автор заданий']
|
261 |
return return_data
|
262 |
|
263 |
|
264 |
def load_users_particular_task(user_task_database, load_mode, creator_name, save_name, cefr_level,):
|
265 |
+
return_data = user_task_database.select('*').eq('creator_name', creator_name)\
|
266 |
+
.eq('save_name', save_name)\
|
267 |
+
.eq('save_type', load_mode)\
|
268 |
+
.eq('cefr_level',cefr_level).execute().data[0]['generated_result']
|
269 |
+
return_data = json.loads(return_data.replace("'", '"'), strict=False)
|
270 |
return return_data
|
utilities_database/user_database_widgets.py
CHANGED
@@ -1,17 +1,17 @@
|
|
1 |
-
from deta import Deta
|
2 |
import streamlit as st
|
|
|
|
|
3 |
from utilities_option_menu.option_menu import option_menu
|
4 |
import utilities_database.user_database_utils as db_utils
|
5 |
from utilities_database.user_database_utils import check_usr_pass
|
6 |
from utilities_cookies.encrypted_cookie_manager import EncryptedCookieManager
|
7 |
|
8 |
-
|
9 |
-
|
10 |
-
DETA_USER_TABLE = st.secrets['DETA_USER_SAVE_TEXT_TABLE']
|
11 |
|
12 |
-
|
13 |
-
|
14 |
-
user_save_text_table =
|
15 |
st.set_page_config(page_title='GenLexTasksEnter', layout="wide", page_icon=':es:')
|
16 |
|
17 |
login_call = 'Зарегистрироваться'
|
@@ -91,7 +91,7 @@ class LogIn:
|
|
91 |
login_submit_button = st.form_submit_button(label='Войти')
|
92 |
|
93 |
if login_submit_button:
|
94 |
-
authenticate_user_check = check_usr_pass(user_log_in_database=
|
95 |
user_name=user_name,
|
96 |
password=password)
|
97 |
|
@@ -119,18 +119,18 @@ class LogIn:
|
|
119 |
email_sign_up = st.text_input("E-mail *",
|
120 |
placeholder='Введите Ваш e-mail')
|
121 |
valid_email_check = db_utils.check_valid_email(email_sign_up)
|
122 |
-
unique_email_check = db_utils.check_unique_email(user_log_in_database=
|
123 |
email_sign_up=email_sign_up)
|
124 |
|
125 |
user_name_sign_up = st.text_input("Имя пользователя *",
|
126 |
-
placeholder='Введите имя пользователя')
|
127 |
-
unique_user_name_check = db_utils.check_unique_usr(user_log_in_database=
|
128 |
user_name_sign_up=user_name_sign_up)
|
129 |
|
130 |
password_sign_up = st.text_input("Пароль *",
|
131 |
placeholder='Введите пароль',
|
132 |
type='password')
|
133 |
-
professional_level = st.radio('Вы являетесь преподавателем
|
134 |
options=['Да', 'Нет'],
|
135 |
index=1,
|
136 |
horizontal=True)
|
@@ -156,12 +156,13 @@ class LogIn:
|
|
156 |
|
157 |
if valid_name_check:
|
158 |
if valid_email_check and unique_email_check and unique_user_name_check:
|
159 |
-
db_utils.register_new_usr(user_log_in_database=
|
160 |
name_sign_up=name_sign_up,
|
161 |
email_sign_up=email_sign_up,
|
162 |
user_name_sign_up=user_name_sign_up,
|
163 |
password_sign_up=password_sign_up,
|
164 |
-
professional_level=professional_level
|
|
|
165 |
st.success("Регистрация прошла успешно!")
|
166 |
|
167 |
def forgot_password(self) -> None:
|
@@ -171,13 +172,13 @@ class LogIn:
|
|
171 |
"""
|
172 |
with st.form("Forgot Password Form"):
|
173 |
email_forgot_passwd = st.text_input("Email", placeholder='Введите Ваш email')
|
|
|
|
|
|
|
174 |
|
175 |
forgot_passwd_submit_button = st.form_submit_button(label='Получить пароль')
|
176 |
|
177 |
if forgot_passwd_submit_button:
|
178 |
-
email_exists_check, user_name_forgot_passwd = db_utils.check_email_exists(
|
179 |
-
user_log_in_database=db,
|
180 |
-
email_forgot_passwd=email_forgot_passwd)
|
181 |
if not email_exists_check:
|
182 |
st.error("Пользователя с таким e-mail не существует!")
|
183 |
|
@@ -185,7 +186,7 @@ class LogIn:
|
|
185 |
random_password = db_utils.generate_random_passwd()
|
186 |
db_utils.send_passwd_in_email(self.auth_token, user_name_forgot_passwd, email_forgot_passwd,
|
187 |
self.company_name, random_password)
|
188 |
-
db_utils.change_passwd(user_log_in_database=
|
189 |
email_forgot_passwd=email_forgot_passwd,
|
190 |
random_password=random_password)
|
191 |
st.success("Временный пароль выслан Вам на почту!")
|
@@ -206,16 +207,16 @@ class LogIn:
|
|
206 |
new_passwd = st.text_input("Новый пароль", placeholder='Введите новый пароль',
|
207 |
type='password')
|
208 |
|
209 |
-
new_passwd_1 = st.text_input("Повторите новый пароль", placeholder='
|
210 |
type='password')
|
211 |
|
212 |
reset_passwd_submit_button = st.form_submit_button(label='Изменить пароль')
|
213 |
|
214 |
if reset_passwd_submit_button:
|
215 |
email_exists_check, user_name_reset_passwd = db_utils.check_email_exists(
|
216 |
-
user_log_in_database=
|
217 |
email_forgot_passwd=email_reset_passwd)
|
218 |
-
current_passwd_check = db_utils.check_current_passwd(user_log_in_database=
|
219 |
email_reset_passwd=email_reset_passwd,
|
220 |
current_passwd=current_passwd)
|
221 |
if not email_exists_check:
|
@@ -228,7 +229,7 @@ class LogIn:
|
|
228 |
st.error("Пароли не совпадают!")
|
229 |
|
230 |
if email_exists_check and current_passwd_check:
|
231 |
-
db_utils.change_passwd(user_log_in_database=
|
232 |
email_forgot_passwd=email_reset_passwd,
|
233 |
random_password=new_passwd)
|
234 |
st.success("Пароль успешно изменен!")
|
|
|
|
|
1 |
import streamlit as st
|
2 |
+
from datetime import datetime
|
3 |
+
from supabase import create_client, Client
|
4 |
from utilities_option_menu.option_menu import option_menu
|
5 |
import utilities_database.user_database_utils as db_utils
|
6 |
from utilities_database.user_database_utils import check_usr_pass
|
7 |
from utilities_cookies.encrypted_cookie_manager import EncryptedCookieManager
|
8 |
|
9 |
+
DB_URL = st.secrets['SUPABASE_URL']
|
10 |
+
DB_KEY = st.secrets['SUPABASE_KEY']
|
|
|
11 |
|
12 |
+
Client = create_client(DB_URL, DB_KEY)
|
13 |
+
user_login_table = Client.table('UserLogIn')
|
14 |
+
user_save_text_table = Client.table('TaskData')
|
15 |
st.set_page_config(page_title='GenLexTasksEnter', layout="wide", page_icon=':es:')
|
16 |
|
17 |
login_call = 'Зарегистрироваться'
|
|
|
91 |
login_submit_button = st.form_submit_button(label='Войти')
|
92 |
|
93 |
if login_submit_button:
|
94 |
+
authenticate_user_check = check_usr_pass(user_log_in_database=user_login_table,
|
95 |
user_name=user_name,
|
96 |
password=password)
|
97 |
|
|
|
119 |
email_sign_up = st.text_input("E-mail *",
|
120 |
placeholder='Введите Ваш e-mail')
|
121 |
valid_email_check = db_utils.check_valid_email(email_sign_up)
|
122 |
+
unique_email_check = db_utils.check_unique_email(user_log_in_database=user_login_table,
|
123 |
email_sign_up=email_sign_up)
|
124 |
|
125 |
user_name_sign_up = st.text_input("Имя пользователя *",
|
126 |
+
placeholder='Введите имя пользователя (латинские буквы и символы)')
|
127 |
+
unique_user_name_check = db_utils.check_unique_usr(user_log_in_database=user_login_table,
|
128 |
user_name_sign_up=user_name_sign_up)
|
129 |
|
130 |
password_sign_up = st.text_input("Пароль *",
|
131 |
placeholder='Введите пароль',
|
132 |
type='password')
|
133 |
+
professional_level = st.radio('Вы являетесь преподавателем испанского языка? *',
|
134 |
options=['Да', 'Нет'],
|
135 |
index=1,
|
136 |
horizontal=True)
|
|
|
156 |
|
157 |
if valid_name_check:
|
158 |
if valid_email_check and unique_email_check and unique_user_name_check:
|
159 |
+
db_utils.register_new_usr(user_log_in_database=user_login_table,
|
160 |
name_sign_up=name_sign_up,
|
161 |
email_sign_up=email_sign_up,
|
162 |
user_name_sign_up=user_name_sign_up,
|
163 |
password_sign_up=password_sign_up,
|
164 |
+
professional_level=professional_level,
|
165 |
+
timestamp=str(datetime.now())[:-7])
|
166 |
st.success("Регистрация прошла успешно!")
|
167 |
|
168 |
def forgot_password(self) -> None:
|
|
|
172 |
"""
|
173 |
with st.form("Forgot Password Form"):
|
174 |
email_forgot_passwd = st.text_input("Email", placeholder='Введите Ваш email')
|
175 |
+
email_exists_check, user_name_forgot_passwd = db_utils.check_email_exists(
|
176 |
+
user_log_in_database=user_login_table,
|
177 |
+
email_forgot_passwd=email_forgot_passwd)
|
178 |
|
179 |
forgot_passwd_submit_button = st.form_submit_button(label='Получить пароль')
|
180 |
|
181 |
if forgot_passwd_submit_button:
|
|
|
|
|
|
|
182 |
if not email_exists_check:
|
183 |
st.error("Пользователя с таким e-mail не существует!")
|
184 |
|
|
|
186 |
random_password = db_utils.generate_random_passwd()
|
187 |
db_utils.send_passwd_in_email(self.auth_token, user_name_forgot_passwd, email_forgot_passwd,
|
188 |
self.company_name, random_password)
|
189 |
+
db_utils.change_passwd(user_log_in_database=user_login_table,
|
190 |
email_forgot_passwd=email_forgot_passwd,
|
191 |
random_password=random_password)
|
192 |
st.success("Временный пароль выслан Вам на почту!")
|
|
|
207 |
new_passwd = st.text_input("Новый пароль", placeholder='Введите новый пароль',
|
208 |
type='password')
|
209 |
|
210 |
+
new_passwd_1 = st.text_input("Повторите новый пароль", placeholder='Повторите пароль',
|
211 |
type='password')
|
212 |
|
213 |
reset_passwd_submit_button = st.form_submit_button(label='Изменить пароль')
|
214 |
|
215 |
if reset_passwd_submit_button:
|
216 |
email_exists_check, user_name_reset_passwd = db_utils.check_email_exists(
|
217 |
+
user_log_in_database=user_login_table,
|
218 |
email_forgot_passwd=email_reset_passwd)
|
219 |
+
current_passwd_check = db_utils.check_current_passwd(user_log_in_database=user_login_table,
|
220 |
email_reset_passwd=email_reset_passwd,
|
221 |
current_passwd=current_passwd)
|
222 |
if not email_exists_check:
|
|
|
229 |
st.error("Пароли не совпадают!")
|
230 |
|
231 |
if email_exists_check and current_passwd_check:
|
232 |
+
db_utils.change_passwd(user_log_in_database=user_login_table,
|
233 |
email_forgot_passwd=email_reset_passwd,
|
234 |
random_password=new_passwd)
|
235 |
st.success("Пароль успешно изменен!")
|