diff --git a/main.go b/main.go index 030aa5b..049a604 100644 --- a/main.go +++ b/main.go @@ -63,15 +63,22 @@ func main() { pipes := pipelines.LoadPipelines() - authMiddleware := middlewares.CreateAuthenticationMiddleware(appSettings.Token) - rateLimiterMiddleware, err := middlewares.CreateRateLimiterMiddleware(appSettings.RateLimiter.RequestsPerMinute, appSettings.RateLimiter.AllowedBurst) - if err != nil { - panic(err) + r := mux.NewRouter() + + if appSettings.Authentication.Enabled { + authMiddleware := middlewares.CreateAuthenticationMiddleware(appSettings.Authentication.Token) + + r.Use(authMiddleware.Middleware) } - r := mux.NewRouter() - r.Use(authMiddleware.Middleware) - r.Use(rateLimiterMiddleware.Middleware) + if appSettings.RateLimiter.Enabled { + rateLimiterMiddleware, err := middlewares.CreateRateLimiterMiddleware(appSettings.RateLimiter.RequestsPerMinute, appSettings.RateLimiter.AllowedBurst) + if err != nil { + panic(err) + } + + r.Use(rateLimiterMiddleware.Middleware) + } r.HandleFunc("/", IndexHandler) diff --git a/settings/settings.go b/settings/settings.go index 6e33efe..81cd6e4 100644 --- a/settings/settings.go +++ b/settings/settings.go @@ -15,10 +15,10 @@ const ( type FileSystemType int type Settings struct { - Endpoint string `json:"endpoint"` - Token string `json:"token"` - RateLimiter RateLimiterSettings `json:"rate_limiter"` - StorageProvider StorageSettings `json:"storage_provider"` + Endpoint string `json:"endpoint"` + Authentication AuthenticationSettings `json:"authentication"` + RateLimiter RateLimiterSettings `json:"rate_limiter"` + StorageProvider StorageSettings `json:"storage_provider"` } type StorageSettings struct { @@ -26,9 +26,15 @@ type StorageSettings struct { BasePath string `json:"base_path"` } +type AuthenticationSettings struct { + Enabled bool `json:"enabled"` + Token string `json:"token"` +} + type RateLimiterSettings struct { - RequestsPerMinute int `json:"requests_per_minute"` - AllowedBurst int `json:"allowed_burst"` + Enabled bool `json:"enabled"` + RequestsPerMinute int `json:"requests_per_minute"` + AllowedBurst int `json:"allowed_burst"` } func parseSettings(data []byte) Settings { @@ -56,8 +62,12 @@ func LoadSettings(fileSystem afero.Fs) (Settings, error) { // If file does not exist, create default settings defaultSettings := Settings{ Endpoint: "127.0.0.1:8000", - Token: "changeme", + Authentication: AuthenticationSettings{ + Enabled: true, + Token: "changeme", + }, RateLimiter: RateLimiterSettings{ + Enabled: true, RequestsPerMinute: 20, AllowedBurst: 5, }, diff --git a/settings/settings_test.go b/settings/settings_test.go index fa801ff..287734e 100644 --- a/settings/settings_test.go +++ b/settings/settings_test.go @@ -12,8 +12,12 @@ import ( func TestSettingsParsing(t *testing.T) { const file string = `{ "endpoint": "0.0.0.0:8000", - "token": "foobar", + "authentication": { + "enabled": true, + "token": "foobar" + }, "rate_limiter": { + "enabled": true, "requests_per_minute": 20, "allowed_burst": 5 }, @@ -27,7 +31,7 @@ func TestSettingsParsing(t *testing.T) { settings := parseSettings([]byte(file)) assert.Equal(t, "0.0.0.0:8000", settings.Endpoint) - assert.Equal(t, "foobar", settings.Token) + assert.Equal(t, "foobar", settings.Authentication.Token) assert.Equal(t, "assets", settings.StorageProvider.BasePath) }) }