MCPcopy Create free account
hub / github.com/Adaptix-Framework/AdaptixC2 / ParseCommand

Function ParseCommand

AdaptixServer/core/axscript/parser.go:69–209  ·  view source on GitHub ↗
(cmdline string, resolved *ResolvedCommand)

Source from the content-addressed store, hash-verified

67}
68
69func ParseCommand(cmdline string, resolved *ResolvedCommand) (*ParsedCommand, error) {
70 tokens := Tokenize(cmdline)
71 if len(tokens) == 0 {
72 return nil, fmt.Errorf("empty command line")
73 }
74
75 result := &ParsedCommand{
76 Args: make(map[string]interface{}),
77 }
78
79 commandName := tokens[0]
80 result.CommandName = commandName
81 result.Args["command"] = commandName
82
83 var cmdDef *CommandDef
84 argTokens := tokens[1:]
85
86 if resolved.Subcommand != nil {
87 if len(tokens) < 2 {
88 return nil, fmt.Errorf("subcommand required for '%s'", commandName)
89 }
90 result.SubcommandName = tokens[1]
91 result.Args["subcommand"] = tokens[1]
92 cmdDef = resolved.Subcommand
93 argTokens = tokens[2:]
94 } else {
95 cmdDef = resolved.Command
96 }
97
98 parsedArgsMap := make(map[string]string)
99 var lastKey string
100
101 for i := 0; i < len(argTokens); i++ {
102 arg := argTokens[i]
103 isWideArgs := true
104
105 for _, commandArg := range cmdDef.Args {
106 if commandArg.Flag {
107 if commandArg.Type == ArgTypeBool && commandArg.Mark == arg {
108 parsedArgsMap[commandArg.Mark] = "true"
109 lastKey = commandArg.Mark
110 isWideArgs = false
111 break
112 } else if commandArg.Mark == arg && i+1 < len(argTokens) {
113 i++
114 parsedArgsMap[commandArg.Name] = argTokens[i]
115 lastKey = commandArg.Name
116 isWideArgs = false
117 break
118 }
119 } else if _, exists := parsedArgsMap[commandArg.Name]; !exists {
120 parsedArgsMap[commandArg.Name] = arg
121 lastKey = commandArg.Name
122 isWideArgs = false
123 break
124 }
125 }
126

Callers 3

ParseCommandPublicMethod · 0.85
resolveAgentCommandMethod · 0.85
ValidateCommandMethod · 0.85

Calls 3

TokenizeFunction · 0.85
StringMethod · 0.80
ContainsMethod · 0.45

Tested by

no test coverage detected