Skip to content

Commit

Permalink
update(cmd): add builder image default and validator to root options
Browse files Browse the repository at this point in the history
Signed-off-by: Luca Guerra <[email protected]>
  • Loading branch information
LucaGuerra authored and poiana committed May 11, 2022
1 parent 3450c0a commit 8a93af5
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 12 deletions.
30 changes: 18 additions & 12 deletions cmd/root_options.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package cmd

import (
"fmt"

"github.com/creasty/defaults"
"github.com/falcosecurity/driverkit/pkg/driverbuilder"
"github.com/falcosecurity/driverkit/pkg/driverbuilder/builder"
"github.com/falcosecurity/driverkit/validate"
"github.com/go-playground/validator/v10"
Expand All @@ -26,14 +26,20 @@ type RootOptions struct {
KernelRelease string `validate:"required,ascii" name:"kernel release"`
Target string `validate:"required,target" name:"target"`
KernelConfigData string `validate:"omitempty,base64" name:"kernel config data"` // fixme > tag "name" does not seem to work when used at struct level, but works when used at inner level
BuilderImage string `name:"builder image"`
BuilderImage string `validate:"imagename" name:"builder image"`
Output OutputOptions
}

func init() {
validate.V.RegisterStructValidation(RootOptionsLevelValidation, RootOptions{})
}

func (ro *RootOptions) SetDefaults() {
if defaults.CanUpdate(ro.BuilderImage) {
ro.BuilderImage = driverbuilder.BuilderBaseImage
}
}

// NewRootOptions ...
func NewRootOptions() *RootOptions {
rootOpts := &RootOptions{}
Expand Down Expand Up @@ -92,16 +98,16 @@ func (ro *RootOptions) toBuild() *builder.Build {
}

return &builder.Build{
TargetType: builder.Type(ro.Target),
DriverVersion: ro.DriverVersion,
KernelVersion: ro.KernelVersion,
KernelRelease: ro.KernelRelease,
Architecture: ro.Architecture,
KernelConfigData: kernelConfigData,
ModuleFilePath: ro.Output.Module,
ProbeFilePath: ro.Output.Probe,
ModuleDriverName: ro.ModuleDriverName,
ModuleDeviceName: ro.ModuleDeviceName,
TargetType: builder.Type(ro.Target),
DriverVersion: ro.DriverVersion,
KernelVersion: ro.KernelVersion,
KernelRelease: ro.KernelRelease,
Architecture: ro.Architecture,
KernelConfigData: kernelConfigData,
ModuleFilePath: ro.Output.Module,
ProbeFilePath: ro.Output.Probe,
ModuleDriverName: ro.ModuleDriverName,
ModuleDeviceName: ro.ModuleDeviceName,
CustomBuilderImage: ro.BuilderImage,
}
}
Expand Down
35 changes: 35 additions & 0 deletions validate/isimagename.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package validate

import (
"github.com/go-playground/validator/v10"
"strings"
)

const letters = "abcdefghijklmnopqrstuvwxyz"
const digits = "0123456789"
const separators = "/.-@_:"
const alphabet = letters + digits + separators

func isImageName(fl validator.FieldLevel) bool {
name := fl.Field().String()

for _, c := range name {
if !strings.ContainsRune(alphabet, c) {
return false
}
}

for _, component := range strings.Split(name, "/") {
// a component may not be empty (i.e. double slashes are not allowed)
if len(component) == 0 {
return false
}

// a component may not start or end with a separator
if strings.Contains(separators, component[0:1]) || strings.Contains(separators, component[len(component)-1:]) {
return false
}
}

return true
}
1 change: 1 addition & 0 deletions validate/validate.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ func init() {
V.RegisterValidation("target", isTargetSupported)
V.RegisterValidation("semver", isSemVer)
V.RegisterValidation("proxy", isProxy)
V.RegisterValidation("imagename", isImageName)

eng := en.New()
uni := ut.New(eng, eng)
Expand Down

0 comments on commit 8a93af5

Please sign in to comment.