Resolve merge conflicts
						commit
						0c6616d52c
					
				
							
								
								
									
										60
									
								
								app/Login.py
								
								
								
								
							
							
						
						
									
										60
									
								
								app/Login.py
								
								
								
								
							|  | @ -1,6 +1,8 @@ | |||
| import hashlib | ||||
| import string | ||||
| from datetime import datetime, timedelta | ||||
| import unicodedata | ||||
| 
 | ||||
| 
 | ||||
| def md5(s): | ||||
|     ''' | ||||
|  | @ -11,14 +13,16 @@ def md5(s): | |||
|     h = hashlib.md5(s.encode(encoding='utf-8')) | ||||
|     return h.hexdigest() | ||||
| 
 | ||||
| 
 | ||||
| # import model.user after the defination of md5(s) to avoid circular import | ||||
| from model.user import get_user_by_username, insert_user, update_password_by_username | ||||
| 
 | ||||
| path_prefix = '/var/www/wordfreq/wordfreq/' | ||||
| path_prefix = './'  # comment this line in deployment | ||||
| 
 | ||||
| def verify_pass(newpass,oldpass): | ||||
|     if(newpass==oldpass): | ||||
| 
 | ||||
| def verify_pass(newpass, oldpass): | ||||
|     if (newpass == oldpass): | ||||
|         return True | ||||
| 
 | ||||
| 
 | ||||
|  | @ -30,7 +34,7 @@ def verify_user(username, password): | |||
| 
 | ||||
| def add_user(username, password): | ||||
|     start_date = datetime.now().strftime('%Y%m%d') | ||||
|     expiry_date = (datetime.now() + timedelta(days=30)).strftime('%Y%m%d') # will expire after 30 days | ||||
|     expiry_date = (datetime.now() + timedelta(days=30)).strftime('%Y%m%d')  # will expire after 30 days | ||||
|     # 将用户名和密码一起加密,以免暴露不同用户的相同密码 | ||||
|     password = md5(username + password) | ||||
|     insert_user(username=username, password=password, start_date=start_date, expiry_date=expiry_date) | ||||
|  | @ -52,7 +56,7 @@ def change_password(username, old_password, new_password): | |||
|     if not verify_user(username, old_password):  # 旧密码错误 | ||||
|         return False | ||||
|     # 将用户名和密码一起加密,以免暴露不同用户的相同密码 | ||||
|     if verify_pass(new_password,old_password): #新旧密码一致 | ||||
|     if verify_pass(new_password, old_password):  #新旧密码一致 | ||||
|         return False | ||||
|     update_password_by_username(username, new_password) | ||||
|     return True | ||||
|  | @ -65,30 +69,64 @@ def get_expiry_date(username): | |||
|     else: | ||||
|         return user.expiry_date | ||||
| 
 | ||||
| 
 | ||||
| class UserName: | ||||
|     def __init__(self, username): | ||||
|         self.username = username | ||||
| 
 | ||||
|     def contains_chinese(self): | ||||
|         for char in self.username: | ||||
|             # Check if the character is in the CJK (Chinese, Japanese, Korean) Unicode block | ||||
|             if unicodedata.name(char).startswith('CJK UNIFIED IDEOGRAPH'): | ||||
|                 return True | ||||
|         return False | ||||
| 
 | ||||
|     def validate(self): | ||||
|         if len(self.username) > 20: | ||||
|             return f'{self.username} is too long.  The user name cannot exceed 20 characters.' | ||||
|         if self.username.startswith('.'): # a user name must not start with a dot | ||||
|         if self.username.startswith('.'):  # a user name must not start with a dot | ||||
|             return 'Period (.) is not allowed as the first letter in the user name.' | ||||
|         if ' ' in self.username: # a user name must not include a whitespace | ||||
|         if ' ' in self.username:  # a user name must not include a whitespace | ||||
|             return 'Whitespace is not allowed in the user name.' | ||||
|         for c in self.username: # a user name must not include special characters, except non-leading periods or underscores | ||||
|         for c in self.username:  # a user name must not include special characters, except non-leading periods or underscores | ||||
|             if c in string.punctuation and c != '.' and c != '_': | ||||
|                 return f'{c} is not allowed in the user name.' | ||||
|         if self.username in ['signup', 'login', 'logout', 'reset', 'mark', 'back', 'unfamiliar', 'familiar', 'del', 'admin']: | ||||
|         if self.username in ['signup', 'login', 'logout', 'reset', 'mark', 'back', 'unfamiliar', 'familiar', 'del', | ||||
|                              'admin']: | ||||
|             return 'You used a restricted word as your user name.  Please come up with a better one.' | ||||
|         if self.contains_chinese(): | ||||
|             return 'Chinese characters are not allowed in the user name.' | ||||
|         return 'OK' | ||||
| 
 | ||||
| 
 | ||||
| class Password: | ||||
|     def __init__(self, password): | ||||
|         self.password = password | ||||
| 
 | ||||
|     def contains_chinese(self): | ||||
|         for char in self.password: | ||||
|             # Check if the character is in the CJK (Chinese, Japanese, Korean) Unicode block | ||||
|             if unicodedata.name(char).startswith('CJK UNIFIED IDEOGRAPH'): | ||||
|                 return True | ||||
|         return False | ||||
| 
 | ||||
|     def validate(self): | ||||
|         if len(self.password) < 4: | ||||
|             return 'Password must be at least 4 characters long.' | ||||
|         if ' ' in self.password: | ||||
|             return 'Password cannot contain spaces.' | ||||
|         if self.contains_chinese(): | ||||
|             return 'Chinese characters are not allowed in the password.' | ||||
|         return 'OK' | ||||
| 
 | ||||
| 
 | ||||
| class WarningMessage: | ||||
|     def __init__(self, s): | ||||
|     def __init__(self, s, type='username'): | ||||
|         self.s = s | ||||
|         self.type = type | ||||
| 
 | ||||
|     def __str__(self): | ||||
|         return UserName(self.s).validate() | ||||
| 
 | ||||
|         if self.type == 'username': | ||||
|             return UserName(self.s).validate() | ||||
|         if self.type == 'password': | ||||
|             return Password(self.s).validate() | ||||
|  |  | |||
|  | @ -0,0 +1,88 @@ | |||
| from selenium.webdriver.common.alert import Alert | ||||
| from selenium.webdriver.common.by import By | ||||
| from selenium.webdriver.support.ui import WebDriverWait | ||||
| from selenium.webdriver.support import expected_conditions as EC | ||||
| 
 | ||||
| 
 | ||||
| # 对用户名不能为中文进行测试 | ||||
| def test_register_username_with_chinese(driver, URL): | ||||
|     try: | ||||
|         driver.get(URL + "/signup") | ||||
| 
 | ||||
|         # 等待用户名输入框出现 | ||||
|         username_elem = WebDriverWait(driver, 10).until( | ||||
|             EC.presence_of_element_located((By.ID, 'username')) | ||||
|         ) | ||||
|         username_elem.send_keys("测试用户")  # 输入中文用户名 | ||||
| 
 | ||||
|         # 等待密码输入框出现 | ||||
|         password_elem = WebDriverWait(driver, 10).until( | ||||
|             EC.presence_of_element_located((By.ID, 'password')) | ||||
|         ) | ||||
|         password_elem.send_keys("validPassword123")  # 输入有效密码 | ||||
| 
 | ||||
|         # 等待确认密码输入框出现 | ||||
|         password2_elem = WebDriverWait(driver, 10).until( | ||||
|             EC.presence_of_element_located((By.ID, 'password2')) | ||||
|         ) | ||||
|         password2_elem.send_keys("validPassword123")  # 输入有效确认密码 | ||||
| 
 | ||||
|         # 等待注册按钮出现并点击 | ||||
|         signup_button = WebDriverWait(driver, 10).until( | ||||
|             EC.element_to_be_clickable((By.XPATH, '//button[@onclick="signup()"]')) | ||||
|         ) | ||||
|         signup_button.click() | ||||
| 
 | ||||
|         # 等待警告框出现并接受 | ||||
|         WebDriverWait(driver, 10).until(EC.alert_is_present()) | ||||
|         alert = driver.switch_to.alert | ||||
|         alert_text = alert.text | ||||
|         print(f"警告文本: {alert_text}") | ||||
|         assert alert_text == "Chinese characters are not allowed in the user name."  # 根据实际的警告文本进行断言 | ||||
|         alert.accept() | ||||
| 
 | ||||
|     except Exception as e: | ||||
|         print(f"发生错误: {e}") | ||||
|         raise | ||||
| 
 | ||||
| 
 | ||||
| # 对注册时密码不能是中文进行测试 | ||||
| def test_register_password_with_chinese(driver, URL): | ||||
|     try: | ||||
|         driver.get(URL + "/signup") | ||||
| 
 | ||||
|         # 等待用户名输入框出现 | ||||
|         username_elem = WebDriverWait(driver, 10).until( | ||||
|             EC.presence_of_element_located((By.ID, 'username')) | ||||
|         ) | ||||
|         username_elem.send_keys("validUsername123")  # 输入有效用户名 | ||||
| 
 | ||||
|         # 等待密码输入框出现 | ||||
|         password_elem = WebDriverWait(driver, 10).until( | ||||
|             EC.presence_of_element_located((By.ID, 'password')) | ||||
|         ) | ||||
|         password_elem.send_keys("测试密码")  # 输入中文密码 | ||||
| 
 | ||||
|         # 等待确认密码输入框出现 | ||||
|         password2_elem = WebDriverWait(driver, 10).until( | ||||
|             EC.presence_of_element_located((By.ID, 'password2')) | ||||
|         ) | ||||
|         password2_elem.send_keys("测试密码")  # 输入中文确认密码 | ||||
| 
 | ||||
|         # 等待注册按钮出现并点击 | ||||
|         signup_button = WebDriverWait(driver, 10).until( | ||||
|             EC.element_to_be_clickable((By.XPATH, '//button[@onclick="signup()"]')) | ||||
|         ) | ||||
|         signup_button.click() | ||||
| 
 | ||||
|         # 等待警告框出现并接受 | ||||
|         WebDriverWait(driver, 10).until(EC.alert_is_present()) | ||||
|         alert = driver.switch_to.alert | ||||
|         alert_text = alert.text | ||||
|         print(f"警告文本: {alert_text}") | ||||
|         assert alert_text == "Chinese characters are not allowed in the password."  # 根据实际的警告文本进行断言 | ||||
|         alert.accept() | ||||
| 
 | ||||
|     except Exception as e: | ||||
|         print(f"发生错误: {e}") | ||||
|         raise | ||||
		Loading…
	
		Reference in New Issue