Skip to content

Commit f9e3dd3

Browse files
Most .pkg signing tests pass
1 parent d8d9d91 commit f9e3dd3

File tree

4 files changed

+71
-17
lines changed

4 files changed

+71
-17
lines changed

src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacApplicationBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ private MacApplicationBuilder createCopyForExternalInfoPlistFile() throws Config
156156

157157
private Optional<SigningConfig> createSigningConfig() throws ConfigException {
158158
if (signingBuilder != null) {
159-
return Optional.of(signingBuilder.create());
159+
return signingBuilder.create();
160160
} else {
161161
return Optional.empty();
162162
}

src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacFromParams.java

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,18 +55,19 @@
5555
import java.util.Map;
5656
import java.util.Optional;
5757
import java.util.function.Predicate;
58+
import jdk.jpackage.internal.ApplicationBuilder.MainLauncherStartupInfo;
5859
import jdk.jpackage.internal.SigningConfigBuilder.StandardCertificateSelector;
60+
import jdk.jpackage.internal.model.Application;
61+
import jdk.jpackage.internal.model.ApplicationLaunchers;
5962
import jdk.jpackage.internal.model.ConfigException;
6063
import jdk.jpackage.internal.model.FileAssociation;
61-
import jdk.jpackage.internal.model.ApplicationLaunchers;
6264
import jdk.jpackage.internal.model.Launcher;
6365
import jdk.jpackage.internal.model.MacApplication;
6466
import jdk.jpackage.internal.model.MacDmgPackage;
6567
import jdk.jpackage.internal.model.MacFileAssociation;
6668
import jdk.jpackage.internal.model.MacLauncher;
6769
import jdk.jpackage.internal.model.MacPkgPackage;
6870
import jdk.jpackage.internal.model.RuntimeLayout;
69-
import static jdk.jpackage.internal.ApplicationBuilder.MainLauncherStartupInfo;
7071

7172

7273
final class MacFromParams {
@@ -128,16 +129,24 @@ private static MacApplication createMacApplication(
128129
appBuilder.appStore(appStore);
129130

130131
if (sign) {
131-
final var signingBuilder = new SigningConfigBuilder();
132-
app.mainLauncher().flatMap(Launcher::startupInfo).ifPresent(signingBuilder::signingIdentityPrefix);
133-
BUNDLE_ID_SIGNING_PREFIX.copyInto(params, signingBuilder::signingIdentityPrefix);
134-
SIGNING_KEYCHAIN.copyInto(params, signingBuilder::keychain);
132+
final var signingBuilder = createSigningConfigBuilder(params, app);
133+
if (appStore) {
134+
signingBuilder.entitlementsResourceName("entitlements.plist");
135+
}
136+
135137
ENTITLEMENTS.copyInto(params, signingBuilder::entitlements);
136138
APP_IMAGE_SIGN_IDENTITY.copyInto(params, signingBuilder::signingIdentity);
137139

138-
final var filter = appStore ? StandardCertificateSelector.APP_STORE_APP_IMAGE : StandardCertificateSelector.APP_IMAGE;
140+
SIGNING_KEY_USER.findIn(params).ifPresent(userName -> {
141+
final StandardCertificateSelector filter;
142+
if (appStore) {
143+
filter = StandardCertificateSelector.APP_STORE_APP_IMAGE;
144+
} else {
145+
filter = StandardCertificateSelector.APP_IMAGE;
146+
}
139147

140-
signingBuilder.addCertificateSelectors(StandardCertificateSelector.create(SIGNING_KEY_USER.findIn(params), filter));
148+
signingBuilder.addCertificateSelectors(StandardCertificateSelector.create(userName, filter));
149+
});
141150

142151
appBuilder.signingBuilder(signingBuilder);
143152
}
@@ -168,9 +177,40 @@ private static MacPkgPackage createMacPkgPackage(
168177

169178
final var pkgBuilder = new MacPkgPackageBuilder(superPkgBuilder);
170179

180+
final boolean sign = SIGN_BUNDLE.findIn(params).orElse(false);
181+
final boolean appStore = APP_STORE.findIn(params).orElse(false);
182+
183+
if (sign) {
184+
final var signingBuilder = createSigningConfigBuilder(params, app);
185+
INSTALLER_SIGN_IDENTITY.copyInto(params, signingBuilder::signingIdentity);
186+
187+
SIGNING_KEY_USER.findIn(params).ifPresent(userName -> {
188+
final List<StandardCertificateSelector> filters;
189+
if (appStore) {
190+
filters = List.of(StandardCertificateSelector.APP_STORE_PKG_INSTALLER);
191+
} else {
192+
filters = List.of(StandardCertificateSelector.PKG_INSTALLER);
193+
}
194+
195+
for (final var filter : filters) {
196+
signingBuilder.addCertificateSelectors(StandardCertificateSelector.create(userName, filter));
197+
}
198+
});
199+
200+
pkgBuilder.signingBuilder(signingBuilder);
201+
}
202+
171203
return pkgBuilder.create();
172204
}
173205

206+
private static SigningConfigBuilder createSigningConfigBuilder(Map<String, ? super Object> params, Application app) {
207+
final var builder = new SigningConfigBuilder();
208+
app.mainLauncher().flatMap(Launcher::startupInfo).ifPresent(builder::signingIdentityPrefix);
209+
BUNDLE_ID_SIGNING_PREFIX.copyInto(params, builder::signingIdentityPrefix);
210+
SIGNING_KEYCHAIN.copyInto(params, builder::keychain);
211+
return builder;
212+
}
213+
174214
private static MacFileAssociation createMacFa(FileAssociation fa, Map<String, ? super Object> params) {
175215

176216
final var builder = new MacFileAssociationBuilder();
@@ -216,6 +256,9 @@ private static MacFileAssociation createMacFa(FileAssociation fa, Map<String, ?
216256
static final BundlerParamInfo<String> APP_IMAGE_SIGN_IDENTITY = createStringBundlerParam(
217257
Arguments.CLIOptions.MAC_APP_IMAGE_SIGN_IDENTITY.getId());
218258

259+
static final BundlerParamInfo<String> INSTALLER_SIGN_IDENTITY = createStringBundlerParam(
260+
Arguments.CLIOptions.MAC_INSTALLER_SIGN_IDENTITY.getId());
261+
219262
private static final BundlerParamInfo<String> PACKAGE_TYPE = createStringBundlerParam(
220263
Arguments.CLIOptions.PACKAGE_TYPE.getId());
221264

src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/MacPkgPackageBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ MacPkgPackage create() throws ConfigException {
5050

5151
private Optional<SigningConfig> createSigningConfig() throws ConfigException {
5252
if (signingBuilder != null) {
53-
return Optional.of(signingBuilder.create());
53+
return signingBuilder.create();
5454
} else {
5555
return Optional.empty();
5656
}

src/jdk.jpackage/macosx/classes/jdk/jpackage/internal/SigningConfigBuilder.java

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,19 @@ SigningConfigBuilder entitlements(Path v) {
8787
return this;
8888
}
8989

90-
SigningConfig create() throws ConfigException {
91-
return new SigningConfig.Stub(validatedSigningIdentity(), validatedEntitlements(),
92-
validatedKeychain().map(Keychain::name), "sandbox.plist");
90+
SigningConfigBuilder entitlementsResourceName(String v) {
91+
entitlementsResourceName = v;
92+
return this;
93+
}
94+
95+
Optional<SigningConfig> create() throws ConfigException {
96+
if (signingIdentity == null && certificateSelectors.isEmpty()) {
97+
return Optional.empty();
98+
} else {
99+
return Optional.of(new SigningConfig.Stub(validatedSigningIdentity(), validatedEntitlements(),
100+
validatedKeychain().map(Keychain::name),
101+
Optional.ofNullable(entitlementsResourceName).orElse("sandbox.plist")));
102+
}
93103
}
94104

95105
private Optional<Path> validatedEntitlements() throws ConfigException {
@@ -239,12 +249,12 @@ enum StandardCertificateSelector {
239249
this.prefixes = List.of(prefixes);
240250
}
241251

242-
static List<CertificateSelector> create(Optional<String> certificateName, StandardCertificateSelector defaultSelector) {
243-
return certificateName.flatMap(StandardCertificatePrefix::findStandardCertificatePrefix).map(prefix -> {
244-
return new CertificateSelector(prefix.value(), certificateName.orElseThrow().substring(prefix.value().length()));
252+
static List<CertificateSelector> create(String certificateName, StandardCertificateSelector defaultSelector) {
253+
return StandardCertificatePrefix.findStandardCertificatePrefix(certificateName).map(prefix -> {
254+
return new CertificateSelector(prefix.value(), certificateName.substring(prefix.value().length()));
245255
}).map(List::of).orElseGet(() -> {
246256
return defaultSelector.prefixes.stream().map(prefix -> {
247-
return new CertificateSelector(prefix.value(), certificateName.orElse(""));
257+
return new CertificateSelector(prefix.value(), certificateName);
248258
}).toList();
249259
});
250260
}
@@ -257,4 +267,5 @@ static List<CertificateSelector> create(Optional<String> certificateName, Standa
257267
private List<CertificateSelector> certificateSelectors = new ArrayList<>();
258268
private String keychain;
259269
private Path entitlements;
270+
private String entitlementsResourceName;
260271
}

0 commit comments

Comments
 (0)