diff --git a/args.go b/args.go index e7eb6f3..3f2db7d 100644 --- a/args.go +++ b/args.go @@ -8,6 +8,8 @@ import ( "os" "path/filepath" "strings" + + lm "github.com/hrfee/jfa-go/logmessages" ) func (app *appContext) loadArgs(firstCall bool) { @@ -28,6 +30,8 @@ func (app *appContext) loadArgs(firstCall bool) { PPROF = flag.Bool("pprof", false, "Exposes pprof profiler on /debug/pprof.") SWAGGER = flag.Bool("swagger", false, "Enable swagger at /swagger/index.html") + flag.BoolVar(&NO_API_AUTH_DO_NOT_USE, "disable-api-auth-do-not-use", false, "Disables API authentication. DO NOT USE!") + flag.Parse() if *help { flag.Usage() @@ -45,6 +49,16 @@ func (app *appContext) loadArgs(firstCall bool) { if *_LOADBAK != "" { LOADBAK = *_LOADBAK } + + if NO_API_AUTH_DO_NOT_USE && *DEBUG { + NO_API_AUTH_DO_NOT_USE = false + buf := bufio.NewReader(os.Stdin) + app.err.Print(lm.NoAPIAuthPrompt) + sentence, err := buf.ReadBytes('\n') + if err == nil && strings.ContainsRune(string(sentence), 'y') { + NO_API_AUTH_DO_NOT_USE = true + } + } } if os.Getenv("SWAGGER") == "1" { diff --git a/logmessages/logmessages.go b/logmessages/logmessages.go index 41fa765..5e4c333 100644 --- a/logmessages/logmessages.go +++ b/logmessages/logmessages.go @@ -281,6 +281,7 @@ const ( External = "external" RegisterPprof = "Registered pprof" SwaggerWarning = "Warning: Swagger should not be used on a public instance." + NoAPIAuthPrompt = `Disabling API auth is dangerous, only use locally for development. Disable it? [y/n]: ` // storage.go ConnectDB = "Connected to DB \"%s\"" diff --git a/router.go b/router.go index 8720269..b13675e 100644 --- a/router.go +++ b/router.go @@ -15,6 +15,11 @@ import ( ginSwagger "github.com/swaggo/gin-swagger" ) +var ( + // Disables authentication for the API. Do not use! + NO_API_AUTH_DO_NOT_USE = false +) + // loads HTML templates. If [files]/html_templates is set, alternative files inside the directory are loaded in place of the internal templates. func (app *appContext) loadHTML(router *gin.Engine) { customPath := app.config.Section("files").Key("html_templates").MustString("") @@ -182,7 +187,12 @@ func (app *appContext) loadRoutes(router *gin.Engine) { } } - api := router.Group("/", app.webAuth()) + var api *gin.RouterGroup + if NO_API_AUTH_DO_NOT_USE && *DEBUG { + api = router.Group("/") + } else { + api = router.Group("/", app.webAuth()) + } for _, p := range routePrefixes { var user *gin.RouterGroup