From 8cbcf8265f1123c00b4ec3adf638b378109a10e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=AD=E8=8D=A3=E4=BC=8A?= <243653385@qq.com> Date: Thu, 4 Jul 2019 16:02:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=BE=E5=A4=87=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/yzr/controller/PackageController.java | 13 +++++ src/main/java/org/yzr/model/App.java | 1 - src/main/java/org/yzr/model/Package.java | 6 +- src/main/java/org/yzr/model/Provision.java | 32 +++++++++++ src/main/java/org/yzr/utils/ipa/Plist.java | 19 ++++--- .../java/org/yzr/utils/ipa/Provision.java | 56 ------------------- .../java/org/yzr/utils/parser/IPAParser.java | 48 +++++++++++++++- .../java/org/yzr/vo/PackageViewModel.java | 27 +++++++++ src/main/resources/application.properties | 2 +- src/main/resources/templates/devices.html | 29 ++++++++++ src/main/resources/templates/install.html | 8 ++- src/main/resources/templates/list.html | 2 +- 12 files changed, 170 insertions(+), 73 deletions(-) create mode 100644 src/main/java/org/yzr/model/Provision.java delete mode 100644 src/main/java/org/yzr/utils/ipa/Provision.java create mode 100644 src/main/resources/templates/devices.html diff --git a/src/main/java/org/yzr/controller/PackageController.java b/src/main/java/org/yzr/controller/PackageController.java index 8a88b64..a9ef3fa 100644 --- a/src/main/java/org/yzr/controller/PackageController.java +++ b/src/main/java/org/yzr/controller/PackageController.java @@ -48,6 +48,19 @@ public class PackageController { return "install"; } + /** + * 设备列表 + * @param id + * @param request + * @return + */ + @GetMapping("/devices/{id}") + public String devices(@PathVariable("id") String id, HttpServletRequest request) { + PackageViewModel viewModel= this.packageService.findById(id); + request.setAttribute("app", viewModel); + return "devices"; + } + /** * 上传包 * @param file diff --git a/src/main/java/org/yzr/model/App.java b/src/main/java/org/yzr/model/App.java index 5043d99..4162797 100644 --- a/src/main/java/org/yzr/model/App.java +++ b/src/main/java/org/yzr/model/App.java @@ -1,7 +1,6 @@ package org.yzr.model; -import lombok.Data; import lombok.Getter; import lombok.Setter; import org.hibernate.annotations.GenericGenerator; diff --git a/src/main/java/org/yzr/model/Package.java b/src/main/java/org/yzr/model/Package.java index 89a9587..d9a245f 100644 --- a/src/main/java/org/yzr/model/Package.java +++ b/src/main/java/org/yzr/model/Package.java @@ -1,11 +1,9 @@ package org.yzr.model; -import lombok.Data; import lombok.Getter; import lombok.Setter; import org.hibernate.annotations.GenericGenerator; -import org.hibernate.annotations.ManyToAny; import javax.persistence.*; @@ -41,5 +39,9 @@ public class Package { @ManyToOne(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) @JoinColumn(name="appId") private App app; + @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY) + // Provision 文件 + @JoinColumn(name = "provisionId",referencedColumnName = "id") + private Provision provision; } diff --git a/src/main/java/org/yzr/model/Provision.java b/src/main/java/org/yzr/model/Provision.java new file mode 100644 index 0000000..fc9cfe8 --- /dev/null +++ b/src/main/java/org/yzr/model/Provision.java @@ -0,0 +1,32 @@ +package org.yzr.model; + +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.util.Date; + + +@Entity +@Table(name="tb_provision") +@Setter +@Getter +public class Provision { + // 主键 + @Id + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid") + @Column(length = 32) + private String id; + private String teamName; + private String teamID; + private Date createDate; + private Date expirationDate; + private String UUID; + @Column(length = 80000) + private String[] devices; + private int deviceCount; + private String type; + private boolean isEnterprise; +} diff --git a/src/main/java/org/yzr/utils/ipa/Plist.java b/src/main/java/org/yzr/utils/ipa/Plist.java index 99dd84f..361fc30 100644 --- a/src/main/java/org/yzr/utils/ipa/Plist.java +++ b/src/main/java/org/yzr/utils/ipa/Plist.java @@ -1,9 +1,6 @@ package org.yzr.utils.ipa; -import com.dd.plist.NSArray; -import com.dd.plist.NSDictionary; -import com.dd.plist.NSObject; -import com.dd.plist.PropertyListParser; +import com.dd.plist.*; import java.io.File; import java.util.ArrayList; @@ -81,18 +78,26 @@ public class Plist { } public List arrayValueForPath(String path) { + List devices = new ArrayList<>(); Object object = valueForKeyPath(path); if (object != null) { NSArray deviceArray = (NSArray)object; - List devices = new ArrayList<>(); if (deviceArray != null && deviceArray.count() > 0) { for (int i = 0; i < deviceArray.count(); i++) { devices.add(deviceArray.objectAtIndex(i).toString()); } } - return devices; } - return null; + return devices; + } + + public boolean boolValueForPath(String keyPath) { + Object object = valueForKeyPath(keyPath); + if (object instanceof NSNumber) { + NSNumber number = (NSNumber)object; + return number.boolValue(); + } + return false; } } diff --git a/src/main/java/org/yzr/utils/ipa/Provision.java b/src/main/java/org/yzr/utils/ipa/Provision.java deleted file mode 100644 index 62b4cd6..0000000 --- a/src/main/java/org/yzr/utils/ipa/Provision.java +++ /dev/null @@ -1,56 +0,0 @@ -package org.yzr.utils.ipa; - -import com.dd.plist.NSDate; -import lombok.Getter; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.util.Date; -import java.util.List; - -@Getter -public class Provision { - private String teamName; - private String teamID; - private Date createDate; - private Date expirationDate; - private String UUID; - private List devices; - private int deviceCount; - private String type; - - public Provision(String appPath) { - String profile = appPath + File.separator + "embedded.mobileprovision"; - try { - boolean started = false; - boolean ended = false; - BufferedReader reader = new BufferedReader(new FileReader(profile)); - StringBuffer plist = new StringBuffer(); - String str = null; - while ((str = reader.readLine()) != null) { - if (str.contains("")) { - ended = true; - plist.append("").append("\n"); - } else if (started && !ended) { - plist.append(str).append("\n"); - } else if (str.contains(" 0 ? "Ad-hoc" : "Release"; - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/src/main/java/org/yzr/utils/parser/IPAParser.java b/src/main/java/org/yzr/utils/parser/IPAParser.java index ef295d9..de266b2 100644 --- a/src/main/java/org/yzr/utils/parser/IPAParser.java +++ b/src/main/java/org/yzr/utils/parser/IPAParser.java @@ -1,17 +1,19 @@ package org.yzr.utils.parser; +import com.dd.plist.NSDate; import org.apache.commons.io.FileUtils; import org.yzr.model.Package; import org.yzr.utils.PNGConverter; import org.yzr.utils.PathManager; import org.yzr.utils.ZipUtils; import org.yzr.utils.ipa.Plist; -import org.yzr.utils.ipa.Provision; +import org.yzr.model.Provision; +import java.io.BufferedReader; import java.io.File; +import java.io.FileReader; import java.util.ArrayList; import java.util.List; -import java.util.UUID; import java.util.regex.Pattern; public class IPAParser implements PackageParser { @@ -49,7 +51,7 @@ public class IPAParser implements PackageParser { PNGConverter.convert(iconPath, iconTempPath); // 解析 Provision - Provision provision = new Provision(appPath); + aPackage.setProvision(getProvision(appPath)); // 清除目录 FileUtils.deleteDirectory(new File(targetPath)); @@ -100,4 +102,44 @@ public class IPAParser implements PackageParser { } return null; } + + private static Provision getProvision(String appPath) { + Provision provision = new Provision(); + String profile = appPath + File.separator + "embedded.mobileprovision"; + try { + boolean started = false; + boolean ended = false; + BufferedReader reader = new BufferedReader(new FileReader(profile)); + StringBuffer plist = new StringBuffer(); + String str = null; + while ((str = reader.readLine()) != null) { + if (str.contains("")) { + ended = true; + plist.append("").append("\n"); + } else if (started && !ended) { + plist.append(str).append("\n"); + } else if (str.contains(" provisionedDevices = provisionFile.arrayValueForPath("ProvisionedDevices"); + String[] devices = new String[provisionedDevices.size()]; + devices = provisionedDevices.toArray(devices); + provision.setDevices(devices); + provision.setDeviceCount(devices.length); + provision.setTeamName(provisionFile.stringValueForPath("TeamName")); + provision.setTeamID(provisionFile.arrayValueForPath("TeamIdentifier").get(0)); + provision.setCreateDate(((NSDate)provisionFile.valueForKeyPath("CreationDate")).getDate()); + provision.setExpirationDate(((NSDate)provisionFile.valueForKeyPath("ExpirationDate")).getDate()); + provision.setUUID(provisionFile.stringValueForPath("UUID")); + provision.setType(provision.getDeviceCount() > 0 ? "AdHoc" : "Release"); + } catch (Exception e) { + e.printStackTrace(); + } + return provision; + } } diff --git a/src/main/java/org/yzr/vo/PackageViewModel.java b/src/main/java/org/yzr/vo/PackageViewModel.java index 308b85b..22960e5 100644 --- a/src/main/java/org/yzr/vo/PackageViewModel.java +++ b/src/main/java/org/yzr/vo/PackageViewModel.java @@ -6,7 +6,10 @@ import org.yzr.model.Package; import org.yzr.utils.PathManager; import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; +import java.util.List; @Getter @@ -25,6 +28,9 @@ public class PackageViewModel { private String displaySize; private String displayTime; private boolean iOS; + private String type; + private List devices; + private int deviceCount; public PackageViewModel(Package aPackage, PathManager pathManager) { this.downloadURL = pathManager.getBaseURL(false) + "p/" + aPackage.getId(); @@ -51,6 +57,27 @@ public class PackageViewModel { this.installURL = pathManager.getPackageResourceURL(aPackage, false) + aPackage.getFileName(); } this.previewURL = pathManager.getBaseURL(false) + "s/" + aPackage.getApp().getShortCode() + "?id=" + aPackage.getId(); + if (this.isIOS()) { + if (aPackage.getProvision() == null) { + this.type = "内测版"; + } else { + if (aPackage.getProvision().isEnterprise()) { + this.type = "企业版"; + } else { + if ("AdHoc".equalsIgnoreCase(aPackage.getProvision().getType())) { + this.type = "内测版"; + } else { + this.type = "商店版"; + } + this.deviceCount = aPackage.getProvision().getDeviceCount(); + if (aPackage.getProvision().getDeviceCount() > 0) { + this.devices = Arrays.asList(aPackage.getProvision().getDevices()); + } + } + } + } else { + this.type = "内测版"; + } } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 78d20e1..7249a0e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -41,4 +41,4 @@ server.ssl.key-alias=1 server.port=443 server.http.port=80 config.debug=debug -server.domain=192.168.0.108 \ No newline at end of file +server.domain=127.0.0.1 \ No newline at end of file diff --git a/src/main/resources/templates/devices.html b/src/main/resources/templates/devices.html new file mode 100644 index 0000000..a2f4309 --- /dev/null +++ b/src/main/resources/templates/devices.html @@ -0,0 +1,29 @@ + + + + + + + + + + -设备列表 + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/install.html b/src/main/resources/templates/install.html index ad0a153..de0f6f7 100644 --- a/src/main/resources/templates/install.html +++ b/src/main/resources/templates/install.html @@ -42,7 +42,7 @@ -

内测版

+

[[${app.currentPackage.type}]]

@@ -54,7 +54,7 @@

扫描二维码下载
或用手机浏览器输入这个网址:  [[${app.installPath}]]

-

内测版 - +

[[${app.currentPackage.type}]] - [[${app.version}]] (Build [[${app.buildVersion}]]) - [[${app.currentPackage.displaySize}]]

更新于:

@@ -69,6 +69,10 @@
安装证书
+ diff --git a/src/main/resources/templates/list.html b/src/main/resources/templates/list.html index 2fd8168..c5e4671 100644 --- a/src/main/resources/templates/list.html +++ b/src/main/resources/templates/list.html @@ -108,7 +108,7 @@ [[${app.displayTime}]]   ·   - 内测版 + [[${app.type}]]   ·