From a4f2a0e4a15053c7cfaa9407a27e759f69e46eb2 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Wed, 24 Nov 2021 00:41:07 +0100 Subject: [PATCH 1/8] refactor --- server/model/registry.go | 2 +- server/plugins/registry/db.go | 6 +----- server/store/datastore/registry.go | 8 ++++++-- server/store/store.go | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/server/model/registry.go b/server/model/registry.go index 7644b93760..b0754ace72 100644 --- a/server/model/registry.go +++ b/server/model/registry.go @@ -44,7 +44,7 @@ type RegistryStore interface { RegistryList(*Repo) ([]*Registry, error) RegistryCreate(*Registry) error RegistryUpdate(*Registry) error - RegistryDelete(*Registry) error + RegistryDelete(repo *Repo, addr string) error } // Registry represents a docker registry with credentials. diff --git a/server/plugins/registry/db.go b/server/plugins/registry/db.go index 433eecbab0..d09ba7fae8 100644 --- a/server/plugins/registry/db.go +++ b/server/plugins/registry/db.go @@ -30,9 +30,5 @@ func (b *db) RegistryUpdate(repo *model.Repo, in *model.Registry) error { } func (b *db) RegistryDelete(repo *model.Repo, addr string) error { - registry, err := b.RegistryFind(repo, addr) - if err != nil { - return err - } - return b.store.RegistryDelete(registry) + return b.store.RegistryDelete(repo, addr) } diff --git a/server/store/datastore/registry.go b/server/store/datastore/registry.go index 39c5cce315..915455c576 100644 --- a/server/store/datastore/registry.go +++ b/server/store/datastore/registry.go @@ -42,7 +42,11 @@ func (s storage) RegistryUpdate(registry *model.Registry) error { return err } -func (s storage) RegistryDelete(registry *model.Registry) error { - _, err := s.engine.ID(registry.ID).Delete(new(model.Registry)) +func (s storage) RegistryDelete(repo *model.Repo, addr string) error { + registry, err := s.RegistryFind(repo, addr) + if err != nil { + return err + } + _, err = s.engine.ID(registry.ID).Delete(new(model.Registry)) return err } diff --git a/server/store/store.go b/server/store/store.go index b2c843ec4a..46e4863a6e 100644 --- a/server/store/store.go +++ b/server/store/store.go @@ -137,7 +137,7 @@ type Store interface { RegistryList(*model.Repo) ([]*model.Registry, error) RegistryCreate(*model.Registry) error RegistryUpdate(*model.Registry) error - RegistryDelete(*model.Registry) error + RegistryDelete(repo *model.Repo, addr string) error ProcLoad(int64) (*model.Proc, error) ProcFind(*model.Build, int) (*model.Proc, error) From 37b98ea5efcfcbfed2d3672cb4ffd1e9e27e4cb2 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Wed, 24 Nov 2021 00:56:03 +0100 Subject: [PATCH 2/8] lint --- server/model/registry.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/model/registry.go b/server/model/registry.go index b0754ace72..81819883fe 100644 --- a/server/model/registry.go +++ b/server/model/registry.go @@ -32,7 +32,7 @@ type RegistryService interface { RegistryDelete(*Repo, string) error } -// RegistryService defines a service for managing registries. +// ReadOnlyRegistryService defines a service for managing registries. type ReadOnlyRegistryService interface { RegistryFind(*Repo, string) (*Registry, error) RegistryList(*Repo) ([]*Registry, error) From eca5e7d5e0fc3d8dbe09108ce3e980640d56b332 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Wed, 24 Nov 2021 00:56:42 +0100 Subject: [PATCH 3/8] delete registry: url encode registry address --- web/src/components/repo/settings/RegistriesTab.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/src/components/repo/settings/RegistriesTab.vue b/web/src/components/repo/settings/RegistriesTab.vue index 29fe6f14c5..c3b751d92b 100644 --- a/web/src/components/repo/settings/RegistriesTab.vue +++ b/web/src/components/repo/settings/RegistriesTab.vue @@ -115,7 +115,8 @@ export default defineComponent({ throw new Error("Unexpected: Can't load repo"); } - await apiClient.deleteRegistry(repo.value.owner, repo.value.name, _registry.address); + const registryAddress = encodeURI(_registry.address).replaceAll('/', '%2F');; + await apiClient.deleteRegistry(repo.value.owner, repo.value.name, registryAddress); notifications.notify({ title: 'Registry credentials deleted', type: 'success' }); await loadRegistries(); }); From 9eeea1bd2b086464ecd9f2b97495b44b0be3aa23 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Wed, 24 Nov 2021 00:59:17 +0100 Subject: [PATCH 4/8] fix-lint --- web/src/components/repo/settings/RegistriesTab.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/components/repo/settings/RegistriesTab.vue b/web/src/components/repo/settings/RegistriesTab.vue index c3b751d92b..8594357ea2 100644 --- a/web/src/components/repo/settings/RegistriesTab.vue +++ b/web/src/components/repo/settings/RegistriesTab.vue @@ -115,7 +115,7 @@ export default defineComponent({ throw new Error("Unexpected: Can't load repo"); } - const registryAddress = encodeURI(_registry.address).replaceAll('/', '%2F');; + const registryAddress = encodeURI(_registry.address).replaceAll('/', '%2F'); await apiClient.deleteRegistry(repo.value.owner, repo.value.name, registryAddress); notifications.notify({ title: 'Registry credentials deleted', type: 'success' }); await loadRegistries(); From 20765721a93c06986f197dff1d9f5e69764509fc Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Wed, 24 Nov 2021 01:19:30 +0100 Subject: [PATCH 5/8] backend only allow valid address --- server/model/registry.go | 10 +++++++--- web/src/components/repo/settings/RegistriesTab.vue | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/server/model/registry.go b/server/model/registry.go index 81819883fe..3739a81053 100644 --- a/server/model/registry.go +++ b/server/model/registry.go @@ -15,7 +15,10 @@ package model -import "errors" +import ( + "errors" + "net/url" +) var ( errRegistryAddressInvalid = errors.New("Invalid Registry Address") @@ -68,9 +71,10 @@ func (r *Registry) Validate() error { return errRegistryUsernameInvalid case len(r.Password) == 0: return errRegistryPasswordInvalid - default: - return nil } + + _, err := url.Parse(r.Address) + return err } // Copy makes a copy of the registry without the password. diff --git a/web/src/components/repo/settings/RegistriesTab.vue b/web/src/components/repo/settings/RegistriesTab.vue index 8594357ea2..4150037f0d 100644 --- a/web/src/components/repo/settings/RegistriesTab.vue +++ b/web/src/components/repo/settings/RegistriesTab.vue @@ -35,6 +35,7 @@
+ From e96d8a405108760222a110dec9d43c6f9386d161 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Thu, 25 Nov 2021 18:33:34 +0100 Subject: [PATCH 6/8] simpler typescript code --- web/src/components/repo/settings/RegistriesTab.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/src/components/repo/settings/RegistriesTab.vue b/web/src/components/repo/settings/RegistriesTab.vue index 4150037f0d..e34b46164d 100644 --- a/web/src/components/repo/settings/RegistriesTab.vue +++ b/web/src/components/repo/settings/RegistriesTab.vue @@ -116,7 +116,7 @@ export default defineComponent({ throw new Error("Unexpected: Can't load repo"); } - const registryAddress = encodeURI(_registry.address).replaceAll('/', '%2F'); + const registryAddress = encodeURIComponent(_registry.address); await apiClient.deleteRegistry(repo.value.owner, repo.value.name, registryAddress); notifications.notify({ title: 'Registry credentials deleted', type: 'success' }); await loadRegistries(); From 1d324347c77c84f77cbf9428e7742a34fc89bd4c Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Thu, 25 Nov 2021 18:34:34 +0100 Subject: [PATCH 7/8] rm outdated comment --- cmd/server/server.go | 1 - 1 file changed, 1 deletion(-) diff --git a/cmd/server/server.go b/cmd/server/server.go index 02735c991b..5f7ae79df8 100644 --- a/cmd/server/server.go +++ b/cmd/server/server.go @@ -120,7 +120,6 @@ func run(c *cli.Context) error { var webUIServe func(w http.ResponseWriter, r *http.Request) if proxyWebUI == "" { - // we are switching from gin to httpservermux|treemux, webUIServe = setupTree(c).ServeHTTP } else { origin, _ := url.Parse(proxyWebUI) From 962a7ae98eaa7dc4db88ea40dd67c4ef76e83d30 Mon Sep 17 00:00:00 2001 From: 6543 <6543@obermui.de> Date: Thu, 25 Nov 2021 18:34:44 +0100 Subject: [PATCH 8/8] gin: UseRawPath = true --- cmd/server/setup.go | 1 + server/router/router.go | 1 + 2 files changed, 2 insertions(+) diff --git a/cmd/server/setup.go b/cmd/server/setup.go index 5973ccdcaa..d78957cb0c 100644 --- a/cmd/server/setup.go +++ b/cmd/server/setup.go @@ -305,6 +305,7 @@ func setupCoding(c *cli.Context) (remote.Remote, error) { func setupTree(c *cli.Context) *gin.Engine { tree := gin.New() + tree.UseRawPath = true web.New( web.WithSync(time.Hour*72), web.WithDocs(c.String("docs")), diff --git a/server/router/router.go b/server/router/router.go index 98c76614ed..2e18f532d4 100644 --- a/server/router/router.go +++ b/server/router/router.go @@ -31,6 +31,7 @@ import ( // Load loads the router func Load(serveHTTP func(w http.ResponseWriter, r *http.Request), middleware ...gin.HandlerFunc) http.Handler { e := gin.New() + e.UseRawPath = true e.Use(gin.Recovery()) e.Use(func(c *gin.Context) {