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/tasks.py

114 lines
4.4 KiB

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# project: 5月
# author: NinEveN
# date: 2021/5/27
import logging
from celery import shared_task
from django.core.cache import cache
from common.cache.state import MigrateStorageState
from fir_ser.celery import app
from xsign.models import Apps, DeveloperAppID
from xsign.utils.ctasks import auto_check_ios_developer_active, auto_clean_sign_log
from xsign.utils.iproxy import get_best_proxy_ips
from xsign.utils.modelutils import add_sign_message
from xsign.utils.supersignutils import IosUtils, resign_by_app_id_and_developer
logger = logging.getLogger(__name__)
@shared_task
def run_sign_task(format_udid_info, short, client_ip):
app_obj = Apps.objects.filter(short=short).first()
user_obj = app_obj.user_id
udid = format_udid_info.get('udid')
if MigrateStorageState(user_obj.uid).get_state():
msg = "数据迁移中,无法处理该操作"
code = 1000
return {'code': code, 'msg': msg}
try:
ios_sign_obj = IosUtils(format_udid_info, user_obj, app_obj)
status, result = ios_sign_obj.sign_ipa(client_ip)
if ios_sign_obj.developer_obj:
if status:
message = f"sign_info:[client_ip:{client_ip} udid:{udid}] raw_info:[{result}]"
add_sign_message(user_obj, ios_sign_obj.developer_obj, app_obj, '签名成功', message, True)
except Exception as e:
logger.error(
f"run_sign_task failed. client_ip:{client_ip} udid_info:{format_udid_info} app_obj:{app_obj} Exception:{e}")
msg = '系统内部错误,请稍后再试或联系管理员'
code = 5000
return {'code': code, 'msg': msg}
if not status:
code = result.get("code", -1)
if code == 1000:
msg = ""
elif code == 1005:
msg = "签名余额不足"
elif code == 1003:
msg = "应用余额不足"
elif code == 1007:
msg = "设备注册中,请耐心等待"
elif code in [1004, 1001, 1009]:
msg = result.get('msg', '未知错误')
else:
code = 5000
msg = '系统内部错误,请稍后再试或联系管理员'
message = f"return_info:[client_ip:{client_ip},code:{code},msg:{msg},udid:{udid}] raw_info:[{result}]"
if ios_sign_obj.developer_obj:
add_sign_message(user_obj, ios_sign_obj.developer_obj, app_obj, '签名失败了', message, False)
else:
logger.error(f"[client_ip:{client_ip}] {user_obj} {app_obj} 签名失败了:{message}")
else:
msg = ""
code = 1000
result = {'code': code, 'msg': msg}
if app_obj.supersign_redirect_url and (code == 1005 or (code == 1007 and app_obj.abnormal_redirect)):
result['redirect'] = app_obj.supersign_redirect_url
return result
def run_resign_task(app_id, need_download_profile=True, force=True, developers_filter=None):
if developers_filter is None:
developers_filter = []
app_obj = Apps.objects.filter(pk=app_id).first()
if app_obj.issupersign and app_obj.user_id.supersign_active:
developer_app_id_queryset = DeveloperAppID.objects.filter(app_id=app_obj)
if developers_filter:
developer_app_id_queryset = developer_app_id_queryset.filter(developerid__in=developers_filter)
with cache.lock(f"task_resign_{app_obj.app_id}", timeout=60 * 60):
task_list = []
for developer_app_id_obj in developer_app_id_queryset.all():
c_task = run_resign_task_do.apply_async((app_id, developer_app_id_obj.developerid.pk,
developer_app_id_obj.aid, need_download_profile, force))
task_list.append(c_task)
for c_task in task_list:
msg = c_task.get(propagate=False)
logger.info(f"app {app_obj} run_resign_task msg:{msg}")
if c_task.successful():
c_task.forget()
return True
@shared_task
def run_resign_task_do(app_id, developer_id, developer_app_id, need_download_profile=True, force=True):
return resign_by_app_id_and_developer(app_id, developer_id, developer_app_id, need_download_profile, force)
@app.task
def auto_check_ios_developer_active_job():
return auto_check_ios_developer_active()
@app.task
def get_best_proxy_ips_job():
return get_best_proxy_ips()
@app.task
def auto_clean_sign_log_job():
return auto_clean_sign_log()