Files
activecm-rita/cmd/validate.go
T
Naomi Kramer 906f53b3e5 BEAM ME UP SCOTTY
Co-Authored-By: Liza Tsibur <liza@activecountermeasures.com>
2024-06-28 00:28:25 -04:00

80 lines
1.5 KiB
Go

package cmd
import (
"activecm/rita/config"
"activecm/rita/util"
"errors"
"fmt"
"github.com/spf13/afero"
"github.com/urfave/cli/v2"
)
var ErrInvalidConfig = errors.New("encountered invalid configuration values")
var ValidateConfigCommand = &cli.Command{
Name: "validate",
Usage: "validate a configuration file",
UsageText: "validate [--config FILE]",
Args: false,
Flags: []cli.Flag{
ConfigFlag(false),
},
Action: func(cCtx *cli.Context) error {
// check if a config was provided and is not empty
if cCtx.String("config") == "" {
return ErrMissingConfigPath
}
// check if too many arguments were provided
if cCtx.NArg() > 0 {
return ErrTooManyArguments
}
afs := afero.NewOsFs()
// validate config file
if err := RunValidateConfigCommand(afs, cCtx.String("config")); err != nil {
return err
}
return nil
},
}
func RunValidateConfigCommand(afs afero.Fs, configPath string) error {
// validate config file path
if err := ValidateConfigPath(afs, configPath); err != nil {
return err
}
// load config path
_, err := config.LoadConfig(afs, configPath)
if err != nil {
return err
}
fmt.Println("configuration file is valid")
return nil
}
func ValidateConfigPath(afs afero.Fs, configPath string) error {
if configPath == "" {
return ErrMissingConfigPath
}
// get relative file path
_, err := util.ParseRelativePath(configPath)
if err != nil {
return err
}
// validate file path
if err := util.ValidateFile(afs, configPath); err != nil {
return err
}
return nil
}