Przeglądaj źródła

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

lhq 4 lat temu
rodzic
commit
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',
                                                           'View_Password', 'ChannelIndex', 'Type', 'isShare',
                                                           'primaryUserID', 'primaryMaster', 'data_joined', 'version', 'vodPrimaryUserID', 'vodPrimaryMaster', 'userID__userEmail',
-                                                          'isVod', 'isExist', 'NotificationMode', 'isCameraOpenCloud')
+                                                          'isVod', 'isExist', 'NotificationMode', 'isCameraOpenCloud', 'endpoint')
         dvls = CommonService.qs_to_list(dvql)
         uid_list = []
         for dvl in dvls:

+ 2 - 2
Controller/EquipmentManagerV2.py

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

+ 2 - 1
Controller/EquipmentManagerV3.py

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

+ 38 - 25
Controller/IotCoreController.py

@@ -6,7 +6,7 @@ import time
 import boto3
 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.ResponseObject import ResponseObject
 from Service.CommonService import CommonService
@@ -37,7 +37,7 @@ class IotCoreView(View):
         else:
             return response.json(404)
 
-    #即时预置注册  :已放弃
+    # 即时预置注册  :已放弃
     def create_provisioning_claim(self, request_dict, response):
         uid = request_dict.get('uid', None)
         token = request_dict.get('token', None)
@@ -50,7 +50,7 @@ class IotCoreView(View):
             now_time = int(time.time())
             distance = now_time - time_stamp
 
-            #if token != time_stamp and distance > 600: 暂时去掉延时
+            # if token != time_stamp and distance > 600: 暂时去掉延时
             if token != time_stamp:
                 return response.json(404)
 
@@ -94,32 +94,45 @@ class IotCoreView(View):
             distance = now_time - time_stamp
 
             # 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')
             if not region_country_qs.exists():
                 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:
             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='是否支持云存')  # 是否支持云存设备
     isExist = models.SmallIntegerField(blank=True, default=1, verbose_name='是否被删除')  # 是否被删除了(需主用户交互) 1存在,0不存在,2设备被重置
     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 = []
 
@@ -1288,4 +1289,19 @@ class EquipmentLogModel(models.Model):
     class Meta:
         db_table = 'equipment_log'
         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

+ 4 - 4
Object/IOTCore/IotObject.py

@@ -105,7 +105,7 @@ class ChinaIOTClient(IOTObject):
             templateBody=templateBody,
             parameters=parameters
         )
-        return res
+        return res, parameters
 
 
 class AmericaIOTClient(IOTObject):
@@ -192,7 +192,7 @@ class AmericaIOTClient(IOTObject):
             templateBody=templateBody,
             parameters=parameters
         )
-        return res
+        return res, parameters
 
 
 class AsiaIOTClient(IOTObject):
@@ -278,7 +278,7 @@ class AsiaIOTClient(IOTObject):
             templateBody=templateBody,
             parameters=parameters
         )
-        return res
+        return res, parameters
 
 
 class EuropeIOTClient(IOTObject):
@@ -364,4 +364,4 @@ class EuropeIOTClient(IOTObject):
             templateBody=templateBody,
             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',
             10039: 'Activation code has been used',
             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 = {
             0: '成功',
@@ -183,7 +184,8 @@ class ResponseObject(object):
             10038: '非设备主用户无法转移套餐',
             10039: '激活码已被使用过',
             10040: '无效激活码',
-            10041: '此设备已购买过国内云存套餐,无法购买国外云存套餐'
+            10041: '此设备已购买过国内云存套餐,无法购买国外云存套餐',
+            10042: '此设备已注册证书'
         }
         if self.lang == 'cn':
             msg = data_cn