diff --git a/fir_client/src/components/user/FirSuperSignBase.vue b/fir_client/src/components/user/FirSuperSignBase.vue index 14c0bc9..7e97445 100644 --- a/fir_client/src/components/user/FirSuperSignBase.vue +++ b/fir_client/src/components/user/FirSuperSignBase.vue @@ -65,13 +65,16 @@ 同步设备信息 - 手动创建发布证书 - + 手动创建发布证书 + + + 删除并创建新发布证书 + @click="isorenewcert">删除发布证书 { if (data.code === 1000) { this.$message.success("证书导入成功"); - this.importcertDeveloperVisible = false + this.importcertDeveloperVisible = false; + this.dialogaddDeveloperVisible = false; + this.handleCurrentChange(this.pagination.currentPage) } else { this.$message.error("证书导入失败 " + data.msg) } @@ -561,9 +566,21 @@ }); }, isocertcert() { - this.iosdeveloperFun({ - "methods": "PUT", - "data": {"issuer_id": this.editdeveloperinfo.issuer_id, "act": "ioscert"} + + this.$confirm('此操作将要创建新的发布证书, 是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.iosdeveloperFun({ + "methods": "PUT", + "data": {"issuer_id": this.editdeveloperinfo.issuer_id, "act": "ioscert"} + }); + }).catch(() => { + this.$message({ + type: 'info', + message: '已取消' + }); }); }, exportcert() { @@ -572,10 +589,22 @@ }, {methods: 'FILE', data: {issuer_id: this.editdeveloperinfo.issuer_id}}) }, isorenewcert() { - this.iosdeveloperFun({ - "methods": "PUT", - "data": {"issuer_id": this.editdeveloperinfo.issuer_id, "act": "renewcert"} + this.$confirm('此操作将永久删除该发布证书, 建议先导出证书。是否继续删除?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.iosdeveloperFun({ + "methods": "PUT", + "data": {"issuer_id": this.editdeveloperinfo.issuer_id, "act": "renewcert"} + }); + }).catch(() => { + this.$message({ + type: 'info', + message: '已取消' + }); }); + }, activedeveloperFun(developer, act) { this.iosdeveloperFun({"methods": "PUT", "data": {"issuer_id": developer.issuer_id, "act": act}}); diff --git a/fir_ser/api/utils/app/iossignapi.py b/fir_ser/api/utils/app/iossignapi.py index 850179a..588d312 100644 --- a/fir_ser/api/utils/app/iossignapi.py +++ b/fir_ser/api/utils/app/iossignapi.py @@ -65,6 +65,9 @@ class ResignApp(object): p12.set_privatekey(private_key) with open(self.app_dev_p12, 'wb+') as f: f.write(p12.export(password)) + if password: + with open(self.app_dev_p12 + '.pwd', 'w') as f: + f.write(password) return True, p12.get_friendlyname() except Exception as e: result["err_info"] = e @@ -191,9 +194,16 @@ class AppDeveloperApiV2(object): result = {} try: apple_obj = AppStoreConnectApi(self.issuer_id, self.private_key_id, self.p8key) - if apple_obj.revoke_certificate(cert_id): - logger.info("ios developer cert %s revoke result:%s" % cert_id) - return True, result + cert_obj = apple_obj.get_certificate_by_cid(cert_id) + if cert_obj: + s_date = format_apple_date(cert_obj.expirationDate) + if s_date.timestamp() - datetime.datetime.now().timestamp() < 3600 * 24 * 3: + if apple_obj.revoke_certificate(cert_id): + logger.info("ios developer cert %s revoke" % cert_id) + return True, result + else: + logger.info("ios developer cert %s not revoke.because expire time < 3 day " % cert_id) + return True, result except Exception as e: logger.error("ios developer cert %s revoke Failed Exception:%s" % (cert_id, e)) result['return_info'] = "%s" % e @@ -208,6 +218,7 @@ class AppDeveloperApiV2(object): certificates = apple_obj.get_all_certificates() for cert_obj in certificates: f_date = format_apple_date(cert_obj.expirationDate) + logger.info("%s-%s - %s " % (cert_obj.id, not_after.timestamp(), f_date.timestamp())) if not_after.timestamp() == f_date.timestamp(): return True, cert_obj return False, result diff --git a/fir_ser/api/utils/app/supersignutils.py b/fir_ser/api/utils/app/supersignutils.py index d5107e8..a4feabc 100644 --- a/fir_ser/api/utils/app/supersignutils.py +++ b/fir_ser/api/utils/app/supersignutils.py @@ -698,7 +698,9 @@ class IosUtils(object): developer_obj.cert_expire_time = format_apple_date(cert_obj.expirationDate) break developer_obj.is_actived = True - developer_obj.save() + else: + developer_obj.is_actived = False + developer_obj.save() return status, result @staticmethod @@ -712,6 +714,8 @@ class IosUtils(object): AppIOSDeveloperInfo.objects.filter(user_id=user_obj, issuer_id=auth.get("issuer_id")).update( is_actived=True, certid=cert_id, cert_expire_time=format_apple_date(result.expirationDate)) + resign_app_obj = IosUtils.get_resign_obj(user_obj, developer_obj) + resign_app_obj.make_p12_from_cert(cert_id) return status, result @staticmethod @@ -719,7 +723,8 @@ class IosUtils(object): auth = get_auth_form_developer(developer_obj) app_api_obj = get_api_obj(auth) status, result = app_api_obj.revoke_cert(developer_obj.certid) - if status: + if not status: + logger.warning('%s revoke cert failed,but i need clean cert_id %s' % (developer_obj.issuer_id, result)) AppIOSDeveloperInfo.objects.filter(user_id=user_obj, issuer_id=auth.get("issuer_id")).update( is_actived=True, certid=None, cert_expire_time=None) diff --git a/fir_ser/api/utils/apple/appleapiv3.py b/fir_ser/api/utils/apple/appleapiv3.py index 1e5828a..1ace0f6 100644 --- a/fir_ser/api/utils/apple/appleapiv3.py +++ b/fir_ser/api/utils/apple/appleapiv3.py @@ -21,7 +21,10 @@ logger = logging.getLogger(__file__) # def request_format_log(req): - logger.info("url:%s header:%s code:%s body:%s" % (req.url, req.headers, req.status_code, req.content)) + try: + logger.info("url:%s header:%s code:%s body:%s" % (req.url, req.headers, req.status_code, req.content)) + except Exception as e: + logger.error(e) return req @@ -743,6 +746,10 @@ class AppStoreConnectApi(DevicesAPI, BundleIDsAPI, BundleIDsCapabilityAPI, Profi req = self.list_certificate() return self.__certificates_store(req) + def get_certificate_by_cid(self, certificate_id): + req = self.list_certificate_by_certificate_id(certificate_id) + return self.__certificates_store(req) + def list_device_by_udid(self, udid): device_obj_list = BaseInfoObj.filter(self.get_all_devices(), {"udid": udid}) if not device_obj_list: diff --git a/fir_ser/api/views/supersign.py b/fir_ser/api/views/supersign.py index 50026a9..1cc599f 100644 --- a/fir_ser/api/views/supersign.py +++ b/fir_ser/api/views/supersign.py @@ -93,16 +93,17 @@ class DeveloperView(APIView): IosUtils.clean_developer(developer_obj, request.user) status, result = IosUtils.revoke_developer_cert(developer_obj, request.user) if status: - 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) + pass + # 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) else: res.code = 1008 - res.msg = result.get("err_info") + res.msg = result.get("err_info", '') return Response(res.dict) elif act == "syncdevice": status, result = IosUtils.get_device_from_developer(developer_obj, request.user) @@ -185,6 +186,7 @@ class DeveloperView(APIView): logger.error("user %s delete developer %s " % ( request.user, developer_obj)) IosUtils.clean_developer(developer_obj, request.user) + IosUtils.revoke_developer_cert(developer_obj, request.user) developer_obj.delete() return self.get(request) @@ -264,6 +266,8 @@ class SuperSignCertView(APIView): issuer_id = request.query_params.get('issuer_id', None) if issuer_id: developer_obj = AppIOSDeveloperInfo.objects.filter(user_id=request.user, issuer_id=issuer_id).first() + # resign_app_obj = IosUtils.get_resign_obj(request.user, developer_obj) + # resign_app_obj.make_p12_from_cert(developer_obj.certid) if developer_obj: zip_file_path = IosUtils.zip_cert(request.user, developer_obj) response = FileResponse(open(zip_file_path, 'rb')) @@ -286,6 +290,7 @@ class SuperSignCertView(APIView): if not status: res.code = 1002 res.msg = str(result['err_info']) + return Response(res.dict) status, result = IosUtils.auto_get_certid_by_p12(developer_obj, request.user) if not status: res.code = 1003