feat: new cli client to send and receive msg from api

This commit is contained in:
wancat committed 2023-08-08 20:38:27 +08:00
1 parent e2e585329f
commit 0153eae673
5 files changed
+93 -17

No files matched your search

+4 -2
View File
@@ -1,4 +1,4 @@
FROM ubuntu:latest
FROM node:latest
RUN apt-get update && apt-get install -y \
curl \
@@ -11,6 +11,8 @@ USER rudeus
WORKDIR /home/rudeus
COPY ./home /home/rudeus/
COPY ./server/quests/helloworld/home /home/rudeus/
COPY ./packages/cli/cli.js /usr/local/bin/cli.js
CMD [ "/bin/bash" ]
+7 -13
View File
@@ -2,26 +2,20 @@
preexec() {
[ -n "$COMP_LINE" ] && return # do nothing if completing
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # do nothing if completing
local command="$BASH_COMMAND"
local pwd="$PWD"
export COMMAND="$BASH_COMMAND"
if [[ $command =~ ^(vim|top|less|more|nano) ]]; then
local payload=$(printf '{"token": "%s", "pwd": "%s", "command": "%s"}' "$TOKEN" "$pwd" "$command")
curl -X POST $API_ENDPOINT/api/v1/commands -H 'accept: */*' -H 'Content-Type: application/json' -d "$payload"
if [[ $COMMAND =~ ^(vim|top|less|more|nano) ]]; then
node /usr/local/bin/cli.js
return
fi
# Execute the command, capture output and exit code
local output=$( { eval $command 2>&1; echo $? > /tmp/exit_code; })
local exit_code=$(cat /tmp/exit_code)
export OUTPUT=$( { eval $COMMAND 2>&1; echo $? > /tmp/exit_code; })
export EXIT_CODE=$(cat /tmp/exit_code)
local output_esc=$(echo $output | jq -Rs .)
# Store command in variable
local payload=$(printf '{"token": "%s", "pwd": "%s", "command": "%s", "exit_code": "%s", "output": %s}' "$TOKEN" "$pwd" "$command" "$exit_code" "$output_esc")
echo $OUTPUT
# Send command to the API
curl -X POST $API_ENDPOINT/api/v1/commands -H 'accept: */*' -H 'Content-Type: application/json' -d "$payload" || echo $payload
node /usr/local/bin/cli.js
BASH_COMMAND=""
}
+5 -2
View File
@@ -3,7 +3,7 @@ import config from '../config.js'
const engine = new Docker()
const questPath = '/home/zeko/src/linux-odyssey/server/quests'
const projectPath = '/home/zeko/src/linux-odyssey'
const containerOptions = {
Image: 'lancatlin/linux-odyssey:helloworld',
@@ -17,7 +17,10 @@ const containerOptions = {
HostConfig: {
Binds: config.isProduction
? []
: [`${questPath}/helloworld/home:/home/rudeus`],
: [
`${projectPath}/server/quests/helloworld/home:/home/rudeus`,
`${projectPath}/packages/cli/cli.js:/usr/local/bin/cli.js`,
],
},
}