Эх сурвалжийг харах

登录、修改密码新增加密次数参数

peng 1 жил өмнө
parent
commit
3eab2f95ca

+ 55 - 43
Controller/UserController.py

@@ -351,6 +351,7 @@ class ChangePwdView(TemplateView):
         password_version = request_dict.get('pwdVersion', 'V1')
         new_salt = request_dict.get('newSalt', None)
         old_salt = request_dict.get('oldSalt', None)
+        iterations = request_dict.get('iterations', None)
         response = ResponseObject()
         if oldPwd is None and newPwd is None:
             return response.json(800)
@@ -358,16 +359,16 @@ class ChangePwdView(TemplateView):
         response.lang = tko.lang
         if tko.code != 0:
             return response.json(tko.code)
-        return self.updatePwd(tko.userID, oldPwd, newPwd, response, password_version, new_salt, old_salt)
+        return self.updatePwd(tko.userID, oldPwd, newPwd, response, password_version, new_salt, old_salt, iterations)
 
-    def updatePwd(self, userID, oldPwd, newPwd, response, password_version, new_salt, old_salt):
+    def updatePwd(self, userID, oldPwd, newPwd, response, password_version, new_salt, old_salt, iterations):
         user_qs = Device_User.objects.filter(userID=userID)
         if not user_qs.exists():
             return response.json(104)
         if password_version == 'V1':
             c_p = check_password(oldPwd, user_qs[0].password)
         else:
-            oldPwd = "%s$%d$%s$%s" % ("pbkdf2_sha256", 260000, old_salt, oldPwd)
+            oldPwd = "%s$%d$%s$%s" % ("pbkdf2_sha256", iterations, old_salt, oldPwd)
             c_p = CommonService.check_password(oldPwd, user_qs[0].password)
         # 密码是否正确
         if not c_p:
@@ -405,6 +406,7 @@ class v3ChangePwdView(TemplateView):
         newPwd = request_dict.get('newPwd', None)
         new_salt = request_dict.get('newSalt', None)
         old_salt = request_dict.get('oldSalt', None)
+        iterations = request_dict.get('iterations', None)
         password_version = request_dict.get('pwdVersion', 'V1')
         response = ResponseObject()
         # 解密
@@ -446,16 +448,16 @@ class v3ChangePwdView(TemplateView):
             response.lang = tko.lang
             if tko.code != 0:
                 return response.json(tko.code)
-            return self.updatePwd(tko.userID, oldPwd, newPwd, response, password_version, new_salt, old_salt)
+            return self.updatePwd(tko.userID, oldPwd, newPwd, response, password_version, new_salt, old_salt, iterations)
 
-    def updatePwd(self, userID, oldPwd, newPwd, response, password_version, new_salt, old_salt):
+    def updatePwd(self, userID, oldPwd, newPwd, response, password_version, new_salt, old_salt, iterations):
         user_qs = Device_User.objects.filter(userID=userID)
         if not user_qs.exists():
             return response.json(104)
         if password_version == 'V1':
             c_p = check_password(oldPwd, user_qs[0].password)
         else:
-            oldPwd = "%s$%d$%s$%s" % ("pbkdf2_sha256", 260000, old_salt, oldPwd)
+            oldPwd = "%s$%d$%s$%s" % ("pbkdf2_sha256", iterations, old_salt, oldPwd)
             c_p = CommonService.check_password(oldPwd, user_qs[0].password)
         # 密码是否正确
         if not c_p:
@@ -484,6 +486,7 @@ class createPwd(TemplateView):
     def validation(self, request_dict):
         token = request_dict.get('token', None)
         password = request_dict.get('password', None)
+        salt = request_dict.get('salt', None)
         password_version = request_dict.get('pwdVersion', 'V1')
         response = ResponseObject()
 
@@ -505,6 +508,8 @@ class createPwd(TemplateView):
                     password = password.decode('utf-8')
                     password = password[i:-i]
                 password = make_password(password)
+            else:
+                password = "%s$%d$%s$%s" % ("pbkdf2_sha256", 260000, salt, password)
             update = Device_User.objects.filter(userID=userID).update(password=password)
             if update:
                 return response.json(0)
@@ -727,6 +732,8 @@ class refreshTokenViewV3(TemplateView):
         lang = request_dict.get('lang', None)
         language = request_dict.get('language', None)
         password = request_dict.get('userPwd', None)
+        salt = request_dict.get('salt', None)
+        iterations = request_dict.get('iterations', None)
         password_version = request_dict.get('pwdVersion', 'V1')
         response = ResponseObject(lang)
         if not token:
@@ -770,6 +777,7 @@ class refreshTokenViewV3(TemplateView):
                     if not check_password(password, list(user_qs)[0]['password']):
                         return response.json(111)
                 else:
+                    password = "%s$%d$%s$%s" % ("pbkdf2_sha256", iterations, salt, password)
                     if not CommonService.check_password(password, list(user_qs)[0]['password']):
                         return response.json(111)
                 now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
@@ -1969,6 +1977,7 @@ class v2LoginView(TemplateView):
         username = request_dict.get('userName', None)
         password = request_dict.get('userPwd', None)
         salt = request_dict.get('salt', None)
+        iterations = request_dict.get('iterations', None)
         password_version = request_dict.get('pwdVersion', 'V1')
         number = request_dict.get('number', None)
         if not username or not password:
@@ -1977,28 +1986,28 @@ class v2LoginView(TemplateView):
         password = password.strip()
         data_valid = DataValid()
         if data_valid.email_validate(username):
-            return self.do_email_login(username, password, number, response, password_version, salt)
+            return self.do_email_login(username, password, number, response, password_version, salt, iterations)
         elif data_valid.mobile_validate(username):
-            return self.do_phone_login(username, password, number, response, password_version, salt)
+            return self.do_phone_login(username, password, number, response, password_version, salt, iterations)
         elif data_valid.name_validate(username):
-            return self.do_name_login(username, password, number, response, password_version, salt)
+            return self.do_name_login(username, password, number, response, password_version, salt, iterations)
         else:
             return response.json(107)
 
-    def do_email_login(self, email, password, number, response, password_version, salt):
+    def do_email_login(self, email, password, number, response, password_version, salt, iterations):
         user_qs = Device_User.objects.filter(Q(username=email) | Q(userEmail=email))
-        return self.valid_login(user_qs, password, number, response, password_version, salt)
+        return self.valid_login(user_qs, password, number, response, password_version, salt, iterations)
 
-    def do_phone_login(self, phone, password, number, response, password_version, salt):
+    def do_phone_login(self, phone, password, number, response, password_version, salt, iterations):
         user_qs = Device_User.objects.filter(Q(phone=phone) | Q(username=phone), is_active=True, user_isValid=True)
-        return self.valid_login(user_qs, password, number, response, password_version, salt)
+        return self.valid_login(user_qs, password, number, response, password_version, salt, iterations)
 
-    def do_name_login(self, username, password, number, response, password_version, salt):
+    def do_name_login(self, username, password, number, response, password_version, salt, iterations):
         user_qs = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username),
                                              is_active=True, user_isValid=True)
-        return self.valid_login(user_qs, password, number, response, password_version, salt)
+        return self.valid_login(user_qs, password, number, response, password_version, salt, iterations)
 
-    def valid_login(self, user_qs, password, number, response, password_version, salt):
+    def valid_login(self, user_qs, password, number, response, password_version, salt, iterations):
         if not user_qs.exists():
             return response.json(104)
         # users = user_qs.values('role__rid', 'role__roleName', 'userID', 'role', 'NickName', 'username', 'userEmail',
@@ -2008,7 +2017,7 @@ class v2LoginView(TemplateView):
         if password_version == 'V1':
             check_flag = check_password(password, users['password'])
         else:
-            password = "%s$%d$%s$%s" % ("pbkdf2_sha256", 260000, salt, password)
+            password = "%s$%d$%s$%s" % ("pbkdf2_sha256", iterations, salt, password)
             check_flag = CommonService.check_password(password, users['password'])
         if not check_flag:
             return response.json(111)
