#!/usr/bin/env python # -*- coding:utf-8 -*- # project: 3月 # author: liuyu # date: 2020/3/4 from rest_framework.views import APIView from api.utils.response import BaseResponse from api.utils.auth import ExpiringTokenAuthentication, SuperSignPermission from rest_framework.response import Response from api.models import AppIOSDeveloperInfo, APPSuperSignUsedInfo, AppUDID from api.utils.serializer import DeveloperSerializer, SuperSignUsedSerializer, DeviceUDIDSerializer from rest_framework.pagination import PageNumberPagination from api.utils.app.supersignutils import IosUtils from api.utils.utils import get_developer_devices from api.utils.storage.caches import developer_auth_code import logging logger = logging.getLogger(__file__) class AppsPageNumber(PageNumberPagination): page_size = 10 # 每页显示多少条 page_size_query_param = 'size' # URL中每页显示条数的参数 page_query_param = 'page' # URL中页码的参数 max_page_size = None # 最大页码数限制 class DeveloperView(APIView): authentication_classes = [ExpiringTokenAuthentication, ] permission_classes = [SuperSignPermission, ] def get(self, request): res = BaseResponse() appid = request.query_params.get("appid", None) developer_obj = AppIOSDeveloperInfo.objects.filter(user_id=request.user) res.use_num = get_developer_devices(developer_obj) if appid: developer_obj1 = developer_obj.filter(email=appid) developer_obj2 = developer_obj.filter(issuer_id=appid) developer_obj = developer_obj1 | developer_obj2 page_obj = AppsPageNumber() app_page_serializer = page_obj.paginate_queryset(queryset=developer_obj.order_by("-updated_time"), request=request, view=self) developer_serializer = DeveloperSerializer(app_page_serializer, many=True, ) res.data = developer_serializer.data res.count = developer_obj.count() res.apple_auth_list = [] apple_auth_org_list = list(AppIOSDeveloperInfo.auth_type_choices) for auth_t in apple_auth_org_list: res.apple_auth_list.append({'id': auth_t[0], 'name': auth_t[1]}) return Response(res.dict) def put(self, request): data = request.data email = data.get("email", None) issuer_id = data.get("issuer_id", None) if email: developer_obj = AppIOSDeveloperInfo.objects.filter(user_id=request.user, email=email).first() elif issuer_id: developer_obj = AppIOSDeveloperInfo.objects.filter(user_id=request.user, issuer_id=issuer_id).first() else: return self.get(request) if developer_obj: act = data.get("act", None) if act: res = BaseResponse() logger.info("user %s iosdeveloper %s act %s" % (request.user, developer_obj, act)) if act == "preactive": if developer_obj.email: developer_auth_code("del", request.user, developer_obj.email) elif developer_obj.issuer_id: developer_auth_code("del", request.user, developer_obj.issuer_id) status, result = IosUtils.active_developer(developer_obj, request.user) if status: if not developer_obj.certid: if developer_obj.email: status, result = IosUtils.create_developer_cert(developer_obj, request.user) elif developer_obj.issuer_id: return Response(res.dict) if status: IosUtils.get_device_from_developer(developer_obj, request.user) else: res.code = 1008 res.msg = result.get("err_info") return Response(res.dict) return self.get(request) else: res.code = 1008 res.msg = result.get("return_info", "未知错误") return Response(res.dict) elif act == "nowactive": code = data.get("code", None) if code: developer_auth_code("set", request.user, developer_obj.email, code) elif act == "ioscert": if not developer_obj.certid: status, result = IosUtils.create_developer_cert(developer_obj, request.user) if status: IosUtils.get_device_from_developer(developer_obj, request.user) else: res.code = 1008 res.msg = result.get("err_info") return Response(res.dict) elif act == "syncdevice": status, result = IosUtils.get_device_from_developer(developer_obj, request.user) if status: IosUtils.get_device_from_developer(developer_obj, request.user) else: res.code = 1008 res.msg = result.get("err_info") return Response(res.dict) elif act == "checkauth": if developer_obj.email: developer_auth_code("del", request.user, developer_obj.email) elif developer_obj.issuer_id: developer_auth_code("del", request.user, developer_obj.issuer_id) status, result = IosUtils.active_developer(developer_obj, request.user) if status: return self.get(request) else: res.code = 1008 res.msg = result.get("return_info") return Response(res.dict) else: logger.info("user %s iosdeveloper %s update input data %s" % (request.user, developer_obj, data)) logger.info("user %s iosdeveloper %s update old data %s" % ( request.user, developer_obj, developer_obj.__dict__)) try: usable_number = int(data.get("usable_number", developer_obj.usable_number)) if 0 <= usable_number <= 100: developer_obj.usable_number = usable_number except Exception as e: logger.error("developer %s usable_number %s get failed Exception:%s" % ( developer_obj, data.get("usable_number", developer_obj.usable_number), e)) developer_obj.description = data.get("description", developer_obj.description) password = data.get("password", developer_obj.password) if password != "" and password != developer_obj.password: developer_obj.password = password developer_obj.is_actived = False private_key_id = data.get("private_key_id", developer_obj.private_key_id) p8key = data.get("p8key", developer_obj.p8key) if private_key_id != "" and private_key_id != developer_obj.private_key_id: developer_obj.private_key_id = private_key_id developer_obj.is_actived = False if p8key != "" and p8key != developer_obj.p8key: developer_obj.p8key = p8key developer_obj.is_actived = False try: developer_obj.save() logger.info("user %s iosdeveloper %s update now data %s" % ( request.user, developer_obj, developer_obj.__dict__)) except Exception as e: logger.error("user %s iosdeveloper %s update error data %s Exception %s" % ( request.user, developer_obj, data, e)) return self.get(request) def post(self, request): data = request.data if data.get("auth_type") == 0: datainfo = { "usable_number": data.get("usable_number", ""), "description": data.get("description", ""), "issuer_id": data.get("issuer_id", ""), "private_key_id": data.get("private_key_id", ""), "p8key": data.get("p8key", ""), "auth_type": 0 } else: datainfo = { "usable_number": data.get("usable_number", ""), "description": data.get("description", ""), "password": data.get("password", ""), "email": data.get("email", ""), "auth_type": 1 } try: logger.error("user %s add new developer %s data %s" % ( request.user, data.get("email", ""), datainfo)) AppIOSDeveloperInfo.objects.create(user_id=request.user, **datainfo) except Exception as e: logger.error("user %s create developer %s failed Exception:%s" % ( request.user, datainfo, e)) res = BaseResponse() res.code = 1005 res.msg = "添加失败" return Response(res.dict) return self.get(request) def delete(self, request): email = request.query_params.get("email", None) issuer_id = request.query_params.get("issuer_id", None) if email: developer_obj = AppIOSDeveloperInfo.objects.filter(user_id=request.user, email=email).first() elif issuer_id: developer_obj = AppIOSDeveloperInfo.objects.filter(user_id=request.user, issuer_id=issuer_id).first() else: return self.get(request) if developer_obj: logger.error("user %s delete developer %s " % ( request.user, developer_obj)) IosUtils.clean_developer(developer_obj, request.user) developer_obj.delete() return self.get(request) class SuperSignUsedView(APIView): authentication_classes = [ExpiringTokenAuthentication, ] permission_classes = [SuperSignPermission, ] def get(self, request): res = BaseResponse() udid = request.query_params.get("udid", None) bundleid = request.query_params.get("bundleid", None) developerid = request.query_params.get("appid", None) SuperSignUsed_obj = APPSuperSignUsedInfo.objects.filter(user_id=request.user, ) if developerid: SuperSignUsed_obj = SuperSignUsed_obj.filter(developerid__email=developerid) if udid: SuperSignUsed_obj = SuperSignUsed_obj.filter(udid__udid=udid) if bundleid: SuperSignUsed_obj = SuperSignUsed_obj.filter(app_id__bundle_id=bundleid) page_obj = AppsPageNumber() app_page_serializer = page_obj.paginate_queryset(queryset=SuperSignUsed_obj.order_by("-created_time"), request=request, view=self) app_serializer = SuperSignUsedSerializer(app_page_serializer, many=True, ) res.data = app_serializer.data res.count = SuperSignUsed_obj.count() return Response(res.dict) class AppUDIDUsedView(APIView): authentication_classes = [ExpiringTokenAuthentication, ] permission_classes = [SuperSignPermission, ] def get(self, request): res = BaseResponse() udid = request.query_params.get("udid", None) bundleid = request.query_params.get("bundleid", None) AppUDID_obj = AppUDID.objects.filter(app_id__user_id_id=request.user) if udid: AppUDID_obj = AppUDID_obj.filter(udid=udid) if bundleid: AppUDID_obj = AppUDID_obj.filter(app_id__bundle_id=bundleid) page_obj = AppsPageNumber() app_page_serializer = page_obj.paginate_queryset(queryset=AppUDID_obj.order_by("-created_time"), request=request, view=self) app_serializer = DeviceUDIDSerializer(app_page_serializer, many=True, ) res.data = app_serializer.data res.count = AppUDID_obj.count() return Response(res.dict) def delete(self, request): res = BaseResponse() id = request.query_params.get("id", None) app_id = request.query_params.get("aid", None) app_udid_obj = AppUDID.objects.filter(app_id__user_id_id=request.user, pk=id) if app_udid_obj: logger.error("user %s delete devices %s" % (request.user, app_udid_obj)) IosUtils.disable_udid(app_udid_obj.first(), app_id) app_udid_obj.delete() return Response(res.dict)