github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/lib/auth/load.go (about)

     1  // Package auth - Content managed by Project Forge, see [projectforge.md] for details.
     2  package auth
     3  
     4  import (
     5  	"fmt"
     6  	"strings"
     7  	"sync"
     8  
     9  	"github.com/pkg/errors"
    10  	"github.com/samber/lo"
    11  
    12  	"github.com/kyleu/dbaudit/app/util"
    13  )
    14  
    15  var initMu sync.Mutex
    16  
    17  func (s *Service) load(logger util.Logger) error {
    18  	initMu.Lock()
    19  	defer initMu.Unlock()
    20  
    21  	if s.providers != nil {
    22  		return errors.New("called [load] twice")
    23  	}
    24  	if s.baseURL == "" {
    25  		s.baseURL = util.GetEnv(util.AppKey + "_oauth_redirect")
    26  	}
    27  	if s.baseURL == "" {
    28  		s.baseURL = fmt.Sprintf("http://localhost:%d", s.port)
    29  	}
    30  	s.baseURL = strings.TrimSuffix(s.baseURL, "/")
    31  
    32  	initAvailable()
    33  
    34  	s.providers = lo.FilterMap(AvailableProviderKeys, func(k string, _ int) (*Provider, bool) {
    35  		envKey := util.GetEnv(k + "_key")
    36  		if envKey == "" {
    37  			return nil, false
    38  		}
    39  		envSecret := util.GetEnv(k + "_secret")
    40  		envScopes := util.StringSplitAndTrim(util.GetEnv(k+"_scopes"), ",")
    41  		return &Provider{ID: k, Title: AvailableProviderNames[k], Key: envKey, Secret: envSecret, Scopes: envScopes}, true
    42  	})
    43  
    44  	if len(s.providers) == 0 {
    45  		logger.Debug("authentication disabled, no providers configured in environment")
    46  	} else {
    47  		const msg = "authentication enabled for [%s], using [%s] as a base URL"
    48  		logger.Infof(msg, util.StringArrayOxfordComma(s.providers.Titles(), "and"), s.baseURL)
    49  	}
    50  
    51  	return nil
    52  }