From 497269f811b290941ff6b9dafa73f7222d1780ea Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Tue, 2 Jan 2024 13:28:31 +0100 Subject: [PATCH] New option to disable provider edition This will be useful for the demo instance --- api/provider_settings.go | 3 +++ api/providers.go | 27 ++++++++++++++++++++++++--- config/cli.go | 1 + config/config.go | 3 +++ ui/routes.go | 4 ++++ ui/src/lib/components/Home.svelte | 16 +++++++++------- ui/src/routes/providers/+page.svelte | 20 +++++++++++--------- 7 files changed, 55 insertions(+), 19 deletions(-) diff --git a/api/provider_settings.go b/api/provider_settings.go index 783df91..cc840f4 100644 --- a/api/provider_settings.go +++ b/api/provider_settings.go @@ -100,6 +100,9 @@ func getProviderSettingsState(cfg *config.Options, c *gin.Context) { if err != forms.DoneForm { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return + } else if cfg.DisableProviders { + c.AbortWithStatusJSON(http.StatusForbidden, gin.H{"errmsg": "Cannot change provider settings as DisableProviders parameter is set."}) + return } else if _, err = src.NewDNSServiceProvider(); err != nil { c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"errmsg": err.Error()}) return diff --git a/api/providers.go b/api/providers.go index 96734c1..b9d9e60 100644 --- a/api/providers.go +++ b/api/providers.go @@ -39,18 +39,39 @@ import ( func declareProvidersRoutes(cfg *config.Options, router *gin.RouterGroup) { router.GET("/providers", getProviders) - router.POST("/providers", addProvider) + router.POST("/providers", func(c *gin.Context) { + if cfg.DisableProviders { + c.AbortWithStatusJSON(http.StatusForbidden, gin.H{"errmsg": "Cannot add provider as DisableProviders parameter is set."}) + return + } + + addProvider(c) + }) apiProvidersMetaRoutes := router.Group("/providers/:pid") apiProvidersMetaRoutes.Use(ProviderMetaHandler) - apiProvidersMetaRoutes.DELETE("", deleteProvider) + apiProvidersMetaRoutes.DELETE("", func(c *gin.Context) { + if cfg.DisableProviders { + c.AbortWithStatusJSON(http.StatusForbidden, gin.H{"errmsg": "Cannot delete provider as DisableProviders parameter is set."}) + return + } + + deleteProvider(c) + }) apiProviderRoutes := router.Group("/providers/:pid") apiProviderRoutes.Use(ProviderHandler) apiProviderRoutes.GET("", GetProvider) - apiProviderRoutes.PUT("", UpdateProvider) + apiProviderRoutes.PUT("", func(c *gin.Context) { + if cfg.DisableProviders { + c.AbortWithStatusJSON(http.StatusForbidden, gin.H{"errmsg": "Cannot update provider as DisableProviders parameter is set."}) + return + } + + UpdateProvider(c) + }) apiProviderRoutes.GET("/domains", getDomainsHostedByProvider) } diff --git a/config/cli.go b/config/cli.go index fc932aa..372a664 100644 --- a/config/cli.go +++ b/config/cli.go @@ -33,6 +33,7 @@ func (o *Options) declareFlags() { flag.StringVar(&o.DevProxy, "dev", o.DevProxy, "Proxify traffic to this host for static assets") flag.StringVar(&o.AdminBind, "admin-bind", o.AdminBind, "Bind port/socket for administration interface") flag.StringVar(&o.Bind, "bind", ":8081", "Bind port/socket") + flag.BoolVar(&o.DisableProviders, "disable-providers-edit", o.DisableProviders, "Disallow all actions on provider (add/edit/delete)") flag.Var(&o.ExternalURL, "externalurl", "Begining of the URL, before the base, that should be used eg. in mails") flag.StringVar(&o.BaseURL, "baseurl", o.BaseURL, "URL prepended to each URL") flag.StringVar(&o.DefaultNameServer, "default-ns", o.DefaultNameServer, "Adress to the default name server") diff --git a/config/config.go b/config/config.go index 08645fa..dec4c3c 100644 --- a/config/config.go +++ b/config/config.go @@ -52,6 +52,9 @@ type Options struct { // DefaultNameServer is the NS server suggested by default. DefaultNameServer string + // DisableProviders should disallow all actions on provider (add/edit/delete) through public API. + DisableProviders bool + // ExternalAuth is the URL of the login form to use instead of the embedded one. ExternalAuth URL diff --git a/ui/routes.go b/ui/routes.go index 9f93c83..04c514a 100644 --- a/ui/routes.go +++ b/ui/routes.go @@ -56,6 +56,10 @@ func init() { } func DeclareRoutes(cfg *config.Options, router *gin.Engine) { + if cfg.DisableProviders { + CustomHeadHTML += `` + } + if HideVoxPeople { CustomHeadHTML += "" } diff --git a/ui/src/lib/components/Home.svelte b/ui/src/lib/components/Home.svelte index 61148cd..4a000f9 100644 --- a/ui/src/lib/components/Home.svelte +++ b/ui/src/lib/components/Home.svelte @@ -111,13 +111,15 @@ >
{$t("provider.title")} - + {#if !window.disable_providers} + + {/if}
{#if !$providers || !$providersSpecs}
diff --git a/ui/src/routes/providers/+page.svelte b/ui/src/routes/providers/+page.svelte index 77b5c25..984ecbb 100644 --- a/ui/src/routes/providers/+page.svelte +++ b/ui/src/routes/providers/+page.svelte @@ -41,15 +41,17 @@ - + {#if !window.disable_providers} + + {/if}

{$t('provider.title')}