mirror of
https://github.com/activecm/rita
synced 2026-06-08 13:02:45 +00:00
906f53b3e5
Co-Authored-By: Liza Tsibur <liza@activecountermeasures.com>
80 lines
1.5 KiB
Go
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
|
|
}
|