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 }