#!/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 """ from django.views.generic.base import View from Model.models import Device_Info, Device_User from Object.ResponseObject import ResponseObject from Object.TokenObject import TokenObject from Ansjer.config import SERVER_DOMAIN import jwt from Service.CommonService import CommonService class 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) if tko.code == 0: userID = tko.userID if operation == 'generateTokenUrl': return self.do_generate_token_url(userID, 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) if dvqs.exists(): import time data = {'sharer': userID, 'UID': UID} share_token = jwt.encode(data, 'jwt.#^^&', algorithm='HS256') share_url = '{SERVER_DOMAIN}deviceShare/confirm?shareToken={shareToken}' \ .format(SERVER_DOMAIN=SERVER_DOMAIN, shareToken=share_token.decode('utf-8')) return response.json(0, {'share_url': share_url}) else: return response.json(173) def do_confirm(self, userID, request_dict, response): shareToken = request_dict.get('shareToken', None) if shareToken is not None: data = jwt.decode(shareToken, 'jwt.#^^&', algorithms='HS256') # 分享者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) sharerDvqs.id = CommonService.getUserID(getUser=False) 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: return response.json(0) 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). \ values('userID__NickName', 'userID__username', 'userID__userEmail', 'userID__phone', 'id') 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'] 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')