瀏覽代碼

iot设备证书信息保存到数据库,v1,v2,v3查询设备新增endpoint信息

lhq 4 年之前
父節點
當前提交
7a7427292d

+ 1 - 1
Controller/EquipmentManager.py

@@ -814,7 +814,7 @@ def queryInterface(request):
         dvql = dvqs[(page - 1) * line:page * line].values('id', 'userID', 'NickName', 'UID', 'View_Account',
         dvql = dvqs[(page - 1) * line:page * line].values('id', 'userID', 'NickName', 'UID', 'View_Account',
                                                           'View_Password', 'ChannelIndex', 'Type', 'isShare',
                                                           'View_Password', 'ChannelIndex', 'Type', 'isShare',
                                                           'primaryUserID', 'primaryMaster', 'data_joined', 'version', 'vodPrimaryUserID', 'vodPrimaryMaster', 'userID__userEmail',
                                                           'primaryUserID', 'primaryMaster', 'data_joined', 'version', 'vodPrimaryUserID', 'vodPrimaryMaster', 'userID__userEmail',
-                                                          'isVod', 'isExist', 'NotificationMode', 'isCameraOpenCloud')
+                                                          'isVod', 'isExist', 'NotificationMode', 'isCameraOpenCloud', 'endpoint')
         dvls = CommonService.qs_to_list(dvql)
         dvls = CommonService.qs_to_list(dvql)
         uid_list = []
         uid_list = []
         for dvl in dvls:
         for dvl in dvls:

+ 2 - 2
Controller/EquipmentManagerV2.py

@@ -148,7 +148,7 @@ class EquipmentManagerV2(View):
                        'View_Password', 'ChannelIndex', 'Type', 'isShare',
                        'View_Password', 'ChannelIndex', 'Type', 'isShare',
                        'primaryUserID', 'primaryMaster', 'data_joined', 'vodPrimaryUserID', 'vodPrimaryMaster', 'userID__userEmail',
                        'primaryUserID', 'primaryMaster', 'data_joined', 'vodPrimaryUserID', 'vodPrimaryMaster', 'userID__userEmail',
                        'version',
                        'version',
-                       'isVod', 'isExist', 'NotificationMode', 'isOpenCloud')
+                       'isVod', 'isExist', 'NotificationMode', 'isOpenCloud', 'endpoint')
             dvls = CommonService.qs_to_list(dvql)
             dvls = CommonService.qs_to_list(dvql)
             uid_list = []
             uid_list = []
             for dvl in dvls:
             for dvl in dvls:
@@ -220,7 +220,7 @@ class EquipmentManagerV2(View):
                            'View_Password', 'ChannelIndex', 'Type', 'isShare',
                            'View_Password', 'ChannelIndex', 'Type', 'isShare',
                            'primaryUserID', 'primaryMaster', 'data_joined', 'vodPrimaryUserID', 'vodPrimaryMaster',
                            'primaryUserID', 'primaryMaster', 'data_joined', 'vodPrimaryUserID', 'vodPrimaryMaster',
                            'userID__userEmail',
                            'userID__userEmail',
-                           'version', 'isVod', 'isExist', 'NotificationMode', 'isCameraOpenCloud')
+                           'version', 'isVod', 'isExist', 'NotificationMode', 'isCameraOpenCloud', 'endpoint')
         dvls = CommonService.qs_to_list(dvql)
         dvls = CommonService.qs_to_list(dvql)
         uid_list = []
         uid_list = []
         for dvl in dvls:
         for dvl in dvls:

+ 2 - 1
Controller/EquipmentManagerV3.py

@@ -304,7 +304,8 @@ class EquipmentManagerV3(View):
                                'View_Password', 'ChannelIndex', 'Type', 'isShare',
                                'View_Password', 'ChannelIndex', 'Type', 'isShare',
                                'primaryUserID', 'primaryMaster', 'data_joined', 'vodPrimaryUserID', 'vodPrimaryMaster',
                                'primaryUserID', 'primaryMaster', 'data_joined', 'vodPrimaryUserID', 'vodPrimaryMaster',
                                'userID__userEmail',
                                'userID__userEmail',
-                               'version', 'isVod', 'isExist', 'NotificationMode', 'isCameraOpenCloud')
+                               'version', 'isVod', 'isExist', 'NotificationMode', 'isCameraOpenCloud',
+                               'endpoint')
             dvls = CommonService.qs_to_list(dvql)
             dvls = CommonService.qs_to_list(dvql)
             uid_list = []
             uid_list = []
             for dvl in dvls:
             for dvl in dvls:

+ 38 - 25
Controller/IotCoreController.py

@@ -6,7 +6,7 @@ import time
 import boto3
 import boto3
 from django.views import View
 from django.views import View
 
 
