@@ -129,21 +129,29 @@ private Optional<SigningIdentity> validatedSigningIdentity() throws ConfigExcept
129
129
}).forEach (acc ::accept );
130
130
}).toList ();
131
131
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 ();
133
141
134
142
var matchingCertificates = mappedCertficates .stream ().filter (e -> {
135
143
return resolvedCertificateSelectors .contains (e .getKey ());
136
144
}).map (Map .Entry ::getValue ).toList ();
137
145
138
146
if (!matchingCertificates .isEmpty ()) {
139
- signingIdentityHash = selectSigningIdentity (matchingCertificates , certificateSelectors , validatedKeychain );
147
+ signingIdentityHash = selectSigningIdentity (matchingCertificates , allCertificateSelectors , validatedKeychain );
140
148
} else {
141
149
matchingCertificates = mappedCertficates .stream ().filter (e -> {
142
150
return resolvedCertificateSelectors .stream ().anyMatch (filter -> {
143
151
return filter .startsWith (e .getKey ());
144
152
});
145
153
}).map (Map .Entry ::getValue ).toList ();
146
- signingIdentityHash = selectSigningIdentity (matchingCertificates , certificateSelectors , validatedKeychain );
154
+ signingIdentityHash = selectSigningIdentity (matchingCertificates , allCertificateSelectors , validatedKeychain );
147
155
}
148
156
149
157
return Optional .of (new SigningIdentityImpl (signingIdentityHash .toString (),
@@ -161,8 +169,8 @@ private static CertificateHash selectSigningIdentity(List<X509Certificate> certs
161
169
return CertificateHash .of (certs .getFirst ());
162
170
}
163
171
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 ("" )));
166
174
return CertificateHash .of (certs .getFirst ());
167
175
}
168
176
}
@@ -181,38 +189,17 @@ private static List<String> findSubjectCNs(X509Certificate cert) {
181
189
}).map (Rdn ::getValue ).map (Object ::toString ).toList ();
182
190
}
183
191
184
- record CertificateSelector (StandardCertificatePrefix prefix , Optional < String > team ) {
192
+ record CertificateSelector (String prefix , String name ) {
185
193
CertificateSelector {
186
194
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
+ }
209
199
}
210
200
211
201
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 ;
216
203
}
217
204
}
218
205
@@ -223,13 +210,22 @@ enum StandardCertificatePrefix {
223
210
INSTALLER_SIGN_PERSONAL ("Developer ID Installer" );
224
211
225
212
StandardCertificatePrefix (String value ) {
226
- this .value = value ;
213
+ this .value = value + ": " ;
227
214
}
228
215
229
216
String value () {
230
217
return value ;
231
218
}
232
219
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
+
233
229
private final String value ;
234
230
}
235
231
@@ -244,9 +240,11 @@ enum StandardCertificateSelector {
244
240
}
245
241
246
242
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 (() -> {
248
246
return defaultSelector .prefixes .stream ().map (prefix -> {
249
- return new CertificateSelector (prefix , certificateName );
247
+ return new CertificateSelector (prefix . value () , certificateName . orElse ( "" ) );
250
248
}).toList ();
251
249
});
252
250
}
0 commit comments