mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-21 10:27:46 +08:00
commands/cli,http: Make sure required file arguments are provided
This commit is contained in:
parent
bc8a97c119
commit
9333c504c1
@ -248,6 +248,13 @@ func parseArgs(inputs []string, stdin *os.File, argDefs []cmds.Argument, recursi
|
||||
argDefIndex++
|
||||
}
|
||||
|
||||
// check to make sure we didn't miss any required arguments
|
||||
for _, argDef := range argDefs[argDefIndex:] {
|
||||
if argDef.Required {
|
||||
return nil, nil, fmt.Errorf("Argument '%s' is required", argDef.Name)
|
||||
}
|
||||
}
|
||||
|
||||
return stringArgs, fileArgs, nil
|
||||
}
|
||||
|
||||
|
||||
@ -2,6 +2,7 @@ package http
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"mime"
|
||||
"net/http"
|
||||
"strings"
|
||||
@ -54,6 +55,7 @@ func Parse(r *http.Request, root *cmds.Command) (cmds.Request, error) {
|
||||
args := make([]string, valCount)
|
||||
|
||||
valIndex := 0
|
||||
requiredFile := ""
|
||||
for _, argDef := range cmd.Arguments {
|
||||
// skip optional argument definitions if there aren't sufficient remaining values
|
||||
if valCount-valIndex <= numRequired && !argDef.Required {
|
||||
@ -78,6 +80,8 @@ func Parse(r *http.Request, root *cmds.Command) (cmds.Request, error) {
|
||||
} else {
|
||||
break
|
||||
}
|
||||
} else if argDef.Type == cmds.ArgFile && argDef.Required && len(requiredFile) == 0 {
|
||||
requiredFile = argDef.Name
|
||||
}
|
||||
}
|
||||
|
||||
@ -101,6 +105,11 @@ func Parse(r *http.Request, root *cmds.Command) (cmds.Request, error) {
|
||||
}
|
||||
}
|
||||
|
||||
// if there is a required filearg, error if no files were provided
|
||||
if len(requiredFile) > 0 && f == nil {
|
||||
return nil, fmt.Errorf("File argument '%s' is required", requiredFile)
|
||||
}
|
||||
|
||||
req, err := cmds.NewRequest(path, opts, args, f, cmd, optDefs)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
Loading…
Reference in New Issue
Block a user