mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
* functions: application updates no longer accept name in the body AppUpdate was initially conceived as an upsert endpoint for apps. It turns out that it created an inconsistency regarding updates: updates with names divergent with URL would not actually change application's name. This commit atempts to address the issue by returning an HTTP error when trying to update an application name. In swagger.yml, application names are already `readOnly:true`. Thus there is no change from expected behavior. Fixes #380 * functions: use specific error value for name change
59 lines
1.6 KiB
Go
59 lines
1.6 KiB
Go
package models
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
type Apps []*App
|
|
|
|
var (
|
|
ErrAppsAlreadyExists = errors.New("App already exists")
|
|
ErrAppsCreate = errors.New("Could not create app")
|
|
ErrAppsGet = errors.New("Could not get app from datastore")
|
|
ErrAppsList = errors.New("Could not list apps from datastore")
|
|
ErrAppsMissingNew = errors.New("Missing new application")
|
|
ErrAppsNameImmutable = errors.New("Could not update app - name is immutable")
|
|
ErrAppsNotFound = errors.New("App not found")
|
|
ErrAppsNothingToUpdate = errors.New("Nothing to update")
|
|
ErrAppsRemoving = errors.New("Could not remove app from datastore")
|
|
ErrAppsUpdate = errors.New("Could not update app")
|
|
ErrDeleteAppsWithRoutes = errors.New("Cannot remove apps with routes")
|
|
ErrUsableImage = errors.New("Image not found")
|
|
)
|
|
|
|
type App struct {
|
|
Name string `json:"name"`
|
|
Routes Routes `json:"routes,omitempty"`
|
|
Config `json:"config"`
|
|
}
|
|
|
|
const (
|
|
maxAppName = 30
|
|
)
|
|
|
|
var (
|
|
ErrAppsValidationMissingName = errors.New("Missing app name")
|
|
ErrAppsValidationTooLongName = fmt.Errorf("App name must be %v characters or less", maxAppName)
|
|
ErrAppsValidationInvalidName = errors.New("Invalid app name")
|
|
)
|
|
|
|
func (a *App) Validate() error {
|
|
if a.Name == "" {
|
|
return ErrAppsValidationMissingName
|
|
}
|
|
if len(a.Name) > maxAppName {
|
|
return ErrAppsValidationTooLongName
|
|
}
|
|
for _, c := range a.Name {
|
|
if (c < '0' || '9' < c) && (c < 'A' || 'Z' > c) && (c < 'a' || 'z' < c) && c != '_' && c != '-' {
|
|
return ErrAppsValidationInvalidName
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type AppFilter struct {
|
|
Name string
|
|
}
|