This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
package webauthn
|
||||
|
||||
import "github.com/go-webauthn/webauthn/protocol"
|
||||
|
||||
// WithCredentialParameters adjusts the credential parameters in the registration options.
|
||||
//
|
||||
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn/#dom-publickeycredentialcreationoptions-pubkeycredparams)
|
||||
func WithCredentialParameters(credentialParams []protocol.CredentialParameter) RegistrationOption {
|
||||
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
||||
cco.Parameters = credentialParams
|
||||
}
|
||||
}
|
||||
|
||||
// WithExclusions adjusts the non-default parameters regarding credentials to exclude from registration.
|
||||
//
|
||||
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn/#dom-publickeycredentialcreationoptions-excludecredentials)
|
||||
func WithExclusions(excludeList []protocol.CredentialDescriptor) RegistrationOption {
|
||||
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
||||
cco.CredentialExcludeList = excludeList
|
||||
}
|
||||
}
|
||||
|
||||
// WithAuthenticatorSelection adjusts the non-default parameters regarding the authenticator to select during
|
||||
// registration.
|
||||
//
|
||||
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn/#dom-publickeycredentialcreationoptions-authenticatorselection)
|
||||
//
|
||||
// Specification: §5.4.4. Authenticator Selection Criteria (https://www.w3.org/TR/webauthn/#dictdef-authenticatorselectioncriteria)
|
||||
func WithAuthenticatorSelection(authenticatorSelection protocol.AuthenticatorSelection) RegistrationOption {
|
||||
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
||||
cco.AuthenticatorSelection = authenticatorSelection
|
||||
}
|
||||
}
|
||||
|
||||
// WithResidentKeyRequirement sets both the resident key and require resident key protocol options.
|
||||
//
|
||||
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn/#dom-publickeycredentialcreationoptions-authenticatorselection)
|
||||
//
|
||||
// Specification: §5.4.4. Authenticator Selection Criteria (https://www.w3.org/TR/webauthn/#dictdef-authenticatorselectioncriteria)
|
||||
func WithResidentKeyRequirement(requirement protocol.ResidentKeyRequirement) RegistrationOption {
|
||||
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
||||
cco.AuthenticatorSelection.ResidentKey = requirement
|
||||
|
||||
switch requirement {
|
||||
case protocol.ResidentKeyRequirementRequired:
|
||||
cco.AuthenticatorSelection.RequireResidentKey = protocol.ResidentKeyRequired()
|
||||
default:
|
||||
cco.AuthenticatorSelection.RequireResidentKey = protocol.ResidentKeyNotRequired()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// WithPublicKeyCredentialHints adjusts the non-default hints for credential types to select during registration.
|
||||
//
|
||||
// WebAuthn Level 3.
|
||||
//
|
||||
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn-3/#dom-publickeycredentialcreationoptions-hints)
|
||||
func WithPublicKeyCredentialHints(hints []protocol.PublicKeyCredentialHints) RegistrationOption {
|
||||
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
||||
cco.Hints = hints
|
||||
}
|
||||
}
|
||||
|
||||
// WithConveyancePreference adjusts the non-default parameters regarding whether the authenticator should attest to the
|
||||
// credential.
|
||||
//
|
||||
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn/#dom-publickeycredentialcreationoptions-attestation)
|
||||
func WithConveyancePreference(preference protocol.ConveyancePreference) RegistrationOption {
|
||||
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
||||
cco.Attestation = preference
|
||||
}
|
||||
}
|
||||
|
||||
// WithAttestationFormats adjusts the non-default formats for credential types to select during registration.
|
||||
//
|
||||
// WebAuthn Level 3.
|
||||
//
|
||||
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn-3/#dom-publickeycredentialcreationoptions-attestationformats)
|
||||
func WithAttestationFormats(formats []protocol.AttestationFormat) RegistrationOption {
|
||||
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
||||
cco.AttestationFormats = formats
|
||||
}
|
||||
}
|
||||
|
||||
// WithExtensions adjusts the extension parameter in the registration options.
|
||||
//
|
||||
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn-3/#dom-publickeycredentialcreationoptions-extensions)
|
||||
//
|
||||
// Specification: §9. Extensions (https://www.w3.org/TR/webauthn/#webauthn-extensions)
|
||||
func WithExtensions(extension protocol.AuthenticationExtensions) RegistrationOption {
|
||||
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
||||
cco.Extensions = extension
|
||||
}
|
||||
}
|
||||
|
||||
// WithAppIdExcludeExtension automatically includes the specified appid if the CredentialExcludeList contains a credential
|
||||
// with the type `fido-u2f`.
|
||||
//
|
||||
// Specification: §5.4. Parameters for Credential Generation (https://www.w3.org/TR/webauthn-3/#dom-publickeycredentialcreationoptions-extensions)
|
||||
//
|
||||
// Specification: §9. Extensions (https://www.w3.org/TR/webauthn/#webauthn-extensions)
|
||||
//
|
||||
// Specification: §10.1.2. FIDO AppID Exclusion Extension (https://www.w3.org/TR/webauthn/#sctn-appid-exclude-extension)
|
||||
func WithAppIdExcludeExtension(appid string) RegistrationOption {
|
||||
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
||||
for _, credential := range cco.CredentialExcludeList {
|
||||
if credential.AttestationFormat == string(protocol.AttestationFormatFIDOUniversalSecondFactor) {
|
||||
if cco.Extensions == nil {
|
||||
cco.Extensions = map[string]any{}
|
||||
}
|
||||
|
||||
cco.Extensions[protocol.ExtensionAppIDExclude] = appid
|
||||
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// WithRegistrationRelyingPartyID sets the relying party id for the registration.
|
||||
func WithRegistrationRelyingPartyID(id string) RegistrationOption {
|
||||
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
||||
cco.RelyingParty.ID = id
|
||||
}
|
||||
}
|
||||
|
||||
// WithRegistrationRelyingPartyName sets the relying party name for the registration.
|
||||
func WithRegistrationRelyingPartyName(name string) RegistrationOption {
|
||||
return func(cco *protocol.PublicKeyCredentialCreationOptions) {
|
||||
cco.RelyingParty.Name = name
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user