Skip to content

Commit b91d009

Browse files
More signing tests pass
1 parent f162a14 commit b91d009

File tree

1 file changed

+33
-35
lines changed

1 file changed

+33
-35
lines changed

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

Lines changed: 33 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -129,21 +129,29 @@ private Optional<SigningIdentity> validatedSigningIdentity() throws ConfigExcept
129129
}).forEach(acc::accept);
130130
}).toList();
131131

132-
final var resolvedCertificateSelectors = certificateSelectors.stream().map(CertificateSelector::fullName).toList();
132+
final List<CertificateSelector> allCertificateSelectors;
133+
if (signingIdentity != null) {
134+
allCertificateSelectors = new ArrayList<>(certificateSelectors);
135+
allCertificateSelectors.add(new CertificateSelector("", signingIdentity));
136+
} else {
137+
allCertificateSelectors = certificateSelectors;
138+
}
139+
140+
final var resolvedCertificateSelectors = allCertificateSelectors.stream().map(CertificateSelector::fullName).toList();
133141

134142
var matchingCertificates = mappedCertficates.stream().filter(e -> {
135143
return resolvedCertificateSelectors.contains(e.getKey());
136144
}).map(Map.Entry::getValue).toList();
137145

138146
if (!matchingCertificates.isEmpty()) {
139-
signingIdentityHash = selectSigningIdentity(matchingCertificates, certificateSelectors, validatedKeychain);
147+
signingIdentityHash = selectSigningIdentity(matchingCertificates, allCertificateSelectors, validatedKeychain);
140148
} else {
141149
matchingCertificates = mappedCertficates.stream().filter(e -> {
142150
return resolvedCertificateSelectors.stream().anyMatch(filter -> {
143151
return filter.startsWith(e.getKey());
144152
});
145153
}).map(Map.Entry::getValue).toList();
146-
signingIdentityHash = selectSigningIdentity(matchingCertificates, certificateSelectors, validatedKeychain);
154+
signingIdentityHash = selectSigningIdentity(matchingCertificates, allCertificateSelectors, validatedKeychain);
147155
}
148156

149157
return Optional.of(new SigningIdentityImpl(signingIdentityHash.toString(),
@@ -161,8 +169,8 @@ private static CertificateHash selectSigningIdentity(List<X509Certificate> certs
161169
return CertificateHash.of(certs.getFirst());
162170
}
163171
default -> {
164-
Log.error(I18N.format("error.multiple.certs.found",
165-
certificateSelectors.getFirst().team().orElse(""), keychain.map(Keychain::name).orElse("")));
172+
Log.error(I18N.format("error.multiple.certs.found", certificateSelectors.getFirst().name(),
173+
keychain.map(Keychain::name).orElse("")));
166174
return CertificateHash.of(certs.getFirst());
167175
}
168176
}
@@ -181,38 +189,17 @@ private static List<String> findSubjectCNs(X509Certificate cert) {
181189
}).map(Rdn::getValue).map(Object::toString).toList();
182190
}
183191

184-
record CertificateSelector(StandardCertificatePrefix prefix, Optional<String> team) {
192+
record CertificateSelector(String prefix, String name) {
185193
CertificateSelector {
186194
Objects.requireNonNull(prefix);
187-
Objects.requireNonNull(team);
188-
team.ifPresent(v -> {
189-
if (v.isEmpty()) {
190-
throw new IllegalArgumentException();
191-
}
192-
});
193-
}
194-
195-
CertificateSelector(StandardCertificatePrefix prefix) {
196-
this(prefix, Optional.empty());
197-
}
198-
199-
static Optional<CertificateSelector> createFromFullName(String fullName) {
200-
Objects.requireNonNull(fullName);
201-
return Stream.of(StandardCertificatePrefix.values()).map(CertificateSelector::new).filter(selector -> {
202-
return fullName.startsWith(selector.fullName());
203-
}).reduce((x, y) -> {
204-
throw new UnsupportedOperationException();
205-
}).map(selector -> {
206-
final var team = fullName.substring(selector.fullName().length());
207-
return new CertificateSelector(selector.prefix, team.isEmpty() ? Optional.empty() : Optional.of(team));
208-
});
195+
Objects.requireNonNull(name);
196+
if (prefix.isEmpty() && name.isEmpty()) {
197+
throw new IllegalArgumentException("Empty prefix and name");
198+
}
209199
}
210200

211201
String fullName() {
212-
final var sb = new StringBuilder();
213-
sb.append(prefix.value()).append(": ");
214-
team.ifPresent(sb::append);
215-
return sb.toString();
202+
return prefix + name;
216203
}
217204
}
218205

@@ -223,13 +210,22 @@ enum StandardCertificatePrefix {
223210
INSTALLER_SIGN_PERSONAL("Developer ID Installer");
224211

225212
StandardCertificatePrefix(String value) {
226-
this.value = value;
213+
this.value = value + ": ";
227214
}
228215

229216
String value() {
230217
return value;
231218
}
232219

220+
static Optional<StandardCertificatePrefix> findStandardCertificatePrefix(String fullName) {
221+
Objects.requireNonNull(fullName);
222+
return Stream.of(StandardCertificatePrefix.values()).filter(prefix -> {
223+
return fullName.startsWith(prefix.value);
224+
}).reduce((x, y) -> {
225+
throw new UnsupportedOperationException();
226+
});
227+
}
228+
233229
private final String value;
234230
}
235231

@@ -244,9 +240,11 @@ enum StandardCertificateSelector {
244240
}
245241

246242
static List<CertificateSelector> create(Optional<String> certificateName, StandardCertificateSelector defaultSelector) {
247-
return certificateName.flatMap(CertificateSelector::createFromFullName).map(List::of).orElseGet(() -> {
243+
return certificateName.flatMap(StandardCertificatePrefix::findStandardCertificatePrefix).map(prefix -> {
244+
return new CertificateSelector(prefix.value(), certificateName.orElseThrow().substring(prefix.value().length()));
245+
}).map(List::of).orElseGet(() -> {
248246
return defaultSelector.prefixes.stream().map(prefix -> {
249-
return new CertificateSelector(prefix, certificateName);
247+
return new CertificateSelector(prefix.value(), certificateName.orElse(""));
250248
}).toList();
251249
});
252250
}

0 commit comments

Comments
 (0)