github.com/blend/go-sdk@v1.20240719.1/oauth/option.go (about)

     1  /*
     2  
     3  Copyright (c) 2024 - Present. Blend Labs, Inc. All rights reserved
     4  Use of this source code is governed by a MIT license that can be found in the LICENSE file.
     5  
     6  */
     7  
     8  package oauth
     9  
    10  import "golang.org/x/oauth2"
    11  
    12  // Option is an option for oauth managers.
    13  type Option func(*Manager) error
    14  
    15  // ValidateJWTFunc is a function type for function that validates a JWT token.
    16  type ValidateJWTFunc func(m *Manager, jwtClaims *GoogleClaims) error
    17  
    18  // OptConfig sets managers attributes from config values
    19  func OptConfig(cfg Config) Option {
    20  	return func(m *Manager) error {
    21  		secret, err := cfg.DecodeSecret()
    22  		if err != nil {
    23  			return err
    24  		}
    25  		m.Secret = secret
    26  		m.RedirectURL = cfg.RedirectURI
    27  		m.HostedDomain = cfg.HostedDomain
    28  		m.AllowedDomains = cfg.AllowedDomains
    29  		m.Scopes = cfg.ScopesOrDefault()
    30  		m.ClientID = cfg.ClientID
    31  		m.ClientSecret = cfg.ClientSecret
    32  		return nil
    33  	}
    34  }
    35  
    36  // OptClientID sets the manager cliendID.
    37  func OptClientID(cliendID string) Option {
    38  	return func(m *Manager) error {
    39  		m.ClientID = cliendID
    40  		return nil
    41  	}
    42  }
    43  
    44  // OptClientSecret sets the manager clientSecret.
    45  func OptClientSecret(clientSecret string) Option {
    46  	return func(m *Manager) error {
    47  		m.ClientSecret = clientSecret
    48  		return nil
    49  	}
    50  }
    51  
    52  // OptSecret sets the manager secret.
    53  func OptSecret(secret []byte) Option {
    54  	return func(m *Manager) error {
    55  		m.Secret = secret
    56  		return nil
    57  	}
    58  }
    59  
    60  // OptRedirectURI sets the manager redirectURI.
    61  func OptRedirectURI(redirectURI string) Option {
    62  	return func(m *Manager) error {
    63  		m.RedirectURL = redirectURI
    64  		return nil
    65  	}
    66  }
    67  
    68  // OptHostedDomain sets the manager hostedDomain.
    69  func OptHostedDomain(hostedDomain string) Option {
    70  	return func(m *Manager) error {
    71  		m.HostedDomain = hostedDomain
    72  		return nil
    73  	}
    74  }
    75  
    76  // OptAllowedDomains sets the manager allowedDomains.
    77  func OptAllowedDomains(allowedDomains ...string) Option {
    78  	return func(m *Manager) error {
    79  		m.AllowedDomains = allowedDomains
    80  		return nil
    81  	}
    82  }
    83  
    84  // OptScopes sets the manager scopes.
    85  func OptScopes(scopes ...string) Option {
    86  	return func(m *Manager) error {
    87  		m.Scopes = scopes
    88  		return nil
    89  	}
    90  }
    91  
    92  // OptTracer sets the manager tracer.
    93  func OptTracer(tracer Tracer) Option {
    94  	return func(m *Manager) error {
    95  		m.Tracer = tracer
    96  		return nil
    97  	}
    98  }
    99  
   100  // OptIssuer sets the manager issuer url (for Okta Oauth variant).
   101  func OptIssuer(issuer string) Option {
   102  	return func(m *Manager) error {
   103  		m.Issuer = issuer
   104  		return nil
   105  	}
   106  }
   107  
   108  // OptValidateJWT sets the jwt token validator function.
   109  func OptValidateJWT(validateJWT ValidateJWTFunc) Option {
   110  	return func(m *Manager) error {
   111  		m.ValidateJWT = validateJWT
   112  		return nil
   113  	}
   114  }
   115  
   116  // OptPublicKeyCache sets the manager public cache.
   117  func OptPublicKeyCache(publicCache *PublicKeyCache) Option {
   118  	return func(m *Manager) error {
   119  		m.PublicKeyCache = publicCache
   120  		return nil
   121  	}
   122  }
   123  
   124  // OptEndpoint sets the manager public cache.
   125  func OptEndpoint(endpoint *oauth2.Endpoint) Option {
   126  	return func(m *Manager) error {
   127  		m.Endpoint = *endpoint
   128  		return nil
   129  	}
   130  }