Skip to content

Commit

Permalink
Validate the project name when it's entered, fixes ddev#514
Browse files Browse the repository at this point in the history
  • Loading branch information
rfay committed Oct 6, 2018
1 parent 9063a31 commit be48e35
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 8 deletions.
9 changes: 3 additions & 6 deletions pkg/ddevapp/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ func (app *DdevApp) ValidateConfig() error {
// validate hostname
match := hostRegex.MatchString(app.GetHostname())
if !match {
return fmt.Errorf("%s is not a valid hostname. Please enter a site name in your configuration that will allow for a valid hostname. See https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_hostnames for valid hostname requirements", app.GetHostname())
return fmt.Errorf("%s is not a valid hostname. Please enter a project name in your configuration that will allow for a valid hostname. See https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_hostnames for valid hostname requirements", app.GetHostname())
}

// validate apptype
Expand Down Expand Up @@ -446,14 +446,13 @@ func (app *DdevApp) RenderComposeYAML() (string, error) {
return doc.String(), err
}

// Define an application name.
// prompt for a project name.
func (app *DdevApp) promptForName() error {
provider, err := app.GetProvider()
if err != nil {
return err
}

namePrompt := "Project name"
if app.Name == "" {
dir, err := os.Getwd()
// if working directory name is invalid for hostnames, we shouldn't suggest it
Expand All @@ -463,9 +462,7 @@ func (app *DdevApp) promptForName() error {
}
}

namePrompt = fmt.Sprintf("%s (%s)", namePrompt, app.Name)
fmt.Print(namePrompt + ": ")
app.Name = util.GetInput(app.Name)
app.Name = util.Prompt("Project name", app.Name)
return provider.ValidateField("Name", app.Name)
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/ddevapp/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -447,7 +447,7 @@ func TestValidate(t *testing.T) {

app.Name = "Invalid!"
err = app.ValidateConfig()
assert.EqualError(err, fmt.Sprintf("%s is not a valid hostname. Please enter a site name in your configuration that will allow for a valid hostname. See https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_hostnames for valid hostname requirements", app.GetHostname()))
assert.EqualError(err, fmt.Sprintf("%s is not a valid hostname. Please enter a project name in your configuration that will allow for a valid hostname. See https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_hostnames for valid hostname requirements", app.GetHostname()))

app.Docroot = "testdata"
app.Name = "valid"
Expand Down
13 changes: 12 additions & 1 deletion pkg/ddevapp/providerDefault.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package ddevapp

import "os"
import (
"fmt"
"os"
)

// DefaultProvider provides a no-op for the provider plugin interface methods.
type DefaultProvider struct{}
Expand All @@ -12,6 +15,14 @@ func (p *DefaultProvider) Init(app *DdevApp) error {

// ValidateField provides a no-op for the ValidateField operation.
func (p *DefaultProvider) ValidateField(field, value string) error {
if field == "Name" {
// validate project name
match := hostRegex.MatchString(value)
if !match {
return fmt.Errorf("%s is not a valid project name. Please enter a project name in your configuration that will allow for a valid hostname. See https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_hostnames for valid hostname requirements", value)
}

}
return nil
}

Expand Down

0 comments on commit be48e35

Please sign in to comment.