mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-01-31 19:52:21 +00:00
Fix registry delete (#532)
- Make make it possible to delete `"§4fda` - Reject non urls for registry-address - Fix #520
This commit is contained in:
parent
fac0e16996
commit
ff8ad5bb83
8 changed files with 22 additions and 15 deletions
|
@ -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)
|
||||
|
|
|
@ -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")),
|
||||
|
|
|
@ -15,7 +15,10 @@
|
|||
|
||||
package model
|
||||
|
||||
import "errors"
|
||||
import (
|
||||
"errors"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
var (
|
||||
errRegistryAddressInvalid = errors.New("Invalid Registry Address")
|
||||
|
@ -32,7 +35,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)
|
||||
|
@ -44,7 +47,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.
|
||||
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -35,6 +35,7 @@
|
|||
<div v-else class="space-y-4">
|
||||
<form @submit.prevent="createRegistry">
|
||||
<InputField label="Address">
|
||||
<!-- TODO: check input field Address is a valid address -->
|
||||
<TextField v-model="selectedRegistry.address" placeholder="Registry Address (e.g. docker.io)" required />
|
||||
</InputField>
|
||||
|
||||
|
@ -115,7 +116,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 = encodeURIComponent(_registry.address);
|
||||
await apiClient.deleteRegistry(repo.value.owner, repo.value.name, registryAddress);
|
||||
notifications.notify({ title: 'Registry credentials deleted', type: 'success' });
|
||||
await loadRegistries();
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue