You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
flyapps/fir_ser/xsign/views/appinfo.py

152 lines
7.9 KiB

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# project: 3月
# author: liuyu
# date: 2020/3/6
import logging
from rest_framework.response import Response
from rest_framework.views import APIView
from api.models import Apps
from api.utils.response import BaseResponse
from common.cache.state import MigrateStorageState, CleanAppSignDataState
from common.core.auth import ExpiringTokenAuthentication
from common.core.sysconfig import Config
from common.utils.caches import del_cache_response_by_short
from xsign.models import AppUDID
from xsign.tasks import run_resign_task
from xsign.utils.modelutils import get_app_sign_info, check_super_sign_permission
from xsign.utils.supersignutils import IosUtils
logger = logging.getLogger(__name__)
class AppSignInfoView(APIView):
authentication_classes = [ExpiringTokenAuthentication, ]
def get(self, request, app_id):
res = BaseResponse()
if app_id:
app_obj = Apps.objects.filter(user_id=request.user, app_id=app_id).first()
if app_obj:
res.data = get_app_sign_info(app_obj)
else:
logger.error(f"app_id:{app_id} is not found in user:{request.user}")
res.msg = "未找到该应用"
res.code = 1003
return Response(res.dict)
def put(self, request, app_id):
res = BaseResponse()
if app_id:
data = request.data
if MigrateStorageState(request.user.uid).get_state():
res.code = 1008
res.msg = "数据迁移中,无法处理该操作"
return Response(res.dict)
clean = data.get("clean", None)
if clean:
with CleanAppSignDataState(request.user.uid) as state:
if state:
logger.info(f"app_id:{app_id} clean:{clean} ,close super_sign should clean_app_by_user_obj")
app_obj = Apps.objects.filter(user_id=request.user, app_id=app_id).first()
IosUtils.clean_app_by_user_obj(app_obj)
else:
res.code = 1008
res.msg = "数据清理中,请耐心等待"
return Response(res.dict)
has_combo = data.get("has_combo", None)
if has_combo:
...
else:
try:
do_sign_flag = 0
app_obj = Apps.objects.filter(user_id=request.user, app_id=app_id).first()
logger.info("app_id:%s update old data:%s" % (app_id, app_obj.__dict__))
update_fields = []
if app_obj.issupersign:
app_obj.supersign_limit_number = data.get("supersign_limit_number",
app_obj.supersign_limit_number)
update_fields.append("supersign_limit_number")
if app_obj.supersign_type in [x[0] for x in list(app_obj.supersign_type_choices)]:
if app_obj.supersign_type != data.get("supersign_type", app_obj.supersign_type):
do_sign_flag = 1
app_obj.supersign_type = data.get("supersign_type", app_obj.supersign_type)
update_fields.append("supersign_type")
new_bundle_id = data.get("new_bundle_id", None)
new_bundle_name = data.get("new_bundle_name", None)
if new_bundle_id is not None:
if new_bundle_id and new_bundle_id != app_obj.bundle_id and len(new_bundle_id) > 3:
if new_bundle_id != app_obj.new_bundle_id:
do_sign_flag = 2
app_obj.new_bundle_id = new_bundle_id
if new_bundle_id == '' or (app_obj.new_bundle_id != new_bundle_id):
if app_obj.bundle_id != app_obj.new_bundle_id:
do_sign_flag = 2
app_obj.new_bundle_id = app_obj.bundle_id
update_fields.append('new_bundle_id')
if new_bundle_name is not None:
if new_bundle_name and new_bundle_name != app_obj.name and len(new_bundle_name) > 0:
if new_bundle_name != app_obj.new_bundle_name:
do_sign_flag = 2
app_obj.new_bundle_name = new_bundle_name
if new_bundle_name == '' or (app_obj.new_bundle_name != new_bundle_name):
if app_obj.name != app_obj.new_bundle_name:
do_sign_flag = 2
app_obj.new_bundle_name = app_obj.name
update_fields.append('new_bundle_name')
if app_obj.type == 1 and data.get('issupersign', -1) != -1:
if data.get('issupersign', -1) == 1 and not check_super_sign_permission(request.user):
logger.error(f"app_id:{app_id} can't open super_sign,owner has no ios developer")
res.code = 1008
res.msg = "超级签余额不足,无法开启"
return Response(res.dict)
do_sign_flag = 3
app_obj.issupersign = data.get("issupersign", app_obj.issupersign)
update_fields.append("issupersign")
if app_obj.issupersign and data.get('change_auto_sign', -1) != -1:
if data.get('change_auto_sign', -1) == 1:
do_sign_flag = 3
app_obj.change_auto_sign = data.get("change_auto_sign", app_obj.change_auto_sign)
update_fields.append("change_auto_sign")
logger.info(f"app_id:{app_id} update new data:{app_obj.__dict__}")
app_obj.save(update_fields=update_fields)
if app_obj.issupersign:
c_task = None
if do_sign_flag == 1:
AppUDID.objects.filter(app_id=app_obj).update(sign_status=2)
if app_obj.change_auto_sign:
c_task = run_resign_task(app_obj.pk, True)
if do_sign_flag == 2:
AppUDID.objects.filter(app_id=app_obj, sign_status__gte=3).update(sign_status=3)
if app_obj.change_auto_sign:
flag = False
if AppUDID.objects.filter(app_id=app_obj, sign_status=2,
udid__developerid__status__in=Config.DEVELOPER_WRITE_STATUS).first():
flag = True
c_task = run_resign_task(app_obj.pk, flag)
if do_sign_flag == 3:
if app_obj.change_auto_sign:
flag = False
if AppUDID.objects.filter(app_id=app_obj, sign_status=2,
udid__developerid__status__in=Config.DEVELOPER_WRITE_STATUS).first():
flag = True
c_task = run_resign_task(app_obj.pk, flag, False)
if c_task:
logger.info(f"app {app_obj} run_resign_task msg:{c_task}")
del_cache_response_by_short(app_obj.app_id)
except Exception as e:
logger.error(f"app_id:{app_id} update Exception:{e}")
res.code = 1005
res.msg = "短连接已经存在"
return Response(res.dict)