@@ -2162,7 +2171,6 @@ class v3LoginView(TemplateView):
     def validates(self, request_dict, response):
         username = request_dict.get('userName', None)
         password = request_dict.get('userPwd', None)
-        salt = request_dict.get('salt', None)
         password_version = request_dict.get('pwdVersion', 'V1')
         subscribe = request_dict.get('subscribe', None)
         number = request_dict.get('number', None)
@@ -2199,29 +2207,31 @@ class v3LoginView(TemplateView):
         else:
             data_valid = DataValid()
             if data_valid.email_validate(username):
-                return self.do_email_login(username, password, response, subscribe, number, request_dict, salt)
+                return self.do_email_login(username, password, response, subscribe, number, request_dict)
             elif data_valid.mobile_validate(username):
-                return self.do_phone_login(username, password, response, subscribe, number, request_dict, salt)
+                return self.do_phone_login(username, password, response, subscribe, number, request_dict)
             elif data_valid.name_validate(username):
-                return self.do_name_login(username, password, response, subscribe, number, request_dict, salt)
+                return self.do_name_login(username, password, response, subscribe, number, request_dict)
             else:
                 return response.json(107)
 
-    def do_email_login(self, email, password, response, subscribe, number, request_dict, salt):
+    def do_email_login(self, email, password, response, subscribe, number, request_dict):
         user_qs = Device_User.objects.filter(Q(username=email) | Q(userEmail=email))
-        return self.valid_login(user_qs, password, response, subscribe, number, request_dict, salt)
+        return self.valid_login(user_qs, password, response, subscribe, number, request_dict)
 
-    def do_phone_login(self, phone, password, response, subscribe, number, request_dict, salt):
+    def do_phone_login(self, phone, password, response, subscribe, number, request_dict):
         user_qs = Device_User.objects.filter(Q(phone=phone) | Q(username=phone), is_active=True, user_isValid=True)
-        return self.valid_login(user_qs, password, response, subscribe, number, request_dict, salt)
+        return self.valid_login(user_qs, password, response, subscribe, number, request_dict)
 
-    def do_name_login(self, username, password, response, subscribe, number, request_dict, salt):
+    def do_name_login(self, username, password, response, subscribe, number, request_dict):
         user_qs = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username),
                                              is_active=True, user_isValid=True)
-        return self.valid_login(user_qs, password, response, subscribe, number, request_dict, salt)
+        return self.valid_login(user_qs, password, response, subscribe, number, request_dict)
 
-    def valid_login(self, user_qs, password, response, subscribe, number, request_dict, salt):
+    def valid_login(self, user_qs, password, response, subscribe, number, request_dict):
         password_version = request_dict.get('pwdVersion', 'V1')
+        salt = request_dict.get('salt', None)
+        iterations = request_dict.get('iterations', None)
         if not user_qs.exists():
             return response.json(104)
         if subscribe:
@@ -2233,7 +2243,7 @@ class v3LoginView(TemplateView):
         if password_version == 'V1':
             check_flag = check_password(password, users['password'])
         else:
-            password = "%s$%d$%s$%s" % ("pbkdf2_sha256", 260000, salt, password)
+            password = "%s$%d$%s$%s" % ("pbkdf2_sha256", iterations, salt, password)
             check_flag = CommonService.check_password(password, users['password'])
         if not check_flag:
             return response.json(111)
@@ -2697,7 +2707,7 @@ class wxAuthSignView(TemplateView):
                 access_token = res_json['access_token']
                 openid = res_json['openid']
                 if access_token and openid:
-                    info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token={access_token}&openid={openid}'.\
+                    info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token={access_token}&openid={openid}'. \
                         format(access_token=access_token, openid=openid)
                     res_req = requests.get(url=info_url)
                     res_req.encoding = res_req.apparent_encoding
@@ -2838,7 +2848,7 @@ class wxPerfectView(TemplateView):
                     secret = app_config[appBundleID]['secret']
                     # 获取access_token请求
                     at_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&' \
-                             'code={code}&grant_type=authorization_code'.\
+                             'code={code}&grant_type=authorization_code'. \
                         format(appid=appid, secret=secret, code=grant_code)
                     res_req = requests.get(url=at_url)
                     res_json = res_req.json()
