cloudapi/v2: validate ostree params using common validation function
Use the ostree package error types to keep the existing distinction between Ref- and URL-related errors. Introduce a new error condition for a general InvalidOSTreeParams failure.
This commit is contained in:
parent
c68850fa26
commit
24b70837c1
2 changed files with 20 additions and 17 deletions
|
|
@ -39,6 +39,7 @@ const (
|
|||
ErrorNoBaseURLInPayloadRepository ServiceErrorCode = 24
|
||||
ErrorInvalidNumberOfImageBuilds ServiceErrorCode = 25
|
||||
ErrorInvalidJobType ServiceErrorCode = 26
|
||||
ErrorInvalidOSTreeParams ServiceErrorCode = 27
|
||||
|
||||
// Internal errors, these are bugs
|
||||
ErrorFailedToInitializeBlueprint ServiceErrorCode = 1000
|
||||
|
|
@ -102,6 +103,7 @@ func getServiceErrors() serviceErrors {
|
|||
serviceError{ErrorNoBaseURLInPayloadRepository, http.StatusBadRequest, "BaseURL must be specified for payload repositories"},
|
||||
serviceError{ErrorInvalidJobType, http.StatusNotFound, "Requested job has invalid type"},
|
||||
serviceError{ErrorInvalidNumberOfImageBuilds, http.StatusBadRequest, "Compose request has unsupported number of image builds"},
|
||||
serviceError{ErrorInvalidOSTreeParams, http.StatusBadRequest, "Invalid OSTree parameters or parameter combination"},
|
||||
|
||||
serviceError{ErrorFailedToInitializeBlueprint, http.StatusInternalServerError, "Failed to initialize blueprint"},
|
||||
serviceError{ErrorFailedToGenerateManifestSeed, http.StatusInternalServerError, "Failed to generate manifest seed"},
|
||||
|
|
|
|||
|
|
@ -272,24 +272,25 @@ func (h *apiHandlers) PostCompose(ctx echo.Context) error {
|
|||
}
|
||||
}
|
||||
|
||||
// set default ostree ref, if one not provided
|
||||
ostreeOptions := ir.Ostree
|
||||
if ostreeOptions == nil || ostreeOptions.Ref == nil {
|
||||
imageOptions.OSTree = ostree.RequestParams{Ref: imageType.OSTreeRef()}
|
||||
} else if !ostree.VerifyRef(*ostreeOptions.Ref) {
|
||||
return HTTPError(ErrorInvalidOSTreeRef)
|
||||
} else {
|
||||
imageOptions.OSTree = ostree.RequestParams{Ref: *ostreeOptions.Ref}
|
||||
}
|
||||
|
||||
var parent string
|
||||
if ostreeOptions != nil && ostreeOptions.Url != nil {
|
||||
imageOptions.OSTree.URL = *ostreeOptions.Url
|
||||
parent, err = ostree.ResolveRef(imageOptions.OSTree.URL, imageOptions.OSTree.Ref)
|
||||
if err != nil {
|
||||
return HTTPErrorWithInternal(ErrorInvalidOSTreeRepo, err)
|
||||
ostreeOptions := ostree.RequestParams{}
|
||||
if ir.Ostree != nil {
|
||||
if ir.Ostree.Ref != nil {
|
||||
ostreeOptions.Ref = *ir.Ostree.Ref
|
||||
}
|
||||
if ir.Ostree.Url != nil {
|
||||
ostreeOptions.URL = *ir.Ostree.Url
|
||||
}
|
||||
}
|
||||
if imageOptions.OSTree, err = ostree.ResolveParams(ostreeOptions, imageType.OSTreeRef()); err != nil {
|
||||
switch v := err.(type) {
|
||||
case ostree.InvalidParameterError:
|
||||
return HTTPError(ErrorInvalidOSTreeRef)
|
||||
case ostree.ResolveRefError:
|
||||
return HTTPErrorWithInternal(ErrorInvalidOSTreeRepo, v)
|
||||
default:
|
||||
// general case
|
||||
return HTTPError(ErrorInvalidOSTreeParams)
|
||||
}
|
||||
imageOptions.OSTree.Parent = parent
|
||||
}
|
||||
|
||||
var irTarget *target.Target
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue