Skip to content

Instantly share code, notes, and snippets.

@emlun
Created January 9, 2019 15:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save emlun/c204081f213b1b0b6a31e0e6610d02f0 to your computer and use it in GitHub Desktop.
Save emlun/c204081f213b1b0b6a31e0e6610d02f0 to your computer and use it in GitHub Desktop.
Strict @builder example
// Copyright (c) 2018, Yubico AB
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package com.yubico.webauthn.data;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import lombok.Builder;
import lombok.NonNull;
import lombok.Value;
/**
* Parameters for a call to <code>navigator.credentials.create()</code>.
*
* @see <a href="https://w3c.github.io/webauthn/#dictdef-publickeycredentialcreationoptions">§5.4. Options for
* Credential Creation (dictionary PublicKeyCredentialCreationOptions)</a>
*/
@Value
@Builder
public class PublicKeyCredentialCreationOptions {
@NonNull private final RelyingPartyIdentity rp;
@NonNull private final UserIdentity user;
@NonNull private final ByteArray challenge;
@NonNull private final List<PublicKeyCredentialParameters> pubKeyCredParams;
@NonNull @Builder.Default private final Optional<Long> timeout = Optional.empty();
@NonNull @Builder.Default private final Optional<Set<PublicKeyCredentialDescriptor>> excludeCredentials = Optional.empty();
@NonNull @Builder.Default private final Optional<AuthenticatorSelectionCriteria> authenticatorSelection = Optional.empty();
@NonNull @Builder.Default private final AttestationConveyancePreference attestation = AttestationConveyancePreference.DEFAULT;
@NonNull @Builder.Default private final RegistrationExtensionInputs extensions = RegistrationExtensionInputs.builder().build();
public static PublicKeyCredentialCreationOptionsBuilder.MandatoryStages builder() {
return new PublicKeyCredentialCreationOptionsBuilder.MandatoryStages();
}
public static class PublicKeyCredentialCreationOptionsBuilder {
public static class MandatoryStages {
private PublicKeyCredentialCreationOptionsBuilder builder = new PublicKeyCredentialCreationOptionsBuilder();
public Step2 rp(RelyingPartyIdentity rp) {
builder.rp(rp);
return new Step2();
}
public class Step2 {
public Step3 user(UserIdentity user) {
builder.user(user);
return new Step3();
}
}
public class Step3 {
public Step4 challenge(ByteArray challenge) {
builder.challenge(challenge);
return new Step4();
}
}
public class Step4 {
public PublicKeyCredentialCreationOptionsBuilder pubKeyCredParams(List<PublicKeyCredentialParameters> pubKeyCredParams) {
return builder.pubKeyCredParams(pubKeyCredParams);
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment