diff --git a/.dockerignore b/.dockerignore index afbc551..f8d8061 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,2 +1,3 @@ vendor -Dockerfile \ No newline at end of file +Dockerfile +salt.go \ No newline at end of file diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..7c8db5d --- /dev/null +++ b/.drone.yml @@ -0,0 +1,18 @@ +kind: pipeline +name: production + +steps: +- name: docker + image: plugins/docker + # environment: + # Salt: + # from_secret: Salt + settings: + dockerfile: Dockerfile.Build + repo: vwxyzjn/portwarden-server-prod + target: production + auto_tag: true + username: + from_secret: docker_username + password: + from_secret: docker_password \ No newline at end of file diff --git a/.gitignore b/.gitignore index 12852ca..3fe9c63 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ cmd/portwarden/portwarden_backup/* vendor/* **/*.portwarden -**/*.decrypted.zip \ No newline at end of file +**/*.decrypted.zip +salt.go \ No newline at end of file diff --git a/Dockerfile.Build b/Dockerfile.Build index bca4238..8fb4613 100644 --- a/Dockerfile.Build +++ b/Dockerfile.Build @@ -1,4 +1,4 @@ -FROM ubuntu:latest +FROM ubuntu:latest as builder # Install Go RUN apt-get update && apt-get install -y wget git gcc unzip @@ -7,6 +7,7 @@ RUN tar -C /usr/local -xzf /tmp/go1.11.2.linux-amd64.tar.gz RUN rm /tmp/go1.11.2.linux-amd64.tar.gz ENV GOPATH /go ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH +ENV Salt $Salt RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH" # Setup work directory @@ -25,20 +26,19 @@ RUN chmod +x /usr/bin/bw # Run dep # Notice git is the dependency for running dep RUN cd /go/src/github.com/vwxyzjn/portwarden && dep ensure --vendor-only - +RUN go run /go/src/github.com/vwxyzjn/portwarden/web/utils/generate_salt_file.go RUN go build /go/src/github.com/vwxyzjn/portwarden/web/worker/main.go && mv ./main /worker RUN go build /go/src/github.com/vwxyzjn/portwarden/web/scheduler/main.go && mv ./main /scheduler # Ready to run EXPOSE 5000 - -FROM debian:stretch-20181112 +FROM debian:stretch-20181112 as production RUN apt-get update && apt-get install -y ca-certificates openssl -COPY --from=0 /usr/bin/bw /usr/bin/bw -COPY --from=0 /scheduler /go/src/github.com/vwxyzjn/portwarden/web/scheduler/scheduler -COPY --from=0 /worker /go/src/github.com/vwxyzjn/portwarden/web/worker/worker -COPY --from=0 /go/src/github.com/vwxyzjn/portwarden/web/portwardenCredentials.json /go/src/github.com/vwxyzjn/portwarden/web/portwardenCredentials.json +COPY --from=builder /usr/bin/bw /usr/bin/bw +COPY --from=builder /scheduler /go/src/github.com/vwxyzjn/portwarden/web/scheduler/scheduler +COPY --from=builder /worker /go/src/github.com/vwxyzjn/portwarden/web/worker/worker +COPY --from=builder /go/src/github.com/vwxyzjn/portwarden/web/portwardenCredentials.json /go/src/github.com/vwxyzjn/portwarden/web/portwardenCredentials.json RUN chmod +x /go/src/github.com/vwxyzjn/portwarden/web/scheduler/scheduler RUN chmod +x /go/src/github.com/vwxyzjn/portwarden/web/worker/worker WORKDIR /go/src/github.com/vwxyzjn/portwarden diff --git a/docker-compose.yaml b/docker-compose.yaml index cb7b10d..ca3e4f2 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -2,6 +2,15 @@ version: '3' services: + salt_generator: + image: vwxyzjn/portwarden-server-dev:1.7.0 + environment: + - Salt=${Salt} + volumes: + - .:/go/src/github.com/vwxyzjn/portwarden + command: + go run ./utils/generate_salt_file.go + scheduler: image: vwxyzjn/portwarden-server-dev:1.7.0 stdin_open: true @@ -17,8 +26,6 @@ services: - .:/go/src/github.com/vwxyzjn/portwarden working_dir: /go/src/github.com/vwxyzjn/portwarden/web/scheduler - # command: - # go run main.go redis: image: redis @@ -41,8 +48,6 @@ services: - .:/go/src/github.com/vwxyzjn/portwarden working_dir: /go/src/github.com/vwxyzjn/portwarden/web/worker - command: - go run main.go redis-commander: image: rediscommander/redis-commander:latest diff --git a/encryption.go b/encryption.go index 7d9a2e2..89ced60 100644 --- a/encryption.go +++ b/encryption.go @@ -14,8 +14,6 @@ import ( ) const ( - Salt = `,(@0vd<)D6c3:5jI;4BZ(#Gx2IZ6B>` - ErrMessageAuthenticationFailed = "cipher: message authentication failed" ErrWrongBackupPassphrase = "wrong backup passphrase entered" ) diff --git a/utils/generate_salt_file.go b/utils/generate_salt_file.go new file mode 100644 index 0000000..cb2af28 --- /dev/null +++ b/utils/generate_salt_file.go @@ -0,0 +1,30 @@ +package main + +import ( + "fmt" + "io/ioutil" + "log" + "os" +) + +const ( + Template = `package portwarden + +const ( + Salt = "%v" +) +` +) + +func main() { + Salt := os.Getenv("Salt") + if len(Salt) == 0 { + log.Fatal("Salt not detected in Environment Variable `Salt`") + } + err := ioutil.WriteFile("./salt.go", []byte(fmt.Sprintf(Template, Salt)), 0644) + if err != nil { + if len(Salt) == 0 { + log.Fatalf("Error writing salt file: %v", err) + } + } +}