| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 | #!/usr/bin/env python3# -*- coding: utf-8 -*-"""@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.@AUTHOR: ASJRD018@NAME: AnsjerFormal@software: PyCharm@DATE: 2019/3/4 16:30@Version: python3.6@MODIFY DECORD:ansjer dev@file: DeviceShare.py@Contact: chanjunkai@163.com"""import jsonimport timefrom django.views.generic.base import Viewfrom Ansjer.config import SERVER_DOMAINfrom Model.models import Device_Info, Device_Userfrom Model.models import UID_Bucketfrom Object.RedisObject import RedisObjectfrom Object.ResponseObject import ResponseObjectfrom Object.TokenObject import TokenObjectfrom Service.CommonService import CommonServiceclass DeviceShareView(View):    def get(self, request, *args, **kwargs):        request.encoding = 'utf-8'        operation = kwargs.get('operation')        return self.validation(request.GET, operation)    def post(self, request, *args, **kwargs):        request.encoding = 'utf-8'        operation = kwargs.get('operation')        return self.validation(request.POST, operation)    def validation(self, request_dict, operation):        response = ResponseObject()        token = request_dict.get('token', None)        if token:            tko = TokenObject(token)            response.lang = tko.lang            if tko.code == 0:                userID = tko.userID                if operation == 'generateTokenUrl':                    return self.do_generate_token_url(userID, request_dict, response)                elif operation == 'showShareInfo':                    return self.do_show_share_info(request_dict, response)                elif operation == 'confirm':                    return self.do_confirm(userID, request_dict, response)                elif operation == 'queryUser':                    return self.do_query_user(userID, request_dict, response)                elif operation == 'deleteUser':                    return self.do_delete_user(userID, request_dict, response)                else:                    return response.json(414)            else:                return response.json(tko.code)        else:            return response.json(444, {'param': 'token'})    def do_generate_token_url(self, userID, request_dict, response):        UID = request_dict.get('UID', None)        dvqs = Device_Info.objects.filter(UID=UID, userID_id=userID, isShare=False).values('NickName')        userqs = Device_User.objects.filter(userID=userID).values('username', 'userEmail', 'phone')        if dvqs:            data = {'sharer': userID, 'UID': UID}            # -----------------            # share_token = jwt.encode(data, '.#^^&', algorithm='HS256').decode('utf-8')            # +++++++++++++++++            redisObj = RedisObject()            share_token = str(int(time.time())) + CommonService.RandomStr(8)            if not redisObj.set_data(key=share_token, val=json.dumps(data), expire=3600):                return response.json(10, '生成失败')            # =================            if userqs[0]['username']:                share_user = userqs[0]['username']            elif userqs[0]['userEmail']:                share_user = userqs[0]['userEmail']            elif userqs[0]['phone']:                share_user = userqs[0]['phone']            else:                share_user = ''            return response.json(0, {                'shareToken': share_token,                'deviceName': dvqs[0]['NickName'],                'shareUser': share_user,            })        else:            return response.json(12)    def do_show_share_info(self, request_dict, response):        shareToken = request_dict.get('shareToken', None)        if shareToken is not None:            redisObj = RedisObject()            data_str = redisObj.get_data(key=shareToken)            if data_str:                data = json.loads(data_str)                # 分享者userID                sharer = data.get('sharer', None)                # 分享的uid                UID = data.get('UID', None)                sharerDvqs = Device_Info.objects.filter(userID_id=sharer, UID=UID, isShare=False). \                    values('NickName', 'Type')                if sharerDvqs.exists():                    sharerDuqs = Device_User.objects.filter(userID=sharer).values('username', 'userEmail', 'phone')                    if sharerDuqs[0]['username']:                        share_user = sharerDuqs[0]['username']                    elif sharerDuqs[0]['userEmail']:                        share_user = sharerDuqs[0]['userEmail']                    elif sharerDuqs[0]['phone']:                        share_user = sharerDuqs[0]['phone']                    else:                        share_user = ''                    return response.json(0, {                        'deviceName': sharerDvqs[0]['NickName'],                        'deviceType': sharerDvqs[0]['Type'],                        'shareUser': share_user,                    })                else:                    return response.json(173)            else:                return response.json(119)        else:            return response.json(414)    def do_confirm(self, userID, request_dict, response):        shareToken = request_dict.get('shareToken', None)        if shareToken is not None:            # try:            #     data = jwt.decode(shareToken, '.#^^&', algorithms='HS256')            # except Exception as e:            #     return response.json(10, repr(e))            redisObj = RedisObject()            data_str = redisObj.get_data(key=shareToken)            if not data_str:                return response.json(119)            data = json.loads(data_str)            # 分享者userID            sharer = data.get('sharer', None)            # 分享的uid            UID = data.get('UID', None)            dval = Device_Info.objects.filter(userID_id=userID, UID=UID)            if not dval.exists():                try:                    sharerUser = Device_User.objects.get(userID=sharer)                    sharerDvqs = Device_Info.objects.get(userID_id=sharer, UID=UID)                    deviceId = CommonService.getUserID(getUser=False)                    sharerDvqs.id = deviceId                    sharerDvqs.userID_id = userID                    sharerDvqs.isShare = True                    sharerDvqs.primaryUserID = sharer                    if sharerUser.username:                        primaryMaster = sharerUser.username                    elif sharerUser.userEmail:                        primaryMaster = sharerUser.userEmail                    elif sharerUser.phone:                        primaryMaster = sharerUser.phone                    else:                        return response.json(178)                    print(primaryMaster)                    sharerDvqs.primaryMaster = primaryMaster                    sharerDvqs.data_joined = None                    sharerDvqs.save()                except Exception as e:                    return response.json(10, repr(e))                else:                    dvqs = Device_Info.objects.filter(id=deviceId).values('id', 'userID', 'NickName', 'UID',                                                                          'View_Account',                                                                          'View_Password', 'ChannelIndex', 'Type',                                                                          'isShare',                                                                          'primaryUserID', 'primaryMaster',                                                                          'data_joined', 'version',                                                                          'isVod', 'isExist')                    dvql = CommonService.qs_to_list(dvqs)                    ubqs = UID_Bucket.objects.filter(uid=UID). \                        values('bucket__content', 'status', 'channel', 'endTime', 'uid')                    res = dvql[0]                    res['vod'] = list(ubqs)                    # redisObj.del_data(key=shareToken)                    return response.json(0, res)            else:                return response.json(174)        else:            return response.json(444, {'param': 'shareToken'})    # 1,这个用户的分享出去的设备    # 2,获得上面个的设备拥有者    #  http://192.168.136.39:8000/deviceShare/queryEq?token=XXX&UID=jLBDSU9547NTRSMF111A    def do_query_user(self, userID, request_dict, response):        UID = request_dict.get('UID', None)        if UID is not None:            # 查询分享获得的用户            qs = Device_Info.objects.filter(UID=UID, isShare=True, primaryUserID=userID, isExist=1). \                values('userID__NickName', 'userID__username', 'userID__userEmail', 'userID__phone', 'id',                       'userID__userIconPath')            data = []            # print(qs)            for q in qs:                d = {'id': q['id']}                if q['userID__NickName']:                    d['user'] = q['userID__NickName']                elif q['userID__username']:                    d['user'] = q['userID__username']                elif q['userID__userEmail']:                    d['user'] = q['userID__userEmail']                elif q['userID__phone']:                    d['user'] = q['userID__phone']                userIconPath = q['userID__userIconPath']                if userIconPath:                    if userIconPath.find('static/') != -1:                        userIconPath = userIconPath.replace('static/', '').replace('\\', '/')                        d['userIconUrl'] = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath                data.append(d)            return response.json(0, data)        else:            return response.json(444, {'param': 'UID'})    def do_delete_user(self, userID, request_dict, response):        id = request_dict.get('id', None)        if id:            try:                Device_Info.objects.filter(id=id, primaryUserID=userID).update(isExist=0)            except Exception as e:                return response.json(10, repr(e))            else:                return response.json(0)        else:            return response.json(444, 'id')
 |