@@ -3288,6 +3298,7 @@ class alexaAuthView(TemplateView):
         username = request_dict.get('userName', None)
         password = request_dict.get('userPwd', None)
         salt = request_dict.get('salt', None)
+        iterations = request_dict.get('iterations', None)
         password_version = request_dict.get('pwdVersion', 'V1')
         if not username or not password:
             return response.json(111)
@@ -3295,35 +3306,35 @@ class alexaAuthView(TemplateView):
         password = password.strip()
         data_valid = DataValid()
         if data_valid.email_validate(username):
-            return self.do_email_login(username, password, response, password_version, salt)
+            return self.do_email_login(username, password, response, password_version, salt, iterations)
         elif data_valid.mobile_validate(username):
-            return self.do_phone_login(username, password, response, password_version, salt)
+            return self.do_phone_login(username, password, response, password_version, salt, iterations)
         elif data_valid.name_validate(username):
-            return self.do_name_login(username, password, response, password_version, salt)
+            return self.do_name_login(username, password, response, password_version, salt, iterations)
         else:
             return response.json(107)
 
-    def do_email_login(self, email, password, response, password_version, salt):
+    def do_email_login(self, email, password, response, password_version, salt, iterations):
         user_qs = Device_User.objects.filter(Q(username=email) | Q(userEmail=email))
-        return self.valid_login(user_qs, password, response, password_version, salt)
+        return self.valid_login(user_qs, password, response, password_version, salt, iterations)
 
-    def do_phone_login(self, phone, password, response, password_version, salt):
+    def do_phone_login(self, phone, password, response, password_version, salt, iterations):
         user_qs = Device_User.objects.filter(Q(phone=phone) | Q(username=phone), is_active=True, user_isValid=True)
-        return self.valid_login(user_qs, password, response, password_version, salt)
+        return self.valid_login(user_qs, password, response, password_version, salt, iterations)
 
-    def do_name_login(self, username, password, response, password_version, salt):
+    def do_name_login(self, username, password, response, password_version, salt, iterations):
         user_qs = Device_User.objects.filter(Q(username=username) | Q(phone=username) | Q(userEmail=username),
                                              is_active=True, user_isValid=True)
-        return self.valid_login(user_qs, password, response, password_version, salt)
+        return self.valid_login(user_qs, password, response, password_version, salt, iterations)
 
-    def valid_login(self, user_qs, password, response, password_version, salt):
+    def valid_login(self, user_qs, password, response, password_version, salt, iterations):
         if not user_qs.exists():
             return response.json(104)
         users = user_qs.values('userID', 'password', 'region_country')[0]
         if password_version == 'V1':
             check_flag = check_password(password, users['password'])
         else:
-            password = "%s$%d$%s$%s" % ("pbkdf2_sha256", 260000, salt, password)
+            password = "%s$%d$%s$%s" % ("pbkdf2_sha256", iterations, salt, password)
             check_flag = CommonService.check_password(password, users['password'])
         if not check_flag:
             return response.json(111)
@@ -4478,6 +4489,7 @@ def deleteAccount(request):
     token = request.POST.get('token', None)
     password = request.POST.get('userPwd', None)
     salt = request.POST.get('salt', None)
+    iterations = request.POST.get('iterations', None)
     password_version = request.POST.get('pwdVersion', 'V1')
     response = ResponseObject(lang=lang) if lang else ResponseObject()
     request.encoding = 'utf-8'
@@ -4524,7 +4536,7 @@ def deleteAccount(request):
         if password_version == 'V1':
             check_flag = check_password(password, userPWD['password'])
         else:
-            password = "%s$%d$%s$%s" % ("pbkdf2_sha256", 260000, salt, password)
+            password = "%s$%d$%s$%s" % ("pbkdf2_sha256", iterations, salt, password)
             check_flag = CommonService.check_password(password, userPWD['password'])
         if not check_flag:
             return response.json(111)