From d0700522ee8fc8b39b077bbd47a659ded6c9ccec Mon Sep 17 00:00:00 2001 From: xiaoyu Date: Mon, 20 Jul 2020 19:22:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=8B=B9=E6=9E=9C=E4=BC=81?= =?UTF-8?q?=E4=B8=9A=E7=AD=BE=E5=90=8D=EF=BC=8C=E4=B8=8B=E8=BD=BD=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0=E6=96=87=E4=BB=B6=E4=B9=8B=E5=90=8E=EF=BC=8C=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E8=B7=B3=E8=BD=AC=E5=88=B0=E6=8F=8F=E8=BF=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=AE=89=E8=A3=85=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fir_client/src/components/FirDownload.vue | 42 +++++++++++++++++--- fir_download/src/components/FirDownload.vue | 39 ++++++++++++++++-- fir_ser/api/utils/storage/caches.py | 21 +++++++++- fir_ser/api/views/download.py | 19 ++++++++- fir_ser/files/embedded.mobileprovision | Bin 0 -> 7306 bytes fir_ser/fir_ser/settings.py | 15 +++++++ 6 files changed, 124 insertions(+), 12 deletions(-) create mode 100644 fir_ser/files/embedded.mobileprovision diff --git a/fir_client/src/components/FirDownload.vue b/fir_client/src/components/FirDownload.vue index d0991aa..5153147 100644 --- a/fir_client/src/components/FirDownload.vue +++ b/fir_client/src/components/FirDownload.vue @@ -67,10 +67,29 @@
- +
+
+ +
+
+
+

正在安装,请按 Home 键在桌面查看

+

+ + +

