Selaa lähdekoodia

Merge remote-tracking branch 'remotes/origin/dev'

tanghongbin 5 vuotta sitten
vanhempi
commit
00b8bcff02

+ 3 - 0
Ansjer/urls.py

@@ -227,6 +227,9 @@ urlpatterns = [
     url(r'^faq/image/(?P<filePath>.*)$', FAQController.getFAQImage.as_view()),
     url(r'^faq/(?P<operation>.*)$', FAQController.FAQView.as_view()),
 
+    # 苹果登录
+    url(r'^ios/authsign', UserController.AppleAuthLogin.as_view()),
+
     # app 设备消息模板
     # 路由加参数参考
     # url(r'^(?P<path>.*)/(?P<UID>.*)/lls$', Test.Test.as_view(), name=u'gg'),

+ 2 - 2
Controller/DetectController.py

@@ -301,8 +301,8 @@ class DetectControllerView(View):
         if dvqs.exists():
             uid_set_qs = UidSetModel.objects. \
                 filter(uid=uid, uidpushmodel__userID_id=userID)
-            redisObj = RedisObject(db=8)
-            redisObj.del_data(key='uid_qs_' + userID)
+            # redisObj = RedisObject(db=8)
+            # redisObj.del_data(key='uid_qs_' + userID)
             if uid_set_qs.exists():
                 uid_set_qs.update(interval=int(interval))
             else:

+ 2 - 2
Controller/DeviceManage.py

@@ -102,8 +102,8 @@ class DeviceManage(View):
 
     def delete(self, request_dict, userID, response):
         own_perm = ModelService.check_perm(userID=userID, permID=10)
-        redisObj = RedisObject(db=8)
-        redisObj.del_data(key='uid_qs_' + userID)
+        # redisObj = RedisObject(db=8)
+        # redisObj.del_data(key='uid_qs_' + userID)
         if own_perm is True:
             id = request_dict.get('id', None)
             if id:

+ 4 - 4
Controller/DeviceShare.py

@@ -167,8 +167,8 @@ class DeviceShareView(View):
                     sharerDvqs.primaryMaster = primaryMaster
                     sharerDvqs.data_joined = None
                     sharerDvqs.save()
-                    redisObj = RedisObject(db=8)
-                    redisObj.del_data(key='uid_qs_' + userID)
+                    # redisObj = RedisObject(db=8)
+                    # redisObj.del_data(key='uid_qs_' + userID)
                 except Exception as e:
                     return response.json(10, repr(e))
                 else:
@@ -227,8 +227,8 @@ class DeviceShareView(View):
         id = request_dict.get('id', None)
         if id:
             try:
-                redisObj = RedisObject(db=8)
-                redisObj.del_data(key='uid_qs_' + userID)
+                # redisObj = RedisObject(db=8)
+                # redisObj.del_data(key='uid_qs_' + userID)
                 Device_Info.objects.filter(id=id, primaryUserID=userID).update(isExist=0)
             except Exception as e:
                 return response.json(10, repr(e))

+ 23 - 23
Controller/EquipmentManager.py

@@ -86,8 +86,8 @@ def addNewUserEquipmentInterface(request):
         if dValid:
             return response.json(174)
         else:
-            redisObj = RedisObject(db=8)
-            redisObj.del_data(key='uid_qs_' + userID)
+            # redisObj = RedisObject(db=8)
+            # redisObj.del_data(key='uid_qs_' + userID)
             UID = deviceData.get('UID', '')
             re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
             if re_uid.match(UID):
@@ -152,8 +152,8 @@ def delUserEquipmentInterface(request):
     # 主用户删除设备全部删除
     try:
         dv_qs = Device_Info.objects.filter(userID_id=userID, id=id)
-        redisObj = RedisObject(db=8)
-        redisObj.del_data(key='uid_qs_' + userID)
+        # redisObj = RedisObject(db=8)
+        # redisObj.del_data(key='uid_qs_' + userID)
         if dv_qs.exists():
             uid = dv_qs[0].UID
             print('删除')
@@ -225,8 +225,8 @@ def modifyUserEquipmentInterface(request):
                 }
                 UidSetModel.objects.create(**uid_set_create_dict)
             Device_Info.objects.filter(UID=uid).update(NickName=nickname)
-            redisObj = RedisObject(db=8)
-            redisObj.del_data(key='uid_qs_' + userID)
+            # redisObj = RedisObject(db=8)
+            # redisObj.del_data(key='uid_qs_' + userID)
         return response.json(0, res)
 
 
@@ -379,8 +379,8 @@ def addInterface(request):
                                              NickName=NickName, View_Account=View_Account,
                                              View_Password=View_Password, Type=Type, ChannelIndex=ChannelIndex)
                     userDevice.save()
