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
- time_stamp=str(datetime.datetime.now())[:-7],
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
- time_stamp=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,
 
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.fetch({'user_name': user_name}).items
18
- try:
19
- passwd_verification_bool = ph.verify(registered_user[0]['password'], password)
20
- if passwd_verification_bool:
21
- return True
 
 
 
 
 
 
 
 
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 e-mail while creating the account.
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
- if re.fullmatch(regex, email_sign_up):
59
- return True
60
- return False
 
61
 
62
 
63
  def check_unique_email(user_log_in_database, email_sign_up: str) -> bool:
64
  """
65
- Checks if the e-mail already exists (since e-mail needs to be unique).
66
  """
67
- authorized_users_data = user_log_in_database.fetch({'e-mail': email_sign_up}).items
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.fetch({'user_name': user_name_sign_up}).items
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
- 'e-mail': email_sign_up,
112
  'password': ph.hash(password_sign_up),
113
- 'professional_level': professional_level}
 
114
 
115
- return user_log_in_database.put(new_usr_data)
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.fetch({'user_name': user_name}).items
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 e-mail entered is present in the _secret_auth.json file.
131
  """
132
- authorized_users_data = user_log_in_database.fetch({'e-mail': email_forgot_passwd}).items
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 e-mail.
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 e-mail to the user containing the randomly generated password.
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, user_key)
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.fetch({'e-mail': email_reset_passwd}).items[0]
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, time_stamp, creator_name=None,
196
  generated_result=None, test_taker_name=None, test_taker_answers=None, test_taker_result=None,
197
- comments=None, distractor_model=None):
198
- already_saved_names = user_task_database.fetch({'creator_name': creator_name,
199
- 'save_name': save_name,
200
- 'cefr_level': cefr_level}).items
201
- already_saved_tasks = user_task_database.fetch({'creator_name': creator_name,
202
- 'generated_result': generated_result,
203
- 'cefr_level': cefr_level}).items
204
- already_saved_tests = user_task_database.fetch({'test_taker_name': test_taker_name,
205
- 'save_name': save_name,
206
- 'cefr_level': cefr_level}).items
 
 
 
 
 
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
- 'time_stamp': time_stamp,
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
- 'time_stamp': time_stamp,
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.put(new_save_data)
240
  if save_type == 'download':
241
- return st.success('Задания успешно сохранены! Можете переходить на следующие вкладки')
 
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
- ITEMS = []
249
- user_data = user_task_database.fetch({'creator_name': creator_name, 'save_type': save_type})
250
- _last = user_data.last
251
- while _last is not None:
252
- ITEMS.extend(user_data.items)
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
- ITEMS = []
262
- user_data = user_task_database.fetch({'test_taker_name': test_taker_name, 'save_type': save_type})
263
- _last = user_data.last
264
- while _last is not None:
265
- ITEMS.extend(user_data.items)
266
- user_data = user_task_database.fetch({'test_taker_name': test_taker_name, 'save_type': save_type}, last=_last)
267
- _last = user_data.last
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.fetch({'creator_name': creator_name,
280
- 'save_name': save_name,
281
- 'save_type': load_mode,
282
- 'cefr_level': cefr_level}).items[0]['generated_result']
 
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
- DETA_KEY = st.secrets['DETA_KEY']
9
- DETA_TABLE = st.secrets['DETA_TABLE']
10
- DETA_USER_TABLE = st.secrets['DETA_USER_SAVE_TEXT_TABLE']
11
 
12
- deta = Deta(DETA_KEY)
13
- db = deta.Base(DETA_TABLE)
14
- user_save_text_table = deta.Base(DETA_USER_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=db,
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=db,
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=db,
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=db,
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=db,
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=db,
217
  email_forgot_passwd=email_reset_passwd)
218
- current_passwd_check = db_utils.check_current_passwd(user_log_in_database=db,
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=db,
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("Пароль успешно изменен!")