1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package webauthn
-
- import (
- "fmt"
- "net/url"
-
- "github.com/duo-labs/webauthn/protocol"
- )
-
- var defaultTimeout = 60000
-
- // WebAuthn is the primary interface of this package and contains the request handlers that should be called.
- type WebAuthn struct {
- Config *Config
- }
-
- // The config values required for proper
- type Config struct {
- RPDisplayName string
- RPID string
- RPOrigin string
- RPIcon string
- // Defaults for generating options
- AttestationPreference protocol.ConveyancePreference
- AuthenticatorSelection protocol.AuthenticatorSelection
-
- Timeout int
- Debug bool
- }
-
- // Validate that the config flags in Config are properly set
- func (config *Config) validate() error {
- if len(config.RPDisplayName) == 0 {
- return fmt.Errorf("Missing RPDisplayName")
- }
-
- if len(config.RPID) == 0 {
- return fmt.Errorf("Missing RPID")
- }
-
- _, err := url.Parse(config.RPID)
- if err != nil {
- return fmt.Errorf("RPID not valid URI: %+v", err)
- }
-
- if config.Timeout == 0 {
- config.Timeout = defaultTimeout
- }
-
- if config.RPOrigin == "" {
- config.RPOrigin = config.RPID
- } else {
- u, err := url.Parse(config.RPOrigin)
- if err != nil {
- return fmt.Errorf("RPOrigin not valid URL: %+v", err)
- }
- config.RPOrigin = protocol.FullyQualifiedOrigin(u)
- }
-
- return nil
- }
-
- // Create a new WebAuthn object given the proper config flags
- func New(config *Config) (*WebAuthn, error) {
- if err := config.validate(); err != nil {
- return nil, fmt.Errorf("Configuration error: %+v", err)
- }
- return &WebAuthn{
- config,
- }, nil
- }
|