Skip to content

Commit 4a794e5

Browse files
committed
Don't use @builder in FinishAssertionSteps and FinishRegistrationSteps
1 parent 869fcc5 commit 4a794e5

File tree

5 files changed

+55
-67
lines changed

5 files changed

+55
-67
lines changed

webauthn-server-core/src/main/java/com/yubico/webauthn/FinishAssertionSteps.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,9 @@
4343
import java.security.spec.InvalidKeySpecException;
4444
import java.util.Optional;
4545
import java.util.Set;
46-
import lombok.Builder;
4746
import lombok.Value;
4847
import lombok.extern.slf4j.Slf4j;
4948

50-
@Builder
5149
@Slf4j
5250
final class FinishAssertionSteps {
5351

@@ -60,10 +58,21 @@ final class FinishAssertionSteps {
6058
private final Set<String> origins;
6159
private final String rpId;
6260
private final CredentialRepository credentialRepository;
63-
64-
@Builder.Default private final boolean allowOriginPort = false;
65-
@Builder.Default private final boolean allowOriginSubdomain = false;
66-
@Builder.Default private final boolean validateSignatureCounter = true;
61+
private final boolean allowOriginPort;
62+
private final boolean allowOriginSubdomain;
63+
private final boolean validateSignatureCounter;
64+
65+
FinishAssertionSteps(RelyingParty rp, FinishAssertionOptions options) {
66+
this.request = options.getRequest();
67+
this.response = options.getResponse();
68+
this.callerTokenBindingId = options.getCallerTokenBindingId();
69+
this.origins = rp.getOrigins();
70+
this.rpId = rp.getIdentity().getId();
71+
this.credentialRepository = rp.getCredentialRepository();
72+
this.allowOriginPort = rp.isAllowOriginPort();
73+
this.allowOriginSubdomain = rp.isAllowOriginSubdomain();
74+
this.validateSignatureCounter = rp.isValidateSignatureCounter();
75+
}
6776

6877
public Step5 begin() {
6978
return new Step5();

webauthn-server-core/src/main/java/com/yubico/webauthn/FinishRegistrationSteps.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,9 @@
6464
import java.util.Optional;
6565
import java.util.Set;
6666
import java.util.stream.Collectors;
67-
import lombok.Builder;
6867
import lombok.Value;
6968
import lombok.extern.slf4j.Slf4j;
7069

71-
@Builder
7270
@Slf4j
7371
final class FinishRegistrationSteps {
7472

@@ -87,9 +85,22 @@ final class FinishRegistrationSteps {
8785
private final Optional<AttestationTrustSource> attestationTrustSource;
8886
private final CredentialRepository credentialRepository;
8987
private final Clock clock;
90-
91-
@Builder.Default private final boolean allowOriginPort = false;
92-
@Builder.Default private final boolean allowOriginSubdomain = false;
88+
private final boolean allowOriginPort;
89+
private final boolean allowOriginSubdomain;
90+
91+
FinishRegistrationSteps(RelyingParty rp, FinishRegistrationOptions options) {
92+
this.request = options.getRequest();
93+
this.response = options.getResponse();
94+
this.callerTokenBindingId = options.getCallerTokenBindingId();
95+
this.origins = rp.getOrigins();
96+
this.rpId = rp.getIdentity().getId();
97+
this.allowUntrustedAttestation = rp.isAllowUntrustedAttestation();
98+
this.attestationTrustSource = rp.getAttestationTrustSource();
99+
this.credentialRepository = rp.getCredentialRepository();
100+
this.clock = rp.getClock();
101+
this.allowOriginPort = rp.isAllowOriginPort();
102+
this.allowOriginSubdomain = rp.isAllowOriginSubdomain();
103+
}
93104

94105
public Step6 begin() {
95106
return new Step6();

webauthn-server-core/src/main/java/com/yubico/webauthn/RelyingParty.java

Lines changed: 6 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,9 @@
2929
import com.yubico.webauthn.attestation.AttestationTrustSource;
3030
import com.yubico.webauthn.data.AssertionExtensionInputs;
3131
import com.yubico.webauthn.data.AttestationConveyancePreference;
32-
import com.yubico.webauthn.data.AuthenticatorAssertionResponse;
33-
import com.yubico.webauthn.data.AuthenticatorAttestationResponse;
3432
import com.yubico.webauthn.data.AuthenticatorData;
3533
import com.yubico.webauthn.data.ByteArray;
36-
import com.yubico.webauthn.data.ClientAssertionExtensionOutputs;
37-
import com.yubico.webauthn.data.ClientRegistrationExtensionOutputs;
3834
import com.yubico.webauthn.data.CollectedClientData;
39-
import com.yubico.webauthn.data.PublicKeyCredential;
4035
import com.yubico.webauthn.data.PublicKeyCredentialCreationOptions;
4136
import com.yubico.webauthn.data.PublicKeyCredentialCreationOptions.PublicKeyCredentialCreationOptionsBuilder;
4237
import com.yubico.webauthn.data.PublicKeyCredentialParameters;
@@ -498,11 +493,7 @@ public PublicKeyCredentialCreationOptions startRegistration(
498493
public RegistrationResult finishRegistration(FinishRegistrationOptions finishRegistrationOptions)
499494
throws RegistrationFailedException {
500495
try {
501-
return _finishRegistration(
502-
finishRegistrationOptions.getRequest(),
503-
finishRegistrationOptions.getResponse(),
504-
finishRegistrationOptions.getCallerTokenBindingId())
505-
.run();
496+
return _finishRegistration(finishRegistrationOptions).run();
506497
} catch (IllegalArgumentException e) {
507498
throw new RegistrationFailedException(e);
508499
}
@@ -515,24 +506,8 @@ public RegistrationResult finishRegistration(FinishRegistrationOptions finishReg
515506
* It is a separate method to facilitate testing; users should call {@link
516507
* #finishRegistration(FinishRegistrationOptions)} instead of this method.
517508
*/
518-
FinishRegistrationSteps _finishRegistration(
519-
PublicKeyCredentialCreationOptions request,
520-
PublicKeyCredential<AuthenticatorAttestationResponse, ClientRegistrationExtensionOutputs>
521-
response,
522-
Optional<ByteArray> callerTokenBindingId) {
523-
return FinishRegistrationSteps.builder()
524-
.request(request)
525-
.response(response)
526-
.callerTokenBindingId(callerTokenBindingId)
527-
.credentialRepository(credentialRepository)
528-
.origins(origins)
529-
.rpId(identity.getId())
530-
.allowOriginPort(allowOriginPort)
531-
.allowOriginSubdomain(allowOriginSubdomain)
532-
.allowUntrustedAttestation(allowUntrustedAttestation)
533-
.attestationTrustSource(attestationTrustSource)
534-
.clock(clock)
535-
.build();
509+
FinishRegistrationSteps _finishRegistration(FinishRegistrationOptions options) {
510+
return new FinishRegistrationSteps(this, options);
536511
}
537512

538513
public AssertionRequest startAssertion(StartAssertionOptions startAssertionOptions) {
@@ -576,11 +551,7 @@ public AssertionRequest startAssertion(StartAssertionOptions startAssertionOptio
576551
public AssertionResult finishAssertion(FinishAssertionOptions finishAssertionOptions)
577552
throws AssertionFailedException {
578553
try {
579-
return _finishAssertion(
580-
finishAssertionOptions.getRequest(),
581-
finishAssertionOptions.getResponse(),
582-
finishAssertionOptions.getCallerTokenBindingId())
583-
.run();
554+
return _finishAssertion(finishAssertionOptions).run();
584555
} catch (IllegalArgumentException e) {
585556
throw new AssertionFailedException(e);
586557
}
@@ -593,22 +564,8 @@ public AssertionResult finishAssertion(FinishAssertionOptions finishAssertionOpt
593564
* a separate method to facilitate testing; users should call {@link
594565
* #finishAssertion(FinishAssertionOptions)} instead of this method.
595566
*/
596-
FinishAssertionSteps _finishAssertion(
597-
AssertionRequest request,
598-
PublicKeyCredential<AuthenticatorAssertionResponse, ClientAssertionExtensionOutputs> response,
599-
Optional<ByteArray> callerTokenBindingId // = None.asJava
600-
) {
601-
return FinishAssertionSteps.builder()
602-
.request(request)
603-
.response(response)
604-
.callerTokenBindingId(callerTokenBindingId)
605-
.origins(origins)
606-
.rpId(identity.getId())
607-
.credentialRepository(credentialRepository)
608-
.allowOriginPort(allowOriginPort)
609-
.allowOriginSubdomain(allowOriginSubdomain)
610-
.validateSignatureCounter(validateSignatureCounter)
611-
.build();
567+
FinishAssertionSteps _finishAssertion(FinishAssertionOptions options) {
568+
return new FinishAssertionSteps(this, options);
612569
}
613570

614571
public static RelyingPartyBuilder.MandatoryStages builder() {

webauthn-server-core/src/test/scala/com/yubico/webauthn/RelyingPartyAssertionSpec.scala

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,9 +277,15 @@ class RelyingPartyAssertionSpec
277277

278278
origins.map(_.asJava).foreach(builder.origins _)
279279

280+
val fao = FinishAssertionOptions
281+
.builder()
282+
.request(request)
283+
.response(response)
284+
.callerTokenBindingId(callerTokenBindingId.toJava)
285+
280286
builder
281287
.build()
282-
._finishAssertion(request, response, callerTokenBindingId.toJava)
288+
._finishAssertion(fao.build())
283289
}
284290

285291
testWithEachProvider { it =>

webauthn-server-core/src/test/scala/com/yubico/webauthn/RelyingPartyRegistrationSpec.scala

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -175,17 +175,22 @@ class RelyingPartyRegistrationSpec
175175

176176
origins.map(_.asJava).foreach(builder.origins _)
177177

178-
builder
179-
.build()
180-
._finishRegistration(
178+
val fro = FinishRegistrationOptions
179+
.builder()
180+
.request(
181181
pubkeyCredParams
182182
.map(pkcp =>
183183
testData.request.toBuilder.pubKeyCredParams(pkcp.asJava).build()
184184
)
185-
.getOrElse(testData.request),
186-
testData.response,
187-
callerTokenBindingId.toJava,
185+
.getOrElse(testData.request)
188186
)
187+
.response(testData.response)
188+
.callerTokenBindingId(callerTokenBindingId.toJava)
189+
.build()
190+
191+
builder
192+
.build()
193+
._finishRegistration(fro)
189194
}
190195

191196
val emptyTrustSource = new AttestationTrustSource {

0 commit comments

Comments
 (0)