From 9376e16f7228ecc903a9a49062f9a06ee6512133 Mon Sep 17 00:00:00 2001 From: wancat Date: Wed, 26 Jul 2023 00:12:10 +0800 Subject: [PATCH] Success to send command to api + require sourcing entrypoint.sh manually --- cleanup.sh | 5 +++ docker-compose.prod.yml | 32 +++++++++++++++++++ docker-compose.yml | 1 - server/quests/helloworld/Dockerfile | 11 +++++++ server/quests/helloworld/entrypoint.sh | 25 +++++++++++++++ .../src/api/controllers/commandController.js | 1 + server/src/api/socket.js | 1 - 7 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 cleanup.sh create mode 100644 docker-compose.prod.yml create mode 100644 server/quests/helloworld/Dockerfile create mode 100644 server/quests/helloworld/entrypoint.sh diff --git a/cleanup.sh b/cleanup.sh new file mode 100644 index 0000000..09c66ad --- /dev/null +++ b/cleanup.sh @@ -0,0 +1,5 @@ +#!/bin/sh +containers=$(docker ps -a | grep 'quest-' | awk '{print $1}') +echo $containers + +docker rm -f $containers \ No newline at end of file diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..888ecc8 --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,32 @@ +version: '3' +services: + app: + image: lancatlin/linux-odyssey + restart: on-failure + build: + context: . + dockerfile: Dockerfile + networks: + - internal + - players + ports: + - '3000:3000' + volumes: + - /var/run/docker.sock:/var/run/docker.sock + environment: + - MONGO_URL=mongodb://db:27017/odyssey-test + - DOCKER_NETWORK=linux-odyssey-players + db: + image: mongo + restart: always + networks: + - internal + ports: + - '27017:27017' + volumes: + - ./data:/data/db + +networks: + internal: + players: + name: linux-odyssey-players diff --git a/docker-compose.yml b/docker-compose.yml index 7cdeb90..8a03ed9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,6 @@ version: '3' services: app: - image: lancatlin/linux-odyssey restart: on-failure build: context: . diff --git a/server/quests/helloworld/Dockerfile b/server/quests/helloworld/Dockerfile new file mode 100644 index 0000000..1f6751b --- /dev/null +++ b/server/quests/helloworld/Dockerfile @@ -0,0 +1,11 @@ +FROM ubuntu:latest + +RUN apt-get update && apt-get install -y \ + curl \ + vim + +WORKDIR /app + +COPY . . + +CMD [ "/bin/bash" ] \ No newline at end of file diff --git a/server/quests/helloworld/entrypoint.sh b/server/quests/helloworld/entrypoint.sh new file mode 100644 index 0000000..f5f4d11 --- /dev/null +++ b/server/quests/helloworld/entrypoint.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +#if [ -f /etc/bash_completion ] && ! shopt -oq posix; then +# . /etc/bash_completion +#fi + +# This function will be called before each command is executed +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" + + # Store command in variable + local cmd=$(printf '{"token": "%s", "pwd": "%s", "command": "%s"}' "$TOKEN" "$pwd" "$command") + + # Send command to the API + curl -X POST $API_ENDPOINT/api/v1/commands -H 'accept: */*' -H 'Content-Type: application/json' -d "$cmd" +} + +# Install the trap +trap 'preexec' DEBUG diff --git a/server/src/api/controllers/commandController.js b/server/src/api/controllers/commandController.js index 5f8a887..92c8374 100644 --- a/server/src/api/controllers/commandController.js +++ b/server/src/api/controllers/commandController.js @@ -4,6 +4,7 @@ import Session from '../../models/session.js' import { verifySessionJWT } from '../../utils/auth.js' export async function newCommand(req, res) { + console.log('new command:', req.body) const { token, command, pwd, output } = req.body let sessionId diff --git a/server/src/api/socket.js b/server/src/api/socket.js index 24a75e7..2eea301 100644 --- a/server/src/api/socket.js +++ b/server/src/api/socket.js @@ -54,7 +54,6 @@ export default (server) => { }) socket.on('message', function incoming(message) { - console.log(`From client: ${message}`) stream.write(message) })