-from Model.models import Device_User, Device_Info, RegionCountryModel
+from Model.models import Device_User, Device_Info, RegionCountryModel, iotdeviceInfoModel
 from Object.IOTCore.IotObject import ChinaIOTClient, AsiaIOTClient, EuropeIOTClient, AmericaIOTClient
 from Object.IOTCore.IotObject import ChinaIOTClient, AsiaIOTClient, EuropeIOTClient, AmericaIOTClient
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
@@ -37,7 +37,7 @@ class IotCoreView(View):
         else:
         else:
             return response.json(404)
             return response.json(404)
 
 
-    #即时预置注册  :已放弃
+    # 即时预置注册  :已放弃
     def create_provisioning_claim(self, request_dict, response):
     def create_provisioning_claim(self, request_dict, response):
         uid = request_dict.get('uid', None)
         uid = request_dict.get('uid', None)
         token = request_dict.get('token', None)
         token = request_dict.get('token', None)
@@ -50,7 +50,7 @@ class IotCoreView(View):
             now_time = int(time.time())
             now_time = int(time.time())
             distance = now_time - time_stamp
             distance = now_time - time_stamp
 
 
-            #if token != time_stamp and distance > 600: 暂时去掉延时
+            # if token != time_stamp and distance > 600: 暂时去掉延时
             if token != time_stamp:
             if token != time_stamp:
                 return response.json(404)
                 return response.json(404)
 
 
@@ -94,32 +94,45 @@ class IotCoreView(View):
             distance = now_time - time_stamp
             distance = now_time - time_stamp
 
 
             # if token != time_stamp and distance > 600: 暂时去掉延时
             # if token != time_stamp and distance > 600: 暂时去掉延时
-            #if token != time_stamp or uid != uid_code or distance > 600 :
-                #return response.json(404)
+            # if token != time_stamp or uid != uid_code or distance > 600 :
+            # return response.json(404)
 
 
             region_country_qs = Device_Info.objects.filter(UID=uid).values('userID__region_country')
             region_country_qs = Device_Info.objects.filter(UID=uid).values('userID__region_country')
             if not region_country_qs.exists():
             if not region_country_qs.exists():
                 return response.json(173)
                 return response.json(173)
 
 
-            region_country_qs = RegionCountryModel.objects.filter(
-                number=region_country_qs[0]['userID__region_country'])
-            if region_country_qs.exists():
-                user_region = region_country_qs[0]
-
-                if user_region.region_id == 1:
-                    iotClient = ChinaIOTClient()
-
-                elif user_region.region_id == 2:
-                    iotClient = AsiaIOTClient()
-
-                elif user_region.region_id == 3:
-                    iotClient = EuropeIOTClient()
-
-                else:
-                    iotClient = AmericaIOTClient()
-
-                res = iotClient.create_keys_and_certificate(uid)
-
-                return response.json(0, {'res': res})
+            uid_list = []
+            for i in iotdeviceInfoModel.objects.values('uid'):
+                # 把数据表里的uid加到uid_list
+                uid_list.append(i['uid'])
+            # 判断设备是否已注册证书
+            if uid not in uid_list:
+                region_country_qs = RegionCountryModel.objects.filter(
+                    number=region_country_qs[0]['userID__region_country'])
+                if region_country_qs.exists():
+                    user_region = region_country_qs[0]
+
+                    if user_region.region_id == 1:
+                        iotClient = ChinaIOTClient()
+
+                    elif user_region.region_id == 2:
+                        iotClient = AsiaIOTClient()
+
+                    elif user_region.region_id == 3:
+                        iotClient = EuropeIOTClient()
+
+                    else:
+                        iotClient = AmericaIOTClient()
+                    res = iotClient.create_keys_and_certificate(uid)
+                    Device_Info.objects.filter(UID=uid).update(endpoint=res[0]['endpoint'])
+                    iotdeviceInfoModel.objects.create(uid=uid, certificateId=res[0]['certificateId'],
+                                                      certificatePem=res[0]['certificatePem'],
+                                                      publicKey=res[0]['publicKey'],
+                                                      privateKey=res[0]['privateKey'],
+                                                      Thingname=res[1]['ThingName'])
+                    return response.json(0, {'res': res})
+            else:
+                # print('此设备已注册证书')
+                return response.json(10042)
         else:
         else:
             return response.json(444)
             return response.json(444)

+ 16 - 0
Model/models.py