-                    redisObj = RedisObject(db=8)
-                    redisObj.del_data(key='uid_qs_' + userID)
+                    # redisObj = RedisObject(db=8)
+                    # redisObj.del_data(key='uid_qs_' + userID)
                 except Exception as e:
                     return response.json(10, repr(e))
                 else:
@@ -494,8 +494,8 @@ def admin_addInterface(request):
         else:
             UID = deviceData.get('UID', '')
             re_uid = re.compile(r'^[A-Za-z0-9]{20}$')
-            redisObj = RedisObject(db=8)
-            redisObj.del_data(key='uid_qs_' + userID)
+            # redisObj = RedisObject(db=8)
+            # redisObj.del_data(key='uid_qs_' + userID)
             if re_uid.match(UID):
                 userDevice = Device_Info(id=CommonService.getUserID(getUser=False), userID_id=userID,
                                          **deviceData)
@@ -568,8 +568,8 @@ def admin_modifyInterface(request):
 
     deviceData = json.loads(deviceContent)
     print(deviceData['UID'])
-    redisObj = RedisObject(db=8)
-    redisObj.del_data(key='uid_qs_' + userID)
+    # redisObj = RedisObject(db=8)
+    # redisObj.del_data(key='uid_qs_' + userID)
     dValid = Device_Info.objects.filter(userID_id=userID, UID=deviceData['UID'])
     if dValid.exists():
         dValid_dict = CommonService.qs_to_dict(dValid)
@@ -662,8 +662,8 @@ def deleteInterface(request):
                 # 异步删除推送消息
             asy = threading.Thread(target=ModelService.del_eq_info, args=(userID, uid))
             asy.start()
-            redisObj = RedisObject(db=8)
-            redisObj.del_data(key='uid_qs_' + userID)
+            # redisObj = RedisObject(db=8)
+            # redisObj.del_data(key='uid_qs_' + userID)
         else:
             return response.json(14)
     except Exception as e:
@@ -918,8 +918,8 @@ def update_uid_set(request):
         userID = tko.userID
         nowTime = int(time.time())
         dvqs = Device_Info.objects.filter(userID_id=userID)
-        redisObj = RedisObject(db=8)
-        redisObj.del_data(key='uid_qs_' + userID)
+        # redisObj = RedisObject(db=8)
+        # redisObj.del_data(key='uid_qs_' + userID)
         if dvqs.exists():
             us_qs = UidSetModel.objects.filter(uid=uid)
             if us_qs.exists():
@@ -973,13 +973,13 @@ def update_device_shadow(request):
             di_qs = Device_Info.objects.filter(UID=uid)
             di_qs.update(isExist=2)
             # 清除redis缓存
-            data = di_qs.values()
-            redisObj = RedisObject(db=8)
-            for di in data:
-                key = 'uid_qs_' + di['userID_id']
-                redis_value = redisObj.get_data(key=key)
-                if redis_value is not False:
-                    redisObj.del_data(key)
+            # data = di_qs.values()
+            # redisObj = RedisObject(db=8)
+            # for di in data:
+            #     key = 'uid_qs_' + di['userID_id']
+            #     redis_value = redisObj.get_data(key=key)
+            #     if redis_value is not False:
+            #         redisObj.del_data(key)
 
         ucode = request_dict.get('ucode', None)
         version = request_dict.get('version', None)

+ 3 - 0
Controller/EquipmentManagerV2.py

@@ -123,6 +123,9 @@ class EquipmentManagerV2(View):
         page = request_dict.get('page', None)
         line = request_dict.get('line', None)
         NickName = request_dict.get('NickName', None)
+        if not token or not page or not line:
+            return response.json(444)
+
         page = int(page)
         line = int(line)
         uid = request_dict.get('uid', None)

+ 124 - 147
Controller/EquipmentManagerV3.py

@@ -96,8 +96,8 @@ class EquipmentManagerV3(View):
                                                  NickName=NickName, View_Account=View_Account,
                                                  View_Password=View_Password, Type=Type, ChannelIndex=ChannelIndex)
                         userDevice.save()
-                        redisObj = RedisObject(db=8)
-                        redisObj.del_data(key='uid_qs_' + userID)
+                        # redisObj = RedisObject(db=8)
+                        # redisObj.del_data(key='uid_qs_' + userID)
                     except Exception as e:
                         return response.json(10, repr(e))
                     else:
@@ -163,14 +163,15 @@ class EquipmentManagerV3(View):
                         'uid': uid,
                         'addTime': nowTime,
                         'updTime': nowTime,
-                        'ip': CommonService.get_ip_address(request),
+                        # 'ip': CommonService.get_ip_address(request),
                         'channel': ChannelIndex,
                         'nickname': nickname,
                     }
                     UidSetModel.objects.create(**uid_set_create_dict)
