#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved. @AUTHOR: ASJRD019 @NAME: AnsjerFormal @software: PyCharm @DATE: 2020/3/18 9:38 @Version: python3.6 @MODIFY DECORD:ansjer dev @file: AppSetController.py @Contact: pzb3076@163.com """ import requests from Ansjer.config import SERVER_TYPE from Model.models import ApplicationModel from django.views.generic.base import View from Object.RedisObject import RedisObject from Object.TokenObject import TokenObject from Service.ModelService import ModelService from Service.CommonService import CommonService from django.http import JsonResponse from django.contrib import auth import time,json from Object.ResponseObject import ResponseObject # http://192.168.136.39:8000/login/oauth/authorize # http://192.168.136.39:8000/application/query class AuthView(View): def get(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation', None) return self.validation(request.GET, operation) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation', None) return self.validation(request.POST, operation) def validation(self, request_dict, operation): response = ResponseObject() token = request_dict.get('token', None) tko = TokenObject(token) if tko.code == 0: userID = tko.userID if operation == 'authorize': return self.do_authorize(request_dict, userID, response) elif operation == 'access_token': return self.do_token(request_dict, userID, response) elif operation == 'user': return self.do_user(request_dict, userID, response) else: return response.json(tko.code) else: return response.json(414) def do_authorize(self,request_dict, userID, response): state = request_dict.get("state", '') client_id = request_dict.get("client_id", '') response_type = request_dict.get("response_type", '') scope = request_dict.get("scope", '') redirect_uri = request_dict.get("redirect_uri", '') code = CommonService.encrypt_data(32) print(redirect_uri) redirect_uri = redirect_uri + '?code=' + code + '&state=' + state return response.json(0, res=redirect_uri) # 增加对code和client_id的校验代码,返回access_token和refresh_token def do_token(self,request_dict, userID, response): code = request_dict.get("code", None) client_id = request_dict.get("client_id", None) refresh_token = request_dict.get("refresh_token", None) print('refresh_token:') print(refresh_token) print('code:') print(code) print('client_id:') print(client_id) access_token = CommonService.encrypt_data(randomlength=32) refresh_token = CommonService.encrypt_data(randomlength=32) res_json = { "access_token": access_token, "token_type": "bearer", "expires_in": 3600, "refresh_token": refresh_token } print(res_json) return JsonResponse(res_json) def do_user(self, request_dict, userID, response): code = request_dict.get("code", None) client_id = request_dict.get("client_id", None) refresh_token = request_dict.get("refresh_token", None) print('refresh_token:') print(refresh_token) print('code:') print(code) print('client_id:') print(client_id) access_token = CommonService.encrypt_data(randomlength=32) refresh_token = CommonService.encrypt_data(randomlength=32) res_json ={ "login": "pengzhibo168", "id": 1, "node_id": "MDQ6VXNlcjE=", "gravatar_id": "", "type": "User", "name": "monalisa octocat", "company": "asdfda", "location": "San Francisco", "email": "sadf@sadf.com", "bio": "There once was...", "public_repos": 2, "public_gists": 1, "followers": 20, "following": 0, "created_at": "2008-01-14T04:33:35Z", "updated_at": "2008-01-14T04:33:35Z" } print(res_json) return JsonResponse(res_json) class ApplicationView(View): def get(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation', None) return self.validation(request.GET, operation) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' operation = kwargs.get('operation', None) return self.validation(request.POST, operation) def validation(self, request_dict, operation): response = ResponseObject() token = request_dict.get('token', None) tko = TokenObject(token) if tko.code == 0: userID = tko.userID if operation == 'query': return self.query(request_dict, userID, response) elif operation == 'add': return self.add(request_dict, userID, response) elif operation == 'update': return self.update(request_dict, userID, response) elif operation == 'delete': return self.delete(request_dict, userID, response) else: return response.json(414) def query(self, request_dict, userID, response): page = int(request_dict.get('page', 0)) line = int(request_dict.get('line', 0)) if page == 0: page=1 if line == 0: line=10 qs = ApplicationModel.objects.all() if qs.exists(): count = qs.count() res = qs[(page - 1) * line:page * line] send_json = CommonService.qs_to_dict(res) send_json['count'] = count return response.json(0, send_json) return response.json(0, {'datas': [], 'count': 0}) # 管理员的编辑 def update(self, request_dict, userID, response): own_perm = ModelService.check_perm(userID=userID, permID=50) if own_perm is not True: return response.json(404) deviceContent = request_dict.get('content', None) id = request_dict.get('id', None) if not deviceContent or not id: return response.json(444, 'content,id') try: timestamp = int(time.time()) deviceData = json.loads(deviceContent) uid_set = ApplicationModel.objects.filter(id=id) if uid_set.exists(): uid_set.update(updTime=timestamp, **deviceData) return response.json(0) else: return response.json(173) except Exception: errorInfo = traceback.format_exc() print(errorInfo) return response.json(500, {'details': errorInfo}) def delete(self, request_dict, userID, response): own_perm = ModelService.check_perm(userID=userID, permID=10) if own_perm is not True: return response.json(404) id_list = request_dict.getlist('id', None) if not id_list: return response.json(444, 'id must list') try: for id in id_list: ApplicationModel.objects.filter(id=id).delete() except Exception as e: errorInfo = traceback.format_exc() print(errorInfo) return response.json(424, {'details': repr(e)}) else: return response.json(0)