diff --git a/cmd/root.go b/cmd/root.go index e08ecb8..2a2ea42 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -41,7 +41,10 @@ var rootCmd = &cobra.Command{ // Users log.Info().Msg("Parsing users") users, usersErr := utils.GetUsers(config.Users, config.UsersFile) - HandleError(usersErr, "Failed to parse users") + + if (len(users) == 0 || usersErr != nil) && !utils.OAuthConfigured(config) { + log.Fatal().Err(usersErr).Msg("Failed to parse users") + } // Secrets log.Info().Msg("Parsing secrets") diff --git a/internal/api/api.go b/internal/api/api.go index a7b94c2..b4456c0 100644 --- a/internal/api/api.go +++ b/internal/api/api.go @@ -194,6 +194,12 @@ func (api *API) SetupRoutes() { log.Debug().Msg("Checking status") userContext := api.Hooks.UseUserContext(c) + configuredProviders := api.Providers.GetConfiguredProviders() + + if api.Auth.UserAuthConfigured() { + configuredProviders = append(configuredProviders, "username") + } + if !userContext.IsLoggedIn { log.Debug().Msg("Unauthenticated") c.JSON(200, gin.H{ @@ -203,13 +209,13 @@ func (api *API) SetupRoutes() { "isLoggedIn": false, "oauth": false, "provider": "", - "configuredProviders": api.Providers.GetConfiguredProviders(), + "configuredProviders": configuredProviders, "disableContinue": api.Config.DisableContinue, }) return } - log.Debug().Interface("userContext", userContext).Strs("configuredProviders", api.Providers.GetConfiguredProviders()).Bool("disableContinue", api.Config.DisableContinue).Msg("Authenticated") + log.Debug().Interface("userContext", userContext).Strs("configuredProviders", configuredProviders).Bool("disableContinue", api.Config.DisableContinue).Msg("Authenticated") c.JSON(200, gin.H{ "status": 200, @@ -218,7 +224,7 @@ func (api *API) SetupRoutes() { "isLoggedIn": userContext.IsLoggedIn, "oauth": userContext.OAuth, "provider": userContext.Provider, - "configuredProviders": api.Providers.GetConfiguredProviders(), + "configuredProviders": configuredProviders, "disableContinue": api.Config.DisableContinue, }) }) diff --git a/internal/auth/auth.go b/internal/auth/auth.go index b466296..d87a7ef 100644 --- a/internal/auth/auth.go +++ b/internal/auth/auth.go @@ -88,3 +88,7 @@ func (auth *Auth) GetSessionCookie(c *gin.Context) (types.SessionCookie, error) Provider: provider, }, nil } + +func (auth *Auth) UserAuthConfigured() bool { + return len(auth.Users) > 0 +} diff --git a/internal/utils/utils.go b/internal/utils/utils.go index e951107..f7d7336 100644 --- a/internal/utils/utils.go +++ b/internal/utils/utils.go @@ -129,3 +129,7 @@ func GetUsers(env string, file string) (types.Users, error) { return ParseUsers(users) } + +func OAuthConfigured(config types.Config) bool { + return (config.GithubClientId != "" && config.GithubClientSecret != "") || (config.GoogleClientId != "" && config.GoogleClientSecret != "") || (config.GenericClientId != "" && config.GenericClientSecret != "") +} diff --git a/site/src/pages/login-page.tsx b/site/src/pages/login-page.tsx index 312afb6..3918890 100644 --- a/site/src/pages/login-page.tsx +++ b/site/src/pages/login-page.tsx @@ -153,40 +153,44 @@ export const LoginPage = () => { )} - + {configuredProviders.includes("username") && ( + + )} )} -
- - - - + {configuredProviders.includes("username") && ( +
+ + + + + )} );