-                Device_Info.objects.filter(UID=uid).update(NickName=nickname)
-            redisObj = RedisObject(db=8)
-            redisObj.del_data(key='uid_qs_' + userID)
+                di_qs = Device_Info.objects.filter(UID=uid)
+                di_qs.update(NickName=nickname)
+            # redisObj = RedisObject(db=8)
+            # redisObj.del_data(key='uid_qs_' + userID)
             return response.json(0, res)
 
     # 新查询设备字段
@@ -179,6 +180,9 @@ class EquipmentManagerV3(View):
         page = request_dict.get('page', None)
         line = request_dict.get('line', None)
         NickName = request_dict.get('NickName', None)
+        if not token or not page or not line:
+            return response.json(444)
+
         page = int(page)
         line = int(line)
         uid = request_dict.get('uid', None)
@@ -187,149 +191,122 @@ class EquipmentManagerV3(View):
         if page <= 0:
             return response.json(0)
         if tko.code == 0:
-            redisObj = RedisObject(db=8)
-            redis_value = redisObj.get_data(key='uid_qs_'+userID)
-            result = []
-            if redis_value == False:
-                # print('缓存不存在就开始添加到缓存')
-                userID = tko.userID
-                dvqs = Device_Info.objects.filter(userID_id=userID)
-                # # 过滤已重置的设备
-                dvqs = dvqs.filter(~Q(isExist=2))
-                dvql = dvqs.values('id', 'userID', 'NickName', 'UID', 'View_Account',
-                           'View_Password', 'ChannelIndex', 'Type', 'isShare',
-                           'primaryUserID', 'primaryMaster', 'data_joined',
-                           'version', 'isVod', 'isExist', 'NotificationMode')
-                dvls = CommonService.qs_to_list(dvql)
-                uid_list = []
-                for dvl in dvls:
-                    uid_list.append(dvl['UID'])
-                ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
-                    values('bucket__content', 'status', 'channel', 'endTime', 'uid')
-                upqs = UID_Preview.objects.filter(uid__in=uid_list).order_by('channel').values('id', 'uid', 'channel')
-                auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
-                bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
-                nowTime = int(time.time())
-                data = []
-                # 设备拓展信息表
-                us_qs = UidSetModel.objects.filter(uid__in=uid_list).values('id', 'uid', 'version', 'nickname', 'ucode',
-                                                                            'detect_status', 'detect_group', 'detect_interval',
-                                                                            'region_alexa', 'is_alexa', 'deviceModel',
-                                                                            'TimeZone', 'TimeStatus', 'SpaceUsable',
-                                                                            'SpaceSum', 'MirrorType', 'RecordType',
-                                                                            'OutdoorModel', 'WIFIName', 'isDetector', 'DetectorRank')
-                uv_dict = {}
-                for us in us_qs:
-                    uv_dict[us['uid']] = {
-                        'version': us['version'],
-                        'nickname': us['nickname'],
-                        'ucode': us['ucode'],
-                        'detect_interval': us['detect_interval'],
-                        'detect_group': us['detect_group'],
-                        'detect_status': us['detect_status'],
-                        'region_alexa': us['region_alexa'],
-                        'is_alexa': us['is_alexa'],
-                        'deviceModel': us['deviceModel'],
-                        'TimeZone': us['TimeZone'],
-                        'TimeStatus': us['TimeStatus'],
-                        'SpaceUsable': us['SpaceUsable'],
-                        'SpaceSum': us['SpaceSum'],
-                        'MirrorType': us['MirrorType'],
-                        'RecordType': us['RecordType'],
-                        'OutdoorModel': us['OutdoorModel'],
-                        'WIFIName': us['WIFIName'],
-                        'isDetector': us['isDetector'],
-                        'DetectorRank': us['DetectorRank']
+            userID = tko.userID
+            dvqs = Device_Info.objects.filter(userID_id=userID)
+            # # 过滤已重置的设备
+            dvqs = dvqs.filter(~Q(isExist=2))
+            dvql = dvqs.values('id', 'userID', 'NickName', 'UID', 'View_Account',
+                               'View_Password', 'ChannelIndex', 'Type', 'isShare',
+                               'primaryUserID', 'primaryMaster', 'data_joined',
+                               'version', 'isVod', 'isExist', 'NotificationMode')
+            dvls = CommonService.qs_to_list(dvql)
+            uid_list = []
+            for dvl in dvls:
+                uid_list.append(dvl['UID'])
+            ubqs = UID_Bucket.objects.filter(uid__in=uid_list). \
+                values('bucket__content', 'status', 'channel', 'endTime', 'uid')
+            upqs = UID_Preview.objects.filter(uid__in=uid_list).order_by('channel').values('id', 'uid', 'channel')
+            auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
+            bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
+            nowTime = int(time.time())
+            data = []
+            # 设备拓展信息表
+            us_qs = UidSetModel.objects.filter(uid__in=uid_list).values('id', 'uid', 'version', 'nickname', 'ucode',
+                                                                        'detect_status', 'detect_group',
+                                                                        'detect_interval',
+                                                                        'region_alexa', 'is_alexa', 'deviceModel',
+                                                                        'TimeZone', 'TimeStatus', 'SpaceUsable',
+                                                                        'SpaceSum', 'MirrorType', 'RecordType',
+                                                                        'OutdoorModel', 'WIFIName', 'isDetector',
+                                                                        'DetectorRank')
+            uv_dict = {}
+            for us in us_qs:
+                uv_dict[us['uid']] = {
+                    'version': us['version'],
+                    'nickname': us['nickname'],
+                    'ucode': us['ucode'],
+                    'detect_interval': us['detect_interval'],
+                    'detect_group': us['detect_group'],
+                    'detect_status': us['detect_status'],
+                    'region_alexa': us['region_alexa'],
+                    'is_alexa': us['is_alexa'],
+                    'deviceModel': us['deviceModel'],
+                    'TimeZone': us['TimeZone'],
+                    'TimeStatus': us['TimeStatus'],
+                    'SpaceUsable': us['SpaceUsable'],
+                    'SpaceSum': us['SpaceSum'],
+                    'MirrorType': us['MirrorType'],
+                    'RecordType': us['RecordType'],
+                    'OutdoorModel': us['OutdoorModel'],
+                    'WIFIName': us['WIFIName'],
+                    'isDetector': us['isDetector'],
+                    'DetectorRank': us['DetectorRank']
+                }
+                # 从uid_channel里面取出通道配置信息
+                ucs_qs = UidChannelSetModel.objects.filter(uid__id=us['id']).values()
+                channels = []
+                for ucs in ucs_qs:
+                    channel = {
+                        'channel': ucs['channel'],
+                        'pir_audio': ucs['pir_audio'],
+                        'mic_audio': ucs['mic_audio'],
+                        'battery_status': ucs['battery_status'],
+                        'battery_level': ucs['battery_level'],
+                        'sleep_status': ucs['sleep_status'],
+                        'sleep_time': ucs['sleep_time'],
+                        'light_night_model': ucs['light_night_model'],
+                        'light_alarm_type': ucs['light_alarm_type'],
+                        'light_alarm_level': ucs['light_alarm_level'],
+                        'light_alarm_man_en': ucs['light_alarm_man_en'],
+                        'light_alarm_vol': ucs['light_alarm_vol'],
+                        'light_long_light': ucs['light_long_light']
                     }
-                    # 从uid_channel里面取出通道配置信息
-                    ucs_qs = UidChannelSetModel.objects.filter(uid__id=us['id']).values()
-                    channels = []
-                    for ucs in ucs_qs:
-                        channel = {
-                            'channel': ucs['channel'],
-                            'pir_audio': ucs['pir_audio'],
-                            'mic_audio': ucs['mic_audio'],
-                            'battery_status': ucs['battery_status'],
-                            'battery_level': ucs['battery_level'],
-                            'sleep_status': ucs['sleep_status'],
-                            'sleep_time': ucs['sleep_time'],
-                            'light_night_model': ucs['light_night_model'],
-                            'light_alarm_type': ucs['light_alarm_type'],
-                            'light_alarm_level': ucs['light_alarm_level'],
-                            'light_alarm_man_en': ucs['light_alarm_man_en'],
-                            'light_alarm_vol': ucs['light_alarm_vol'],
-                            'light_long_light': ucs['light_long_light']
-                        }
-                        channels.append(channel)
-                    uv_dict[us['uid']]['channels'] = channels
+                    channels.append(channel)
+                uv_dict[us['uid']]['channels'] = channels
 
-                for p in dvls:
-                    p['vod'] = []
-                    for dm in ubqs:
-                        if p['UID'] == dm['uid']:
-                            if dm['endTime'] > nowTime:
-                                p['vod'].append(dm)
-                    p['preview'] = []
-                    for up in upqs:
-                        if p['UID'] == up['uid']:
-                            obj = 'uid_preview/{uid}/channel_{channel}.png'.format(uid=up['uid'], channel=up['channel'])
-                            img_sign = bucket.sign_url('GET', obj, 300)
-                            p['preview'].append(img_sign)
-                    p_uid = p['UID']
-                    if p_uid in uv_dict:
-                        # 设备版本号
-                        p['uid_version'] = uv_dict[p_uid]['version']
-                        p['ucode'] = uv_dict[p_uid]['ucode']
-                        p['detect_interval'] = uv_dict[p_uid]['detect_interval']
-                        p['detect_status'] = uv_dict[p_uid]['detect_status']
-                        p['detect_group'] = uv_dict[p_uid]['detect_group']
-                        p['region_alexa'] = uv_dict[p_uid]['region_alexa']
-                        p['is_alexa'] = uv_dict[p_uid]['is_alexa']
-                        p['deviceModel'] = uv_dict[p_uid]['deviceModel']
-                        p['TimeZone'] = uv_dict[p_uid]['TimeZone']
-                        p['TimeStatus'] = uv_dict[p_uid]['TimeStatus']
-                        p['SpaceUsable'] = uv_dict[p_uid]['SpaceUsable']
-                        p['SpaceSum'] = uv_dict[p_uid]['SpaceSum']
-                        p['MirrorType'] = uv_dict[p_uid]['MirrorType']
-                        p['RecordType'] = uv_dict[p_uid]['RecordType']
-                        p['OutdoorModel'] = uv_dict[p_uid]['OutdoorModel']
-                        p['WIFIName'] = uv_dict[p_uid]['WIFIName']
-                        p['isDetector'] = uv_dict[p_uid]['isDetector']
-                        p['DetectorRank'] = uv_dict[p_uid]['DetectorRank']
-                        p['channels'] = uv_dict[p_uid]['channels']
-                        # 设备昵称 调用影子信息昵称,先阶段不可
-                        if uv_dict[p_uid]['nickname']:
-                            p['NickName'] = uv_dict[p_uid]['nickname']
-                    else:
-                        # 设备版本号
-                        p['uid_version'] = ''
-                        p['ucode'] = ''
-                    data.append(p)
-                # 缓存时间为一个钟
-                redisObj.set_data(key='uid_qs_'+userID, val=json.dumps(data), expire=3600)
-                result = data
-                print('分页')
-                # items=[]
-                # for index, item in enumerate(data):
-                #     if (page - 1) * line <= index:
-                #         if index < page * line:
-                #             item['View_Password']=self.encrypt_pwd(item['View_Password'])
-                #             items.append(item)
-                # return response.json(0, items)
-            else:
-                # print('去缓存找数据')
-                # redis_value = redis_value.replace("'", '"')
-                redis_value = redis_value.replace('"isShare": True', '"isShare": true')
-                redis_value = redis_value.replace('"isShare": False', '"isShare": false')
-                redis_value = redis_value.replace('"isDetector": False', '"isDetector": false')
-                redis_value = redis_value.replace('"isDetector": True', '"isDetector": true')
-                redis_value = redis_value.replace('"version": None', '"version": ""')
-                try:
-                    redis_value = json.loads(redis_value)
-                except Exception as e:
-                    print(repr(e))
-                    return response.json(0, redis_value)
-                result = redis_value
+            for p in dvls:
+                p['vod'] = []
+                for dm in ubqs:
+                    if p['UID'] == dm['uid']:
+                        if dm['endTime'] > nowTime:
+                            p['vod'].append(dm)
+                p['preview'] = []
+                for up in upqs:
+                    if p['UID'] == up['uid']:
+                        obj = 'uid_preview/{uid}/channel_{channel}.png'.format(uid=up['uid'], channel=up['channel'])
+                        img_sign = bucket.sign_url('GET', obj, 300)
+                        p['preview'].append(img_sign)
+                p_uid = p['UID']
+                if p_uid in uv_dict:
+                    # 设备版本号
+                    p['uid_version'] = uv_dict[p_uid]['version']
+                    p['ucode'] = uv_dict[p_uid]['ucode']
+                    p['detect_interval'] = uv_dict[p_uid]['detect_interval']
+                    p['detect_status'] = uv_dict[p_uid]['detect_status']
+                    p['detect_group'] = uv_dict[p_uid]['detect_group']
+                    p['region_alexa'] = uv_dict[p_uid]['region_alexa']
+                    p['is_alexa'] = uv_dict[p_uid]['is_alexa']
+                    p['deviceModel'] = uv_dict[p_uid]['deviceModel']
+                    p['TimeZone'] = uv_dict[p_uid]['TimeZone']
+                    p['TimeStatus'] = uv_dict[p_uid]['TimeStatus']
+                    p['SpaceUsable'] = uv_dict[p_uid]['SpaceUsable']
+                    p['SpaceSum'] = uv_dict[p_uid]['SpaceSum']
+                    p['MirrorType'] = uv_dict[p_uid]['MirrorType']
+                    p['RecordType'] = uv_dict[p_uid]['RecordType']
+                    p['OutdoorModel'] = uv_dict[p_uid]['OutdoorModel']
+                    p['WIFIName'] = uv_dict[p_uid]['WIFIName']
+                    p['isDetector'] = uv_dict[p_uid]['isDetector']
+                    p['DetectorRank'] = uv_dict[p_uid]['DetectorRank']
+                    p['channels'] = uv_dict[p_uid]['channels']
+                    # 设备昵称 调用影子信息昵称,先阶段不可
+                    if uv_dict[p_uid]['nickname']:
+                        p['NickName'] = uv_dict[p_uid]['nickname']
+                else:
+                    # 设备版本号
+                    p['uid_version'] = ''
+                    p['ucode'] = ''
+                data.append(p)
+            result = data
 
             if NickName:
                 # print('NickName搜索缓存')

+ 4 - 4
Controller/UIDPreview.py

@@ -79,8 +79,8 @@ class UIDPreview(View):
             bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
 
             dvqs = Device_Info.objects.filter(UID=uid, userID_id=userID)
-            redisObj = RedisObject(db=8)
-            redisObj.del_data(key='uid_qs_'+userID)
+            # redisObj = RedisObject(db=8)
+            # redisObj.del_data(key='uid_qs_'+userID)
             upqs = UID_Preview.objects.filter(uid=uid, channel=channel)
             if dvqs.exists():
                 if upqs.exists():
@@ -147,8 +147,8 @@ class UIDPreview(View):
         own_perm = ModelService.check_perm(userID, 20)
         if own_perm is True:
             id = request_dict.get('id')
-            redisObj = RedisObject(db=8)
-            redisObj.del_data(key='uid_qs_' + userID)
+            # redisObj = RedisObject(db=8)
+            # redisObj.del_data(key='uid_qs_' + userID)
             UID_Preview.objects.filter(id=id).delete()
             return response.json(0)
         else:

+ 6 - 6
Controller/UidSetController.py

@@ -122,8 +122,8 @@ class UidSetView(View):
         if own_perm is True:
             uid = request_dict.getlist('uid', None)
             id_list = request_dict.get('id_list', None)
-            redisObj = RedisObject(db=8)
-            redisObj.del_data(key='uid_qs_' + userID)
+            # redisObj = RedisObject(db=8)
+            # redisObj.del_data(key='uid_qs_' + userID)
             # 删除回滚
             with transaction.atomic():  # 上下文格式,可以在python代码的任何位置使用
                 val = 1
@@ -337,8 +337,8 @@ class UidSetView(View):
         if userID is None:
             return response.json(309)
         try:
-            redisObj = RedisObject(db=8)
-            redisObj.del_data(key='uid_qs_' + userID)
+            # redisObj = RedisObject(db=8)
+            # redisObj.del_data(key='uid_qs_' + userID)
             deviceData = json.loads(deviceContent)
             uid_set_qs = UidSetModel.objects.filter(uid=uid)
             if not uid_set_qs.exists():
@@ -388,8 +388,8 @@ class UidSetView(View):
         if channel < 1:
             return response.json(444, 'channel')
         try:
-            redisObj = RedisObject(db=8)
-            redisObj.del_data(key='uid_qs_' + userID)
+            # redisObj = RedisObject(db=8)
+            # redisObj.del_data(key='uid_qs_' + userID)
             deviceData = json.loads(channelContent)
             uid_channel_set_qs = UidChannelSetModel.objects.filter(uid__uid=uid, channel=channel)
             if not uid_channel_set_qs.exists():

+ 6 - 6
Controller/UidUser.py

@@ -133,8 +133,8 @@ def queryInterface(request):
 
     if tko.code == 0:
         userID = tko.userID
-        redisObj = RedisObject(db=8)
-        redisObj.del_data(key='uid_qs_' + userID)
+        # redisObj = RedisObject(db=8)
+        # redisObj.del_data(key='uid_qs_' + userID)
         uid_user_qs = UidUserModel.objects.filter(userID_id=userID)
         if is_ap:
             is_ap = int(is_ap)
@@ -258,8 +258,8 @@ def deleteInterface(request):
         response.lang = tko.lang
         if tko.code == 0:
             userID = tko.userID
-            redisObj = RedisObject(db=8)
-            redisObj.del_data(key='uid_qs_' + userID)
+            # redisObj = RedisObject(db=8)
+            # redisObj.del_data(key='uid_qs_' + userID)
             uid_user_qs = UidUserModel.objects.filter(userID_id=userID, id=id)
             if uid_user_qs.exists():
                 uid_user_qs.delete()
@@ -481,8 +481,8 @@ def v3queryInterface(request):
         return response.json(0)
     if tko.code == 0:
         userID = tko.userID
-        redisObj = RedisObject(db=8)
-        redisObj.del_data(key='uid_qs_' + userID)
+        # redisObj = RedisObject(db=8)
+        # redisObj.del_data(key='uid_qs_' + userID)
         uid_user_qs = UidUserModel.objects.filter(userID_id=userID)
         if is_ap:
             is_ap = int(is_ap)

+ 155 - 3
Controller/UserController.py

@@ -14,6 +14,9 @@
 import datetime
 import traceback
 import time
+
+import jwt
+import simplejson
 import simplejson as json
 import requests
 from django.contrib.auth.hashers import make_password, check_password  # 对密码加密模块
@@ -23,6 +26,7 @@ from django.utils.decorators import method_decorator
 from django.utils.timezone import utc
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic import TemplateView
+from jwt.algorithms import RSAAlgorithm
 from ratelimit.decorators import ratelimit
 
 from Ansjer.config import AuthCode_Expire, SERVER_DOMAIN, APNS_CONFIG, JPUSH_CONFIG, FCM_CONFIG, TUTK_PUSH_DOMAIN
@@ -1761,6 +1765,11 @@ class v3LoginView(TemplateView):
         tko = TokenObject()
         res = tko.generate(
             data={'userID': userID, 'lang': response.lang, 'user': users['username'], 'm_code': '123413243214'})
+        oauth_qs = UserOauth2Model.objects.filter(userID__userID=userID)
+        auth_type = 0
+        if oauth_qs.exists():
+            auth_type = oauth_qs[0].authType
+
         if tko.code == 0:
             now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
             user_qs.update(last_login=now_time, language=response.lang)
@@ -1779,8 +1788,9 @@ class v3LoginView(TemplateView):
             res['username'] = users['username'] if users['username'] is not None else ''
             res['userEmail'] = users['userEmail'] if users['userEmail'] is not None else ''
             res['phone'] = users['phone'] if users['phone'] is not None else ''
-            res['fingerprint_enable'] = users['fingerprint_enable']
-            res['fingerprint_key'] = CommonService.encode_data(content=users['fingerprint_key'], start=2)
+            # res['fingerprint_enable'] = users['fingerprint_enable']
+            # res['fingerprint_key'] = CommonService.encode_data(content=users['fingerprint_key'], start=2)
+            res['authType'] = auth_type
             return response.json(0, res)
         else:
             return response.json(tko.code)
@@ -1924,7 +1934,7 @@ class verifyAuthcode(TemplateView):
         return response.json(0)
 
 
-# 获取验证码
+# 微信登录
 class wxAuthSignView(TemplateView):
 
     def post(self, request, *args, **kwargs):
@@ -2030,6 +2040,12 @@ class wxAuthSignView(TemplateView):
         res['userEmail'] = user_list[0]["userEmail"] if user_list[0]["userEmail"] is not None else ''
         res['phone'] = user_list[0]["phone"] if user_list[0]["phone"] is not None else ''
         print(res)
+        # 添加用户登录类型
+        oauth_qs = UserOauth2Model.objects.filter(userID__userID=userID)
+        auth_type = 0
+        if oauth_qs.exists():
+            auth_type = oauth_qs[0].authType
+        res['authType'] = auth_type
         user_qs.update(last_login=now_time, online=True)
         return response.json(0, res)
 
@@ -3146,6 +3162,12 @@ class v3LoginByCodeView(View):
         res = tko.generate(
             data={'userID': userID, 'lang': response.lang, 'user': users['username'],
                   'm_code': '123413243214'})
+        # 添加用户登录类型
+        oauth_qs = UserOauth2Model.objects.filter(userID__userID=userID)
+        auth_type = 0
+        if oauth_qs.exists():
+            auth_type = oauth_qs[0].authType
+
         if tko.code == 0:
             now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
             user_qs.update(last_login=now_time, language=response.lang)
@@ -3164,6 +3186,7 @@ class v3LoginByCodeView(View):
             res['username'] = users['username'] if users['username'] is not None else ''
             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
             return response.json(0, res)
         else:
             return response.json(tko.code)
@@ -3291,3 +3314,132 @@ class v3SetFingerprintView(View):
         if len(data) > 0:
             Device_User.objects.filter(userID=token.userID).update(**data)
         return response.json(0)
+
+
+class AppleAuthLogin(View):
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.POST
+        return self.validate(request_dict)
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        request_dict = request.GET
+        return self.validate(request_dict)
+
+    def validate(self, request_dict):
+        lang = request_dict.get('lang', None)
+        identity_token = request_dict.get('identity_token', None)
+        app_bundle_id = request_dict.get('app_bundle_id', None)  # 包名
+
+        response = ResponseObject(lang)
+        identity_token = CommonService.decode_data(identity_token)
+        if identity_token:
+            key_url = 'https://appleid.apple.com/auth/keys'
+            key_response = requests.get(key_url).json()
+            print(key_response)
+            head = jwt.get_unverified_header(identity_token)
+            print(head)
+            token_key = head['kid']
+            key_object = None
+            alg = None
+            for pub_key in key_response['keys']:
+                if pub_key['kid'] == token_key:
+                    key_object = simplejson.dumps(pub_key)
+                    key_object = RSAAlgorithm.from_jwk(key_object)
+                    alg = pub_key['alg']
+                    break
+
+            if key_object:
+                try:
+                    claims = jwt.decode(identity_token, key=key_object, verify=True, algorithms=[alg], audience=app_bundle_id)
+                    unionID = claims['sub']
+                    print(claims)
+                    user_extend_qs = UserOauth2Model.objects.filter(unionID=unionID, authType=2)
+                    if user_extend_qs.exists():
+                        # 如果用户绑定过则直接登录
+                        userID = user_extend_qs[0].userID_id
+                        print(userID)
+                        user_qs = Device_User.objects.filter(userID=userID)
+                        return self.do_login(user_qs, response)
+                    else:
+                        # 如果用户为绑定过则创建用户并进行登录返回token
+                        userID = CommonService.getUserID(getUser=False)
+                        nickname = claims['email']
+                        return self.do_register(userID, nickname, response, app_bundle_id, unionID)
+
+                except Exception as e:
+                    print(e)
+                    return response.json(717)
+            else:
+                return response.json(444)
+        else:
+            return response.json(444)
+
+    # 登录
+    def do_login(self, user_qs, response):
+        now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
+        userID = user_qs[0].userID
+        print('userID' + userID)
+        tko = TokenObject()
+        user_list = user_qs.values("NickName", "userIconUrl", "userIconPath", "username", "userEmail", "phone")
+        res = tko.generate(data={'userID': userID, 'lang': response.lang, 'user': user_list[0]["username"]})
+        # 增加角色
+        user_qs[0].role.add(Role.objects.get(rid=1))
+        role_dict = ModelService.own_role(userID=userID)
+        res['rid'] = role_dict['rid']
+        res['roleName'] = role_dict['roleName']
+        res['permList'] = ModelService.own_permission(userID)
+        res['userID'] = userID
+        # 昵称,邮箱,电话,刷新,头像
+        userIconPath = str(user_list[0]["userIconPath"])
+        if userIconPath and userIconPath.find('static/') != -1:
+            userIconPath = userIconPath.replace('static/', '').replace('\\', '/')
+            res['userIconUrl'] = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
+        else:
+            res['userIconUrl'] = ''
+        res['NickName'] = user_list[0]["NickName"] if user_list[0]["NickName"] is not None else ''
+        res['username'] = user_list[0]["username"] if user_list[0]["username"] is not None else ''
+        res['userEmail'] = user_list[0]["userEmail"] if user_list[0]["userEmail"] is not None else ''
+        res['phone'] = user_list[0]["phone"] if user_list[0]["phone"] is not None else ''
+        print(res)
+        # 添加用户登录类型
+        oauth_qs = UserOauth2Model.objects.filter(userID__userID=userID)
+        auth_type = 0
+        if oauth_qs.exists():
+            auth_type = oauth_qs[0].authType
+        res['authType'] = auth_type
+        user_qs.update(last_login=now_time, online=True)
+        return response.json(0, res)
+
+    def do_register(self, userID, nickname, response, appBundleId, unionID):
+        data_valid = DataValid()
+        if data_valid.name_validate(userID) is not True:
+            return response.json(105)
+        try:
+            users = Device_User.objects.create(
+                username=userID,
+                NickName=nickname,
+                password=make_password('123456'),
+                userID=userID,
+                is_active=True,
+                user_isValid=True,
+            )
+
+            nowTime = int(time.time())
+            UserOauth2Model.objects.create(
+                addTime=nowTime,
+                updTime=nowTime,
+                userID_id=users.userID,
+                authType=2,
+                unionID=unionID
+            )
+        except Exception as e:
+            errorInfo = traceback.format_exc()
+            print(errorInfo)
+            return response.json(424, repr(e))
+        else:
+            user_qs = Device_User.objects.filter(Q(userID=userID))
+            print('---')
+            print(user_qs)
+            return self.do_login(user_qs, response)

+ 2 - 2
Controller/shareUserPermission.py

@@ -260,8 +260,8 @@ class shareUserEquipmentView(View):
                             res = {'error_UID': UID, 'Sharing': len(querysetList)}
                         else:
                             res = {'Sharing': len(querysetList)}
-                redisObj = RedisObject(db=8)
-                redisObj.del_data(key='uid_qs_' + GuestID)
+                # redisObj = RedisObject(db=8)
+                # redisObj.del_data(key='uid_qs_' + GuestID)
                 return response.json(0, res)
 
 

+ 1 - 1
Model/models.py

@@ -761,7 +761,7 @@ class UserExModel(models.Model):
 class UserOauth2Model(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='自增id')
     userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
-    authType = models.SmallIntegerField(default=0, verbose_name=0)  # 授权类型 0 非授权,1 微信授权
+    authType = models.SmallIntegerField(default=0, verbose_name=0)  # 授权类型 0 非授权,1 微信授权,2 苹果授权
     unionID = models.CharField(default='', max_length=64, verbose_name='唯一标记')  # 绑定唯一标记 unionID
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)