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

添加验证验证码接口,avss的appid初始化接口,保存用户选择的地区信息接口

tanghongbin 4 жил өмнө
parent
commit
d655724c14

+ 7 - 1
Ansjer/urls.py

@@ -12,7 +12,8 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
     ApplicationController, UserExController, CloudStorage, TestApi, UserBrandControllerV2, \
     StatisticsController, Alexa, FAQController, AppLogController, EquipmentVersionLimit, VoicePromptController, \
     CDKController, \
-    DeviceTypeController, CloudTest, Cloudsum, IotCoreController, OperatingLogs, ProcessInfo
+    DeviceTypeController, CloudTest, Cloudsum, IotCoreController, OperatingLogs, ProcessInfo, UserRegionController, \
+    VerifyCodeController
 
 urlpatterns = [
     url(r'^testApi/(?P<operation>.*)$', TestApi.testView.as_view()),
@@ -154,6 +155,7 @@ urlpatterns = [
 
     # 屏蔽
     url(r'^user/initInfo$', UserController.InitInfoView.as_view()),
+    url(r'^user/information/(?P<operation>.*)$', UserController.InitUserInformationView.as_view()),
     # 获取时区相关信息
     url(r'^getTZ$', EquipmentStatus.getTZ),
 
@@ -277,6 +279,10 @@ urlpatterns = [
     url(r'^ProcessInfo/(?P<operation>.*)$', ProcessInfo.ProcessInfoView.as_view()),
     url(r'^Cloudsum/(?P<operation>.*)$', Cloudsum.Cloudsum.as_view()),
 
+    url(r'userRegion/(?P<operation>.*$)', UserRegionController.UserRegionView.as_view()),
+
+    # 验证验证码
+    url(r'verifyCode/(?P<operation>.*$)', VerifyCodeController.VerifyCodeView.as_view()),
 
     re_path('(?P<path>.*)', LogManager.errorPath),
 

+ 67 - 1
Controller/UserController.py

@@ -32,7 +32,7 @@ from ratelimit.decorators import ratelimit
 from Ansjer.config import AuthCode_Expire, SERVER_DOMAIN, APNS_CONFIG, JPUSH_CONFIG, FCM_CONFIG, TUTK_PUSH_DOMAIN
 from Controller.CheckUserData import DataValid, date_handler, RandomStr
 from Model.models import Device_User, Role, UidPushModel, UserOauth2Model, UserExModel, Device_Info, UidSetModel, \
-    UserAppFrequencyModel, CountryIPModel
+    UserAppFrequencyModel, CountryIPModel, UserRegionModel
 from Object.AWS.SesClassObject import SesClassObject
 from Object.AliSmsObject import AliSmsObject
 from Object.RedisObject import RedisObject
@@ -1782,6 +1782,11 @@ class v3LoginView(TemplateView):
         if oauth_qs.exists():
             auth_type = oauth_qs[0].authType
 
+        region_id = 0
+        user_region_qs = UserRegionModel.objects.filter(userID_id=userID)
+        if user_qs.exists():
+            region_id = user_region_qs[0].region_id
+
         if tko.code == 0:
             now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
             user_qs.update(last_login=now_time, language=response.lang)
@@ -1804,6 +1809,7 @@ class v3LoginView(TemplateView):
             # res['fingerprint_key'] = CommonService.encode_data(content=users['fingerprint_key'], start=2)
             res['authType'] = auth_type
             res['subscribe_email'] = users['subscribe_email'] if users['subscribe_email'] is not None else ''
+            res['regionID'] = region_id
             return response.json(0, res)
         else:
             return response.json(tko.code)
@@ -3247,6 +3253,11 @@ class v3LoginByCodeView(View):
         if oauth_qs.exists():
             auth_type = oauth_qs[0].authType
 
+        region_id = 0
+        user_region_qs = UserRegionModel.objects.filter(userID_id=userID)
+        if user_qs.exists():
+            region_id = user_region_qs[0].region_id
+
         if tko.code == 0:
             now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
             user_qs.update(last_login=now_time, language=response.lang)
@@ -3266,6 +3277,7 @@ class v3LoginByCodeView(View):
             res['userEmail'] = users['userEmail'] if users['userEmail'] is not None else ''
             res['phone'] = users['phone'] if users['phone'] is not None else ''
             res['authType'] = auth_type
+            res['region_id'] = region_id
             return response.json(0, res)
         else:
             return response.json(tko.code)
@@ -3495,6 +3507,12 @@ class AppleAuthLogin(View):
         if oauth_qs.exists():
             auth_type = oauth_qs[0].authType
         res['authType'] = auth_type
+
+        region_id = 0
+        user_region_qs = UserRegionModel.objects.filter(userID_id=userID)
+        if user_qs.exists():
+            region_id = user_region_qs[0].region_id
+        res['region_id'] = region_id
         user_qs.update(last_login=now_time, online=True)
         return response.json(0, res)
 
@@ -3699,3 +3717,51 @@ def updateUserCountry(request):
         # CountryIPModel.objects.filter(id__in=tuple(ids)).update(status=1)
     response = ResponseObject()
     return response.json(0)
+
+
+class InitUserInformationView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.GET
+        return self.validate(request_dict, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.POST
+        return self.validate(request_dict, operation)
+
+    def validate(self, request_dict, operation):
+        token = TokenObject(request_dict.get('token', None))
+
+        response = ResponseObject()
+
+        if token.code != 0:
+            return response.json(token.code)
+
+        if operation == 'init':
+            return self.do_init(token.userID, request_dict, response)
+        else:
+            return response.json(444)
+
+    def do_init(self, userID, request_dict, response):
+        appBundleId = request_dict.get('appBundleId', None)
+
+        if appBundleId:
+            user_ex_qs = UserExModel.objects.filter(userID_id=userID)
+            now_time = int(time.time())
+            if user_ex_qs.exists():
+                update = {
+                    'appBundleId':appBundleId,
+                    'updTime': now_time
+                }
+                user_ex_qs.update(**update)
+            else:
+
+                user_ex = UserExModel(userID_id=userID, appBundleId=appBundleId, addTime=now_time, updTime=now_time)
+                user_ex.save()
+            return response.json(0)
+        else:
+            return response.json(444)

+ 61 - 0
Controller/UserRegionController.py

@@ -0,0 +1,61 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+import time
+
+from django.views import View
+
+from Model.models import Device_User, UserRegionModel
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+
+
+class UserRegionView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.GET
+        return self.validate(request_dict, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.POST
+        return self.validate(request_dict, operation)
+
+    def validate(self, request_dict, operation):
+        token = TokenObject(request_dict.get('token', None))
+
+        response = ResponseObject()
+
+        if token.code != 0:
+            return response.json(token.code)
+
+        if operation == 'init':
+            return self.do_init(token.userID, request_dict, response)
+        else:
+            return response.json(404)
+
+    def do_init(self, userID, request_dict, response):
+        user_qs = Device_User.objects.filter(userID=userID)
+        if not user_qs.exists():
+            return response.json(309)
+
+        region_id = request_dict.get('country_number', None)
+
+        if region_id:
+            user_region_qs = UserRegionModel.objects.filter(user__userID=userID)
+            now_time = int(time.time())
+            if not user_region_qs.exists():
+                user_region = UserRegionModel(user_id=userID, region_id=region_id, add_time=now_time, update_time=now_time)
+                user_region.save()
+            else:
+                update = {
+                    'region_id': region_id,
+                    'update_time': now_time
+                }
+
+                user_region_qs.update(**update)
+            return response.json(0)
+        else:
+            return response.json(444)

+ 111 - 0
Controller/VerifyCodeController.py

@@ -0,0 +1,111 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+from django.views import View
+
+from Controller.CheckUserData import DataValid
+from Object.RedisObject import RedisObject
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+
+
+class VerifyCodeView(View):
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.GET
+        return self.validate(request_dict, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        request_dict = request.POST
+        return self.validate(request_dict, operation)
+
+    def validate(self, request_dict, operation):
+        token = TokenObject(request_dict.get('token', None))
+
+        response = ResponseObject()
+
+        if token.code != 0:
+            return response.json(token.code)
+
+        if operation == 'forget':
+            return self.verify_forget(request_dict, response)
+        elif operation == 'register':
+            return self.verify_register(request_dict, response)
+        elif operation == 'image':
+            return self.verify_image(request_dict, response)
+        else:
+            return response.json(404)
+
+    def verify_forget(self, request_dict, response):
+        email = request_dict.get('email', None)
+        phone = request_dict.get('phone', None)
+        authcode = request_dict.get('authcode', None)
+        key = '_forgetPwdResetCode'
+        if email is not None:
+            email = email.strip()
+            return self.email_validate(key, email, authcode, response)
+        elif phone is not None:
+            phone = phone.strip()
+            return self.phone_validate(phone, authcode, response)
+        else:
+            return response.json(444)
+
+    def verify_register(self, request_dict, response):
+        email = request_dict.get('email', None)
+        phone = request_dict.get('phone', None)
+        authcode = request_dict.get('authcode', None)
+        key = '_identifyingCode'
+        if email is not None:
+            email = email.strip()
+            return self.email_validate(key, email, authcode, response)
+        elif phone is not None:
+            phone = phone.strip()
+            return self.phone_validate(phone, authcode, response)
+        else:
+            return response.json(444)
+
+    def verify_image(self, request_dict, response):
+        imageCodeId = request_dict.get('imageCodeId', None)
+        authcode = request_dict.get('authcode', None)
+
+        if imageCodeId and authcode:
+            image_code_key = 'image_code_' + imageCodeId
+            redisObj = RedisObject(db=6)
+            # redis里面的验证码
+            redis_image_code = redisObj.get_data(key=image_code_key)
+            # 验证用户输入的验证码和redis中的验证码
+            if redis_image_code is False or authcode.lower() != redis_image_code.lower():
+                return response.json(121)
+            else:
+                return response.json(0)
+        else:
+            return response.json(444)
+
+    def email_validate(self, key, email, authcode, response):
+        authcode.strip()
+        data_valid = DataValid()
+        if data_valid.email_validate(email) is not True:
+            return response.json(105)
+        reds = RedisObject()
+        resetCode = reds.get_data(key=email + key)
+        if resetCode is False:
+            return response.json(120)
+        if authcode != resetCode:
+            return response.json(121)
+        return response.json(0)
+
+    def phone_validate(self, key, phone, authcode, response):
+        authcode.strip()
+        data_valid = DataValid()
+        if data_valid.mobile_validate(phone) is not True:
+            return response.json(100)
+        reds = RedisObject()
+        resetCode = reds.get_data(key=phone + key)
+        if resetCode is False:
+            return response.json(120)
+        print(resetCode)
+        if authcode != resetCode:
+            return response.json(121)
+        return response.json(0)

+ 13 - 0
Model/models.py

@@ -1256,3 +1256,16 @@ class ProcessInfoLogsModel(models.Model):
         db_table = 'processinfo_logs'
         verbose_name = '过程信息表'
         verbose_name_plural = verbose_name
+
+
+class UserRegionModel(models.Model):
+    id = models.AutoField(primary_key=True)
+    user = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE, verbose_name='关联用户表')
+    region_id = models.IntegerField(default=0, verbose_name='地区id')
+    add_time = models.IntegerField(default=0, verbose_name='添加时间')
+    update_time = models.IntegerField(default=0, verbose_name='更新时间')
+
+    class Meta:
+        db_table = 'user_region'
+        verbose_name = '用户地区表'
+        verbose_name_plural = verbose_name