Skip to content

Commit 1b55e1b

Browse files
committed
Use Optional in CertificateData
WE2-931 Signed-off-by: Mart Somermaa <[email protected]>
1 parent 3db96fd commit 1b55e1b

File tree

3 files changed

+22
-15
lines changed

3 files changed

+22
-15
lines changed

example/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<properties>
2020
<java.version>17</java.version>
2121
<maven-surefire-plugin.version>3.2.5</maven-surefire-plugin.version>
22-
<webeid.version>3.0.1</webeid.version>
22+
<webeid.version>3.0.2-SNAPSHOT</webeid.version>
2323
<digidoc4j.version>5.3.0</digidoc4j.version>
2424
<jmockit.version>1.44</jmockit.version>
2525
<jib.version>3.4.2</jib.version>

example/src/main/java/eu/webeid/example/security/WebEidAuthentication.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,25 @@
2222

2323
package eu.webeid.example.security;
2424

25+
import eu.webeid.security.certificate.CertificateData;
2526
import org.springframework.security.core.Authentication;
2627
import org.springframework.security.core.GrantedAuthority;
2728
import org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken;
28-
import eu.webeid.security.certificate.CertificateData;
2929

3030
import java.security.cert.CertificateEncodingException;
3131
import java.security.cert.X509Certificate;
3232
import java.util.List;
3333
import java.util.Objects;
34+
import java.util.Optional;
3435

3536
public class WebEidAuthentication extends PreAuthenticatedAuthenticationToken implements Authentication {
3637

3738
private final String idCode;
3839

3940
public static Authentication fromCertificate(X509Certificate userCertificate, List<GrantedAuthority> authorities) throws CertificateEncodingException {
4041
final String principalName = getPrincipalNameFromCertificate(userCertificate);
41-
final String idCode = Objects.requireNonNull(CertificateData.getSubjectIdCode(userCertificate));
42+
final String idCode = CertificateData.getSubjectIdCode(userCertificate)
43+
.orElseThrow(() -> new CertificateEncodingException("Certificate does not contain subject ID code"));
4244
return new WebEidAuthentication(principalName, idCode, authorities);
4345
}
4446

@@ -52,12 +54,15 @@ private WebEidAuthentication(String principalName, String idCode, List<GrantedAu
5254
}
5355

5456
private static String getPrincipalNameFromCertificate(X509Certificate userCertificate) throws CertificateEncodingException {
55-
try {
56-
return Objects.requireNonNull(CertificateData.getSubjectGivenName(userCertificate)) + ' ' +
57-
Objects.requireNonNull(CertificateData.getSubjectSurname(userCertificate));
58-
} catch (CertificateEncodingException e) {
57+
final Optional<String> givenName = CertificateData.getSubjectGivenName(userCertificate);
58+
final Optional<String> surname = CertificateData.getSubjectSurname(userCertificate);
59+
60+
if (givenName.isPresent() && surname.isPresent()) {
61+
return givenName.get() + ' ' + surname.get();
62+
} else {
5963
// Organization certificates do not have given name and surname fields.
60-
return Objects.requireNonNull(CertificateData.getSubjectCN(userCertificate));
64+
return CertificateData.getSubjectCN(userCertificate)
65+
.orElseThrow(() -> new CertificateEncodingException("Certificate does not contain subject CN"));
6166
}
6267
}
6368

example/src/main/java/eu/webeid/example/service/SigningService.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,15 +90,17 @@ private HttpSession currentSession() {
9090
* @return data to be signed
9191
*/
9292
public DigestDTO prepareContainer(CertificateDTO certificateDTO, WebEidAuthentication authentication) throws CertificateException, NoSuchAlgorithmException, IOException {
93-
X509Certificate certificate = certificateDTO.toX509Certificate();
94-
if (!authentication.getIdCode().equals(CertificateData.getSubjectIdCode(certificate))) {
93+
final X509Certificate certificate = certificateDTO.toX509Certificate();
94+
final String signingIdCode = CertificateData.getSubjectIdCode(certificate)
95+
.orElseThrow(() -> new RuntimeException("Certificate does not contain subject ID code"));
96+
if (!signingIdCode.equals(authentication.getIdCode())) {
9597
throw new IllegalArgumentException("Authenticated subject ID code differs from " +
9698
"signing certificate subject ID code");
9799
}
98100

99-
FileDTO fileDTO = FileDTO.getExampleForSigningFromResources();
100-
Container containerToSign = getContainerToSign(fileDTO);
101-
String containerName = generateContainerName(fileDTO.getName());
101+
final FileDTO fileDTO = FileDTO.getExampleForSigningFromResources();
102+
final Container containerToSign = getContainerToSign(fileDTO);
103+
final String containerName = generateContainerName(fileDTO.getName());
102104

103105
currentSession().setAttribute(SESSION_ATTR_CONTAINER, containerToSign);
104106
currentSession().setAttribute(SESSION_ATTR_FILE, fileDTO);
@@ -113,7 +115,7 @@ public DigestDTO prepareContainer(CertificateDTO certificateDTO, WebEidAuthentic
113115
"' is not supported. Supported algorithms are: " + String.join(", ", certificateDTO.getSupportedHashFunctionNames()));
114116
}
115117

116-
DataToSign dataToSign = SignatureBuilder
118+
final DataToSign dataToSign = SignatureBuilder
117119
.aSignature(containerToSign)
118120
.withSignatureProfile(SignatureProfile.LT) // AIA OCSP is supported for signatures with LT or LTA profile.
119121
.withSigningCertificate(certificate)
@@ -127,7 +129,7 @@ public DigestDTO prepareContainer(CertificateDTO certificateDTO, WebEidAuthentic
127129
final byte[] digest = signatureDigestAlgorithm.getDssDigestAlgorithm().getMessageDigest()
128130
.digest(dataToSign.getDataToSign());
129131

130-
DigestDTO digestDTO = new DigestDTO();
132+
final DigestDTO digestDTO = new DigestDTO();
131133
digestDTO.setHash(DatatypeConverter.printBase64Binary(digest));
132134
digestDTO.setHashFunction(digestAlgorithmName);
133135

0 commit comments

Comments
 (0)