@@ -257,6 +257,7 @@ class Device_Info(models.Model):
     isVod = models.SmallIntegerField(blank=True, default=0, verbose_name='是否支持云存')  # 是否支持云存设备
     isVod = models.SmallIntegerField(blank=True, default=0, verbose_name='是否支持云存')  # 是否支持云存设备
     isExist = models.SmallIntegerField(blank=True, default=1, verbose_name='是否被删除')  # 是否被删除了(需主用户交互) 1存在,0不存在,2设备被重置
     isExist = models.SmallIntegerField(blank=True, default=1, verbose_name='是否被删除')  # 是否被删除了(需主用户交互) 1存在,0不存在,2设备被重置
     isCameraOpenCloud =  models.SmallIntegerField(blank=True, default=1, verbose_name='是否开启云存')  # 0:不开启  1:开启
     isCameraOpenCloud =  models.SmallIntegerField(blank=True, default=1, verbose_name='是否开启云存')  # 0:不开启  1:开启
+    endpoint = models.CharField(blank=True, max_length=256, default='', verbose_name=u'iot端点')
     ###
     ###
     REQUIRED_FIELDS = []
     REQUIRED_FIELDS = []
 
 
@@ -1288,4 +1289,19 @@ class EquipmentLogModel(models.Model):
     class Meta:
     class Meta:
         db_table = 'equipment_log'
         db_table = 'equipment_log'
         verbose_name = '设备日志表'
         verbose_name = '设备日志表'
+        verbose_name_plural = verbose_name
+
+
+class iotdeviceInfoModel(models.Model):
+    id = models.AutoField(primary_key=True)
+    uid = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备uid')
+    certificateId = models.CharField(blank=True, max_length=256, default='', verbose_name=u'证书id')
+    certificatePem = models.TextField(blank=True, default='', verbose_name=u'证书项目')
+    publicKey = models.TextField(blank=True, default='', verbose_name=u'公有密钥')
+    privateKey = models.TextField(blank=True, default='', verbose_name=u'私有密钥')
+    Thingname = models.CharField(blank=True, max_length=256, default='', verbose_name=u'IoT Thing Name')
+
+    class Meta:
+        db_table = 'iot_deviceInfo'
+        verbose_name = 'iot设备信息表'
         verbose_name_plural = verbose_name
         verbose_name_plural = verbose_name

+ 4 - 4
Object/IOTCore/IotObject.py

@@ -105,7 +105,7 @@ class ChinaIOTClient(IOTObject):
             templateBody=templateBody,
             templateBody=templateBody,
             parameters=parameters
             parameters=parameters
         )
         )
-        return res
+        return res, parameters
 
 
 
 
 class AmericaIOTClient(IOTObject):
 class AmericaIOTClient(IOTObject):
@@ -192,7 +192,7 @@ class AmericaIOTClient(IOTObject):
             templateBody=templateBody,
             templateBody=templateBody,
             parameters=parameters
             parameters=parameters
         )
         )
-        return res
+        return res, parameters
 
 
 
 
 class AsiaIOTClient(IOTObject):
 class AsiaIOTClient(IOTObject):
@@ -278,7 +278,7 @@ class AsiaIOTClient(IOTObject):
             templateBody=templateBody,
             templateBody=templateBody,
             parameters=parameters
             parameters=parameters
         )
         )
-        return res
+        return res, parameters
 
 
 
 
 class EuropeIOTClient(IOTObject):
 class EuropeIOTClient(IOTObject):
@@ -364,4 +364,4 @@ class EuropeIOTClient(IOTObject):
             templateBody=templateBody,
             templateBody=templateBody,
             parameters=parameters
             parameters=parameters
         )
         )
-        return res
+        return res, parameters

+ 4 - 2
Object/ResponseObject.py

@@ -94,7 +94,8 @@ class ResponseObject(object):
             10038: 'Non device primary user cannot transfer packages',
             10038: 'Non device primary user cannot transfer packages',
             10039: 'Activation code has been used',
             10039: 'Activation code has been used',
             10040: 'Invalid activation code',
             10040: 'Invalid activation code',
-            10041: 'This device has purchased a domestic cloud storage package, and cannot purchase a foreign cloud storage package'
+            10041: 'This device has purchased a domestic cloud storage package, and cannot purchase a foreign cloud storage package',
+            10042: 'The device has registered a certificate'
         }
         }
         data_cn = {
         data_cn = {
             0: '成功',
             0: '成功',
@@ -183,7 +184,8 @@ class ResponseObject(object):
             10038: '非设备主用户无法转移套餐',
             10038: '非设备主用户无法转移套餐',
             10039: '激活码已被使用过',
             10039: '激活码已被使用过',
             10040: '无效激活码',
             10040: '无效激活码',
-            10041: '此设备已购买过国内云存套餐,无法购买国外云存套餐'
+            10041: '此设备已购买过国内云存套餐,无法购买国外云存套餐',
+            10042: '此设备已注册证书'
         }
         }
         if self.lang == 'cn':
         if self.lang == 'cn':
             msg = data_cn
             msg = data_cn