+
+
+
+
+
@@ -81,7 +100,8 @@
@@ -192,12 +212,17 @@ udid: "", wxeasytypeflag: false, timer: '', + gomobile: true, + mobileprovision: '', } }, beforeDestroy() { clearTimeout(this.timer); }, methods: { + gomobileaction() { + window.location.href = this.mobileprovision; + }, download() { if (this.currentappinfo.app_id) { this.isdownload = true; @@ -232,6 +257,13 @@ } else { let download_url = res.data.download_url; this.downloadurl = "itms-services://?action=download-manifest&url=" + encodeURIComponent(download_url); + if (res.data.extra_url !== "") { + this.mobileprovision = res.data.extra_url; + // eslint-disable-next-line no-unused-vars + this.timmer = setTimeout(data => { + this.gomobile = false; + }, 5000); + } } } else { if (this.agent !== '') { diff --git a/fir_download/src/components/FirDownload.vue b/fir_download/src/components/FirDownload.vue index 70deb9b..d3472ab 100644 --- a/fir_download/src/components/FirDownload.vue +++ b/fir_download/src/components/FirDownload.vue @@ -66,10 +66,29 @@
- +
+
+ +
+
+
+

正在安装,请按 Home 键在桌面查看

+

+ + +

+
+
+
+
+
@@ -190,11 +209,16 @@ udid: "", wxeasytypeflag: false, timer: '', + gomobile: true, + mobileprovision:'', } }, beforeDestroy() { clearTimeout(this.timer); }, methods: { + gomobileaction(){ + window.location.href = this.mobileprovision; + }, download() { if (this.currentappinfo.app_id) { this.isdownload = true; @@ -228,6 +252,13 @@ } else { let download_url = res.data.download_url; this.downloadurl = "itms-services://?action=download-manifest&url=" + encodeURIComponent(download_url); + if (res.data.extra_url !== "") { + this.mobileprovision = res.data.extra_url; + // eslint-disable-next-line no-unused-vars + this.timmer = setTimeout(data => { + this.gomobile = false; + }, 5000); + } } } else { if (this.agent !== '') { diff --git a/fir_ser/api/utils/storage/caches.py b/fir_ser/api/utils/storage/caches.py index 123d63b..e7c3260 100644 --- a/fir_ser/api/utils/storage/caches.py +++ b/fir_ser/api/utils/storage/caches.py @@ -8,7 +8,7 @@ from django.core.cache import cache from api.models import Apps, UserInfo, AppReleaseInfo, AppUDID, APPToDeveloper, APPSuperSignUsedInfo import time, os from django.utils import timezone -from fir_ser.settings import CACHE_KEY_TEMPLATE, SERVER_DOMAIN, SYNC_CACHE_TO_DATABASE +from fir_ser.settings import CACHE_KEY_TEMPLATE, SERVER_DOMAIN, SYNC_CACHE_TO_DATABASE, DEFAULT_MOBILEPROVISION from api.utils.storage.storage import Storage, LocalStorage from api.utils.crontab.sync_cache import sync_download_times_by_app_id from api.utils.utils import file_format_path @@ -47,9 +47,26 @@ def get_download_url_by_cache(app_obj, filename, limit, isdownload=True, key='', else: return "", "" + supersign = DEFAULT_MOBILEPROVISION.get("supersign") mobileconifg = "" - if download_url_type == 'mobileconifg': + + if download_url_type == 'plist': + enterprise = DEFAULT_MOBILEPROVISION.get("enterprise") + mpath = enterprise.get('path', None) + murl = enterprise.get('url', None) + else: + mpath = supersign.get('path', None) + murl = supersign.get('url', None) + + if murl and len(murl) > 5: + mobileconifg = murl + + if mpath and os.path.isfile(mpath): + mobileconifg = local_storage.get_download_url(filename.split(".")[0] + "." + "dmobileprovision", limit) + + if download_url_type == 'mobileconifg' and supersign.get("self"): mobileconifg = local_storage.get_download_url(filename.split(".")[0] + "." + "mobileprovision", limit) + return local_storage.get_download_url(filename.split(".")[0] + "." + download_url_type, limit), mobileconifg down_key = "_".join([key.lower(), CACHE_KEY_TEMPLATE.get('download_url_key'), filename]) download_val = cache.get(down_key) diff --git a/fir_ser/api/views/download.py b/fir_ser/api/views/download.py index 48e9aba..5ea0dfb 100644 --- a/fir_ser/api/views/download.py +++ b/fir_ser/api/views/download.py @@ -87,11 +87,28 @@ class DownloadView(APIView): if os.path.isfile(file_path): response = FileResponse(open(file_path, 'rb')) else: - response = FileResponse() + file_path = settings.DEFAULT_MOBILEPROVISION.get("supersign").get('path') + if os.path.isfile(file_path): + response = FileResponse(open(file_path, 'rb')) + else: + response = FileResponse() response['Content-Type'] = "application/x-apple-aspen-config" response['Content-Disposition'] = 'attachment; filename=' + make_random_uuid() + '.mobileprovision' return response res.msg = "mobileprovision release_id error" + elif ftype == 'dmobileprovision': + release_obj = AppReleaseInfo.objects.filter(release_id=filename.split('.')[0]).first() + if release_obj: + file_path = settings.DEFAULT_MOBILEPROVISION.get("supersign").get('path') + if os.path.isfile(file_path): + response = FileResponse(open(file_path, 'rb')) + else: + response = FileResponse() + response['Content-Type'] = "application/x-apple-aspen-config" + response['Content-Disposition'] = 'attachment; filename=' + make_random_uuid() + '.mobileprovision' + return response + res.msg = "dmobileprovision release_id error" + else: file_path = os.path.join(settings.MEDIA_ROOT, filename) try: diff --git a/fir_ser/files/embedded.mobileprovision b/fir_ser/files/embedded.mobileprovision new file mode 100644 index 0000000000000000000000000000000000000000..ff25502daa7b759b5b9eb45dac1c4428a3b73be5 GIT binary patch literal 7306 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 b+V>UX#T8HfbU%dAje9=6ciy}Iy_^3Fcy!)D literal 0 HcmV?d00001 diff --git a/fir_ser/fir_ser/settings.py b/fir_ser/fir_ser/settings.py index bda612c..6af63ae 100644 --- a/fir_ser/fir_ser/settings.py +++ b/fir_ser/fir_ser/settings.py @@ -253,6 +253,21 @@ MOBILECONFIG_SIGN_SSL = { 'ssl_pem_path': '/data/cert/fly.harmonygames.cn.pem' } +DEFAULT_MOBILEPROVISION = { + # 默认描述文件路径或者下载路径,用户企业签名或者超级签名 跳转 [设置 - 通用 - 描述文件|设备管理] 页面 + # 如果配置了path路径,则走路径,如果配置了url,则走URL,path 优先级大于url优先级 + 'enterprise': { + 'path': os.path.join(MEDIA_ROOT, 'embedded.mobileprovision'), + 'url': 'https://ali-static.jappstore.com/embedded.mobileprovision' + }, + 'supersign': { + # 超级签名,如果self 为True,则默认用自己的描述文件,否则同企业配置顺序一致 + 'self': True, + 'path': os.path.join(MEDIA_ROOT, 'embedded.mobileprovision'), + 'url': 'https://ali-static.jappstore.com/embedded.mobileprovision' + } +} + SESSION_ENGINE = "django.contrib.sessions.backends.cache" SESSION_CACHE_ALIAS = "default"