package main import ( "fmt" "github.com/steveiliop56/tinyauth/internal/bootstrap" "github.com/steveiliop56/tinyauth/internal/config" "github.com/steveiliop56/tinyauth/internal/utils/loaders" "github.com/steveiliop56/tinyauth/internal/utils/tlog" "github.com/rs/zerolog/log" "github.com/traefik/paerser/cli" ) func main() { tConfig := config.NewDefaultConfiguration() loaders := []cli.ResourceLoader{ &loaders.FileLoader{}, &loaders.FlagLoader{}, &loaders.EnvLoader{}, } cmdTinyauth := &cli.Command{ Name: "tinyauth", Description: "The simplest way to protect your apps with a login screen", Configuration: tConfig, Resources: loaders, Run: func(_ []string) error { return runCmd(*tConfig) }, } cmdUser := &cli.Command{ Name: "user", Description: "Manage Tinyauth users", } cmdTotp := &cli.Command{ Name: "totp", Description: "Manage Tinyauth TOTP users", } cmdOidc := &cli.Command{ Name: "oidc", Description: "Manage Tinyauth OIDC clients", } err := cmdTinyauth.AddCommand(versionCmd()) if err != nil { log.Fatal().Err(err).Msg("Failed to add version command") } err = cmdUser.AddCommand(verifyUserCmd()) if err != nil { log.Fatal().Err(err).Msg("Failed to add verify command") } err = cmdTinyauth.AddCommand(healthcheckCmd()) if err != nil { log.Fatal().Err(err).Msg("Failed to add healthcheck command") } err = cmdTotp.AddCommand(generateTotpCmd()) if err != nil { log.Fatal().Err(err).Msg("Failed to add generate command") } err = cmdUser.AddCommand(createUserCmd()) if err != nil { log.Fatal().Err(err).Msg("Failed to add create command") } err = cmdOidc.AddCommand(createOidcClientCmd()) if err != nil { log.Fatal().Err(err).Msg("Failed to add create command") } err = cmdTinyauth.AddCommand(cmdUser) if err != nil { log.Fatal().Err(err).Msg("Failed to add user command") } err = cmdTinyauth.AddCommand(cmdTotp) if err != nil { log.Fatal().Err(err).Msg("Failed to add totp command") } err = cmdTinyauth.AddCommand(cmdOidc) if err != nil { log.Fatal().Err(err).Msg("Failed to add oidc command") } err = cli.Execute(cmdTinyauth) if err != nil { log.Fatal().Err(err).Msg("Failed to execute command") } } func runCmd(cfg config.Config) error { logger := tlog.NewLogger(cfg.Log) logger.Init() tlog.App.Info().Str("version", config.Version).Msg("Starting tinyauth") app := bootstrap.NewBootstrapApp(cfg) err := app.Setup() if err != nil { return fmt.Errorf("failed to bootstrap app: %w", err) } return nil }