Merge pull request #489 from michelleN/valid-repo

feat(repo): validate repo url
pull/559/head
Michelle Noorali 10 years ago
commit abd1a5c1bf

@ -43,6 +43,14 @@ const repoDesc = `Helm repositories store Helm charts.
For more details, use 'helm repo CMD -h'. For more details, use 'helm repo CMD -h'.
` `
const addRepoDesc = `The add repository command is used to add a name a repository url to your
chart repository list. The repository url must begin with a valid protocoal. At the moment,
we only support google cloud storage for chart repositories.
A valid command might look like:
$ helm repo add charts gs://kubernetes-charts
`
func repoCommands() cli.Command { func repoCommands() cli.Command {
return cli.Command{ return cli.Command{
Name: "repository", Name: "repository",
@ -51,10 +59,11 @@ func repoCommands() cli.Command {
Description: repoDesc, Description: repoDesc,
Subcommands: []cli.Command{ Subcommands: []cli.Command{
{ {
Name: "add", Name: "add",
Usage: "Add a chart repository to the remote manager.", Usage: "Add a chart repository to the remote manager.",
ArgsUsage: "[NAME] [REPOSITORY_URL]", Description: addRepoDesc,
Action: func(c *cli.Context) { run(c, addRepo) }, ArgsUsage: "[NAME] [REPOSITORY_URL]",
Action: func(c *cli.Context) { run(c, addRepo) },
}, },
{ {
Name: "list", Name: "list",
@ -66,7 +75,7 @@ func repoCommands() cli.Command {
Name: "remove", Name: "remove",
Aliases: []string{"rm"}, Aliases: []string{"rm"},
Usage: "Remove a chart repository from the remote manager.", Usage: "Remove a chart repository from the remote manager.",
ArgsUsage: "REPOSITORY_URL", ArgsUsage: "REPOSITORY_NAME",
Action: func(c *cli.Context) { run(c, removeRepo) }, Action: func(c *cli.Context) { run(c, removeRepo) },
}, },
}, },

@ -17,6 +17,7 @@ limitations under the License.
package repo package repo
import ( import (
"errors"
"fmt" "fmt"
"strings" "strings"
"sync" "sync"
@ -62,6 +63,11 @@ func (rs *inmemRepoService) CreateRepo(repository IRepo) error {
URL := repository.GetURL() URL := repository.GetURL()
name := repository.GetName() name := repository.GetName()
valid := GCSRepoURLMatcher.MatchString(URL)
if !valid {
return errors.New(URL + " is an invalid Repo URL")
}
for u, r := range rs.repositories { for u, r := range rs.repositories {
if u == URL { if u == URL {
return fmt.Errorf("Repository with URL %s already exists", URL) return fmt.Errorf("Repository with URL %s already exists", URL)

@ -85,6 +85,19 @@ func TestCreateRepoWithDuplicateURL(t *testing.T) {
} }
} }
func TestCreateRepoWithInvalidURL(t *testing.T) {
rs := NewInmemRepoService()
invalidURL := "fake://sfds"
r, err := newRepo(invalidURL, "", TestName, GCSRepoFormat, GCSRepoType)
if err != nil {
t.Fatalf("cannot create test repo: %v", err)
}
if err = rs.CreateRepo(r); err == nil {
t.Fatalf("created repo with invalid URL: %s", invalidURL)
}
}
func TestGetRepoWithInvalidURL(t *testing.T) { func TestGetRepoWithInvalidURL(t *testing.T) {
invalidURL := "https://not.a.valid/url" invalidURL := "https://not.a.valid/url"
rs := NewInmemRepoService() rs := NewInmemRepoService()
@ -96,7 +109,7 @@ func TestGetRepoWithInvalidURL(t *testing.T) {
func TestGetRepoURLByName(t *testing.T) { func TestGetRepoURLByName(t *testing.T) {
rs := NewInmemRepoService() rs := NewInmemRepoService()
testURL := "gcs://helm-test-charts" testURL := "gs://helm-test-charts"
r, err := newRepo(testURL, "", TestName, GCSRepoFormat, GCSRepoType) r, err := newRepo(testURL, "", TestName, GCSRepoFormat, GCSRepoType)
err = rs.CreateRepo(r) err = rs.CreateRepo(r)
if err != nil { if err != nil {

Loading…
Cancel
Save