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

修改获取iot终端节点的逻辑;对验证码加密

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

+ 19 - 5
Ansjer/config.py

@@ -34,11 +34,6 @@ AWS_SES_ACCESS_SECRET = 'oYJsF4h95ITWf3bxpPf5uUTvULPrq8DhRaQQzTjf'
 AWS_SES_ACCESS_REGION = 'us-east-1'
 AWS_SES_ACCESS_REGION_WEST = 'us-west-1'
 
-# Iot Core
-AWS_IOT_SES_ACCESS_ID = 'AKIA2E67UIMD62VUBV5I'
-AWS_IOT_SES_ACCESS_SECRET = '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'
-AWS_IOT_SES_ACCESS_REGION = 'us-east-1'
-
 AWS_BUCKET = 'ansjertest'
 # 设定离线时间为5分钟
 OFF_LINE_TIME_DELTA = 5
@@ -170,4 +165,23 @@ APP_FREQUENT = {
     5: '一个月',
     6: '一个月以上',
 
+}
+
+# Iot Core国外
+AWS_IOT_SES_ACCESS_FOREIGN_ID = 'AKIA2E67UIMD62VUBV5I'
+AWS_IOT_SES_ACCESS_FOREIGN_SECRET = '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'
+AWS_IOT_SES_ACCESS_FOREIGN_REGION_AMERICA = 'us-east-1'
+AWS_IOT_SES_ACCESS_FOREIGN_REGION_ASIA = 'ap-southeast-1'
+AWS_IOT_SES_ACCESS_FOREIGN_REGION_EUROPE = 'eu-west-1'
+
+# Iot Core国内
+AWS_IOT_SES_ACCESS_CHINA_ID = 'AKIA2MMWBR4DUUYPCFNJ'
+AWS_IOT_SES_ACCESS_CHINA_SECRET = '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'
+AWS_IOT_SES_ACCESS_CHINA_REGION = 'cn-northwest-1'
+
+IOT_HOST = {
+    1: 'a250bbr0p9u7as-ats.iot.cn-northwest-1.amazonaws.com.cn',
+    2: 'a2rqy12o004ad8-ats.iot.ap-southeast-1.amazonaws.com',
+    3: 'a2rqy12o004ad8-ats.iot.eu-west-1.amazonaws.com',
+    4: 'a2rqy12o004ad8-ats.iot.us-east-1.amazonaws.com'
 }

+ 22 - 20
Controller/IotCoreController.py

@@ -3,8 +3,8 @@
 import boto3
 from django.views import View
 
-from Ansjer.config import AWS_IOT_SES_ACCESS_REGION, AWS_IOT_SES_ACCESS_ID, \
-    AWS_IOT_SES_ACCESS_SECRET
+from Model.models import Device_User, UserRegionModel
+from Object.IOTCore.IotObject import ChinaIOTClient, AsiaIOTClient, EuropeIOTClient, AmericaIOTClient
 from Object.ResponseObject import ResponseObject
 
 
@@ -32,23 +32,25 @@ class IotCoreView(View):
             return response.json(404)
 
     def create_provisioning_claim(self, request_dict, response):
-
-        country = request_dict.get('country', None)
-        state = request_dict.get('state', None)
-
-        if country and state:
-
-            client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_REGION, aws_access_key_id=AWS_IOT_SES_ACCESS_ID,
-                                  aws_secret_access_key=AWS_IOT_SES_ACCESS_SECRET)
-            result = client.create_provisioning_claim(templateName='Ansjer_Iot_Queue')
-
-            res = {
-                'certificateId': result['certificateId'],
-                'certificatePem': result['certificatePem'],
-                'publicKey': result['keyPair']['PublicKey'],
-                'privateKey': result['keyPair']['PrivateKey'],
-                'endpoint': 'a2rqy12o004ad8-ats.iot.us-east-1.amazonaws.com'
-            }
-            return response.json(0, {'res': res})
+        uid = request_dict.get('uid', None)
+
+        if uid:
+
+            user_region_qs = UserRegionModel.objects.filter(user__device_info__UID=uid)
+            if user_region_qs.exists():
+                user_region = user_region_qs[0]
+
+                if user_region.region_id == 1:
+                    iotClient = AmericaIOTClient()
+                    return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
+                elif user_region.region_id == 2:
+                    iotClient = AsiaIOTClient()
+                    return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
+                elif user_region.region_id == 3:
+                    iotClient = EuropeIOTClient()
+                    return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
+                else:
+                    iotClient = AmericaIOTClient()
+                    return response.json(0, {'res': iotClient.create_provisioning_claim('Ansjer_Iot_Queue')})
         else:
             return response.json(444)

+ 17 - 3
Controller/VerifyCodeController.py

@@ -6,6 +6,7 @@ from Controller.CheckUserData import DataValid
 from Object.RedisObject import RedisObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
+from Service.CommonService import CommonService
 
 
 class VerifyCodeView(View):
@@ -22,12 +23,12 @@ class VerifyCodeView(View):
         return self.validate(request_dict, operation)
 
     def validate(self, request_dict, operation):
-        # token = TokenObject(request_dict.get('token', None))
+        token = TokenObject(request_dict.get('token', None))
 
         response = ResponseObject()
 
-        # if token.code != 0:
-        #     return response.json(token.code)
+        if token.code != 0:
+            return response.json(token.code)
 
         if operation == 'forget':
             return self.verify_forget(request_dict, response)
@@ -43,6 +44,12 @@ class VerifyCodeView(View):
         phone = request_dict.get('phone', None)
         authcode = request_dict.get('authcode', None)
         key = '_forgetPwdResetCode'
+
+        if authcode is None:
+            return response.json(444)
+
+        authcode = CommonService.decode_data(authcode)
+
         if email is not None:
             email = email.strip()
             return self.email_validate(key, email, authcode, response)
@@ -57,6 +64,11 @@ class VerifyCodeView(View):
         phone = request_dict.get('phone', None)
         authcode = request_dict.get('authcode', None)
         key = '_identifyingCode'
+        if authcode is None:
+            return response.json(444)
+
+        authcode = CommonService.decode_data(authcode)
+
         if email is not None:
             email = email.strip()
             return self.email_validate(key, email, authcode, response)
@@ -71,6 +83,8 @@ class VerifyCodeView(View):
         authcode = request_dict.get('authcode', None)
 
         if imageCodeId and authcode:
+
+            authcode = CommonService.decode_data(authcode)
             image_code_key = 'image_code_' + imageCodeId
             redisObj = RedisObject(db=6)
             # redis里面的验证码

+ 102 - 0
Object/IOTCore/IotObject.py

@@ -0,0 +1,102 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+from abc import ABCMeta,abstractmethod
+
+import boto3
+
+from Ansjer.config import AWS_IOT_SES_ACCESS_CHINA_REGION, AWS_IOT_SES_ACCESS_CHINA_ID, AWS_IOT_SES_ACCESS_CHINA_SECRET, \
+    AWS_IOT_SES_ACCESS_FOREIGN_REGION_AMERICA, AWS_IOT_SES_ACCESS_FOREIGN_ID, AWS_IOT_SES_ACCESS_FOREIGN_SECRET, \
+    AWS_IOT_SES_ACCESS_FOREIGN_REGION_EUROPE, AWS_IOT_SES_ACCESS_FOREIGN_REGION_ASIA
+
+
+class IOTObject(metaclass=ABCMeta):
+
+    @abstractmethod
+    def create_provisioning_claim(self, templateName):
+        pass
+
+
+class ChinaIOTClient(IOTObject):
+
+    def __init__(self):
+        self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_CHINA_REGION,
+                                   aws_access_key_id=AWS_IOT_SES_ACCESS_CHINA_ID,
+                                   aws_secret_access_key=AWS_IOT_SES_ACCESS_CHINA_SECRET)
+
+    def create_provisioning_claim(self, templateName):
+
+        result = self.client.create_provisioning_claim(templateName=templateName)
+
+        res = {
+            'certificateId': result['certificateId'],
+            'certificatePem': result['certificatePem'],
+            'publicKey': result['keyPair']['PublicKey'],
+            'privateKey': result['keyPair']['PrivateKey'],
+            'endpoint': 'a250bbr0p9u7as-ats.iot.cn-northwest-1.amazonaws.com.cn'
+        }
+
+        return res
+
+
+class AmericaIOTClient(IOTObject):
+
+    def __init__(self):
+        self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_FOREIGN_REGION_AMERICA,
+                                   aws_access_key_id=AWS_IOT_SES_ACCESS_FOREIGN_ID,
+                                   aws_secret_access_key=AWS_IOT_SES_ACCESS_FOREIGN_SECRET)
+
+    def create_provisioning_claim(self, templateName):
+
+        result = self.client.create_provisioning_claim(templateName=templateName)
+
+        res = {
+            'certificateId': result['certificateId'],
+            'certificatePem': result['certificatePem'],
+            'publicKey': result['keyPair']['PublicKey'],
+            'privateKey': result['keyPair']['PrivateKey'],
+            'endpoint': 'a2rqy12o004ad8-ats.iot.us-east-1.amazonaws.com'
+        }
+
+        return res
+
+
+class AsiaIOTClient(IOTObject):
+
+    def __init__(self):
+        self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_FOREIGN_REGION_ASIA,
+                                   aws_access_key_id=AWS_IOT_SES_ACCESS_FOREIGN_ID,
+                                   aws_secret_access_key=AWS_IOT_SES_ACCESS_FOREIGN_SECRET)
+
+    def create_provisioning_claim(self, templateName):
+        result = self.client.create_provisioning_claim(templateName=templateName)
+
+        res = {
+            'certificateId': result['certificateId'],
+            'certificatePem': result['certificatePem'],
+            'publicKey': result['keyPair']['PublicKey'],
+            'privateKey': result['keyPair']['PrivateKey'],
+            'endpoint': 'a2rqy12o004ad8-ats.iot.ap-southeast-1.amazonaws.com'
+        }
+
+        return res
+
+
+class EuropeIOTClient(IOTObject):
+
+    def __init__(self):
+        self.client = boto3.client('iot', region_name=AWS_IOT_SES_ACCESS_FOREIGN_REGION_EUROPE,
+                                   aws_access_key_id=AWS_IOT_SES_ACCESS_FOREIGN_ID,
+                                   aws_secret_access_key=AWS_IOT_SES_ACCESS_FOREIGN_SECRET)
+
+    def create_provisioning_claim(self, templateName):
+        result = self.client.create_provisioning_claim(templateName=templateName)
+
+        res = {
+            'certificateId': result['certificateId'],
+            'certificatePem': result['certificatePem'],
+            'publicKey': result['keyPair']['PublicKey'],
+            'privateKey': result['keyPair']['PrivateKey'],
+            'endpoint': 'a2rqy12o004ad8-ats.iot.eu-west-1.amazonaws.com'
+        }
+
+        return res