forked from mrlan/EnglishPal
				
			Merge pull request 'Bug487-WuYuhan-Refactor' (#57) from Bug487-WuYuhan-Refactor into master
Reviewed-on: http://121.4.94.30:3000/mrlan/EnglishPal/pulls/57SPM2022F-CONTRIBUTORS-ChenQiuwei
						commit
						f909201615
					
				
							
								
								
									
										33
									
								
								app/Login.py
								
								
								
								
							
							
						
						
									
										33
									
								
								app/Login.py
								
								
								
								
							|  | @ -1,4 +1,5 @@ | ||||||
| import hashlib | import hashlib | ||||||
|  | import string | ||||||
| from datetime import datetime | from datetime import datetime | ||||||
| from UseSqlite import InsertQuery, RecordQuery | from UseSqlite import InsertQuery, RecordQuery | ||||||
| 
 | 
 | ||||||
|  | @ -81,3 +82,35 @@ def md5(s): | ||||||
|     ''' |     ''' | ||||||
|     h = hashlib.md5(s.encode(encoding='utf-8')) |     h = hashlib.md5(s.encode(encoding='utf-8')) | ||||||
|     return h.hexdigest() |     return h.hexdigest() | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class UserName: | ||||||
|  |     def __init__(self, username): | ||||||
|  |         self.username = username | ||||||
|  | 
 | ||||||
|  |     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 | ||||||
|  |             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 | ||||||
|  |             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 | ||||||
|  |             if c in string.punctuation and c is not '.' and c is not '_': | ||||||
|  |                 return f'{c} is not allowed in the user name.' | ||||||
|  |         return 'OK' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class WarningMessage: | ||||||
|  |     def __init__(self, s): | ||||||
|  |         self.s = s | ||||||
|  | 
 | ||||||
|  |     def __str__(self): | ||||||
|  |         result = UserName(self.s).validate() | ||||||
|  |         if result != 'OK': | ||||||
|  |             return result | ||||||
|  | 
 | ||||||
|  |         if self.s in ['signup', 'login', 'logout', 'reset', 'mark', 'back', 'unfamiliar', 'familiar', 'del']: | ||||||
|  |             return 'You used a restricted word as the user name.  Please come up with a better one.' | ||||||
|  | 
 | ||||||
|  |         return 'OK' | ||||||
|  |  | ||||||
|  | @ -1,6 +1,5 @@ | ||||||
| from flask import * | from flask import * | ||||||
| from Login import check_username_availability, verify_user, add_user, get_expiry_date, change_password | from Login import check_username_availability, verify_user, add_user, get_expiry_date, change_password, UserName, WarningMessage | ||||||
| import re |  | ||||||
| 
 | 
 | ||||||
| # 初始化蓝图 | # 初始化蓝图 | ||||||
| accountService = Blueprint("accountService", __name__) | accountService = Blueprint("accountService", __name__) | ||||||
|  | @ -22,17 +21,9 @@ def signup(): | ||||||
|         password = escape(request.form['password']) |         password = escape(request.form['password']) | ||||||
|          |          | ||||||
|         #! 添加如下代码为了过滤注册时的非法字符 |         #! 添加如下代码为了过滤注册时的非法字符 | ||||||
|         if len(username) > 20: |         warn = WarningMessage(username) | ||||||
|             return '用户名过长' |         if str(warn) != 'OK': | ||||||
|         # 正则匹配非法字符 |             return str(warn) | ||||||
|         check_useful = re.search(u'^[_a-zA-Z0-9\u4e00-\u9fa5]+$', username) |  | ||||||
|         if not check_useful: |  | ||||||
|             return '存在非法字符' |  | ||||||
|         # 判断用户名是否和接口重名 |  | ||||||
|         if username in ["signup", "login", "logout",  |  | ||||||
|                         "reset", "mark", "back",  |  | ||||||
|                         "unfamiliar", "familiar", 'del']: |  | ||||||
|             return '请勿与接口同名' |  | ||||||
|          |          | ||||||
|         available = check_username_availability(username) |         available = check_username_availability(username) | ||||||
|         if not available: # 用户名不可用 |         if not available: # 用户名不可用 | ||||||
|  | @ -140,4 +131,4 @@ alert('密码修改失败'); | ||||||
| window.location.href="/reset"; | window.location.href="/reset"; | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| ''' | ''' | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue