Skip to content

Commit f0ad23a

Browse files
committed
Change: refactor structure and makefile, also switch do- arugments to disable- flags
1 parent 7d4883c commit f0ad23a

30 files changed

+269
-112
lines changed

.env

Whitespace-only changes.

.github/workflows/go-test-build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ on:
66
paths:
77
- "**.go"
88
- "go.*"
9-
- "version.txt"
9+
- "Makefile"
1010

1111
permissions:
1212
contents: write
@@ -24,7 +24,7 @@ jobs:
2424
go-version: "1.23"
2525

2626
- name: Test
27-
run: make coverage
27+
run: make test
2828

2929
- name: Build
3030
run: make build

.gitignore

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,4 @@ vault
2626
vault.*
2727
*.vt
2828
*.bak
29-
30-
# node
31-
node_modules
29+
bin

Dockerfile

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
### BASE
2+
FROM golang AS base
3+
4+
EXPOSE 8080
5+
WORKDIR /app
6+
7+
COPY go.mod* go.sum* ./
8+
RUN go mod tidy
9+
10+
### LOCAL
11+
FROM base AS local
12+
13+
RUN go install github.com/air-verse/air@v1
14+
15+
ENTRYPOINT air
16+
17+
### BASE DEPLOY
18+
FROM base AS base-deploy
19+
COPY . .
20+
RUN make mainbuild
21+
22+
### DEPLOY
23+
FROM ubuntu:24.04 AS deploy
24+
25+
RUN useradd -m appuser --uid 10000
26+
USER 10000
27+
28+
COPY --from=base-deploy --chown=10000 /app/bin /usr/local/bin/appbin
29+
30+
CMD ["appbin"]

Makefile

Lines changed: 91 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,107 @@
1-
BINARY_NAME := vault
2-
VERSION := $(shell cat version.txt)
1+
DISPLAY_NAME := Vault
2+
SHORT_NAME := vault
3+
VERSION := 1.3.8
4+
35
COMMIT := $(shell git rev-parse --short HEAD)
6+
BUILD_ARGS := "-X main.Version=$(VERSION) -X main.Commit=$(COMMIT) -X main.DisplayName=$(DISPLAY_NAME) -X main.ShortName=$(SHORT_NAME)"
7+
PORT ?= 8080
48

5-
build:
6-
go build -o $(BINARY_NAME) -ldflags='-X main.Version=$(VERSION) -X main.Commit=$(COMMIT)' main.go
9+
-include .env
10+
export
711

12+
## info: prints a project info message
13+
.PHONY: info
14+
info:
15+
@echo "$(DISPLAY_NAME) version $(VERSION), build $(COMMIT)"
16+
17+
## run: uses go to start the main.go
18+
.PHONY: run
819
run:
9-
go run main.go
20+
@go run main.go
21+
22+
## build: uses go to build the app with build args
23+
.PHONY: build
24+
build:
25+
@touch .env
26+
go build \
27+
-ldflags=$(BUILD_ARGS) \
28+
-o bin
29+
chmod +x bin
1030

31+
## clean: cleans up the tmp, build and docker cache
32+
.PHONY: clean
1133
clean:
12-
go clean
13-
rm -f $(BINARY_NAME)
34+
@rm -f bin
35+
@rm -fr ./tmp
36+
@if command -v go 2>&1 >/dev/null; then \
37+
echo "cleanup go..."; \
38+
go clean; \
39+
go clean -cache -fuzzcache; \
40+
fi
41+
@if command -v docker 2>&1 >/dev/null; then \
42+
echo "cleanup docker..."; \
43+
CACHE_DIR="" PORT="" docker compose down --remove-orphans --rmi all; \
44+
docker image prune -f; \
45+
fi
46+
@echo "cleanup done!"
47+
@echo "WARNING: the .env file still exists!"
1448

15-
deps:
16-
go mod download
1749

50+
## update: updates dependencies
51+
.PHONY: update
1852
update:
19-
rm -f go.sum
20-
go mod tidy
2153
go get -t -u ./...
2254

55+
## test: runs all tests without coverage
56+
.PHONY: test
2357
test:
2458
go test ./...
2559

26-
coverage:
27-
go test ./... -cover
60+
## init: prepares ands builds
61+
.PHONY: init
62+
init:
63+
@touch .env
64+
@echo "update deps..."
65+
@go mod tidy
66+
@echo "testing..."
67+
@make -s test
68+
@echo "building..."
69+
@make -s build
2870

71+
## dev: starts a dev docker container
72+
.PHONY: dev
2973
dev:
30-
echo "WIP :)"
74+
@touch .env
75+
$(eval CACHE_DIR = .tmp/.cache/go-build)
76+
@if [ -d ~/.cache/go-build ]; then \
77+
$(eval CACHE_DIR = ~/.cache/go-build) \
78+
echo "Use users go-build cache dir."; \
79+
else \
80+
mkdir -p $(CACHE_DIR); \
81+
echo "Use local go-build cache dir."; \
82+
fi
83+
84+
@docker rm -f $(SHORT_NAME)-local-dev > /dev/null 2>&1
85+
86+
PORT=${PORT} \
87+
CACHE_DIR=${CACHE_DIR} \
88+
docker compose run --build --rm -it --name $(SHORT_NAME)-local-dev -P local
89+
90+
## exec: starts a bash in a dev container
91+
.PHONY: exec
92+
exec:
93+
@touch .env
94+
$(eval CACHE_DIR = .tmp/.cache/go-build)
95+
@if [ -d ~/.cache/go-build ]; then \
96+
$(eval CACHE_DIR = ~/.cache/go-build) \
97+
echo "Use users go-build cache dir."; \
98+
else \
99+
mkdir -p $(CACHE_DIR); \
100+
echo "Use local go-build cache dir."; \
101+
fi
102+
103+
@docker rm -f $(SHORT_NAME)-local-bash > /dev/null 2>&1
104+
105+
PORT=${PORT} \
106+
CACHE_DIR=${CACHE_DIR} \
107+
docker compose run --build --rm -it --name $(SHORT_NAME)-local-bash --entrypoint bash -P local

docker-compose.yaml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
services:
2+
local:
3+
build:
4+
dockerfile: "Dockerfile"
5+
target: "local"
6+
ports:
7+
- "127.0.0.1:${PORT}:8080"
8+
volumes:
9+
- type: bind
10+
source: .
11+
target: /app
12+
- type: bind
13+
source: ${CACHE_DIR}
14+
target: /root/.cache/go-build
15+
env_file: ".env"
16+
17+
lint:
18+
image: golangci/golangci-lint:v1
19+
command: "golangci-lint run -v"
20+
working_dir: "/app"
21+
volumes:
22+
- type: bind
23+
source: .
24+
target: /app
25+
read_only: true
26+
27+
deploy:
28+
build:
29+
dockerfile: "Dockerfile"
30+
target: "deploy"
31+
ports:
32+
- "127.0.0.1:${PORT}:8080"
33+
env_file: ".env"
34+

go.mod

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ module coreunit.net/vault
33
go 1.23
44

55
require (
6+
github.com/joho/godotenv v1.5.1
67
github.com/spf13/cobra v1.8.1
7-
golang.org/x/crypto v0.26.0
8-
golang.org/x/term v0.23.0
8+
golang.org/x/crypto v0.28.0
9+
golang.org/x/term v0.25.0
910
)
1011

1112
require (
1213
github.com/inconshreveable/mousetrap v1.1.0 // indirect
1314
github.com/spf13/pflag v1.0.5 // indirect
14-
golang.org/x/sys v0.24.0 // indirect
15+
golang.org/x/sys v0.26.0 // indirect
1516
)

go.sum

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,24 @@
11
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
22
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
33
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
4+
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
5+
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
46
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
57
github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
68
github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
79
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
810
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
911
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
1012
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
11-
golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM=
12-
golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
13+
golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
14+
golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
1315
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
1416
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
17+
golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
18+
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
1519
golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
1620
golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
21+
golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24=
22+
golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M=
1723
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
1824
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
File renamed without changes.

cmd/config/config.go renamed to internal/config/config.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ type AppConfig struct {
1818
PlainFileExtension string
1919
BackupFileExtension string
2020
CleanPrint bool
21-
DoRSA bool
22-
DoAES256 bool
21+
DisableRSA bool
22+
DisableAES256 bool
2323
SubCommand string
2424
TempDecodeSeconds int
2525
}
@@ -35,8 +35,8 @@ func defaultAppConfig() *AppConfig {
3535
VaultFileExtension: "vt",
3636
PlainFileExtension: "txt",
3737
CleanPrint: false,
38-
DoRSA: true,
39-
DoAES256: true,
38+
DisableRSA: false,
39+
DisableAES256: false,
4040
SubCommand: "",
4141
TempDecodeSeconds: 10,
4242
}
@@ -60,8 +60,8 @@ func addCryptFlags(appConfig *AppConfig, cmd *cobra.Command) {
6060
cmd.Flags().StringVarP(&appConfig.PublicKeyPath, "public-key", "u", appConfig.PublicKeyPath, "Defines the public key path (VAULT_PUBLIC_KEY_PATH)")
6161
cmd.Flags().StringVarP(&appConfig.VaultFileExtension, "vault-ext", "e", appConfig.VaultFileExtension, "Defines the vault file extension (VAULT_EXT)")
6262
cmd.Flags().StringVarP(&appConfig.PlainFileExtension, "plain-ext", "p", appConfig.PlainFileExtension, "Defines the plain file extension (VAULT_PLAIN_EXT)")
63-
cmd.Flags().BoolVarP(&appConfig.DoRSA, "rsa", "x", appConfig.DoRSA, "Use RSA key encryption (VAULT_RSA)")
64-
cmd.Flags().BoolVarP(&appConfig.DoAES256, "aes", "a", appConfig.DoAES256, "Use AES256 password encryption (VAULT_AES)")
63+
cmd.Flags().BoolVarP(&appConfig.DisableRSA, "no-rsa", "x", appConfig.DisableRSA, "Use RSA key encryption (VAULT_RSA)")
64+
cmd.Flags().BoolVarP(&appConfig.DisableAES256, "no-aes", "a", appConfig.DisableAES256, "Use AES256 password encryption (VAULT_AES)")
6565
}
6666

6767
func lockCommand(appConfig *AppConfig) *cobra.Command {
@@ -198,12 +198,20 @@ func loadEnvVars(appConfig *AppConfig) {
198198
appConfig.PlainFileExtension = value
199199
})
200200

201+
EnvIsBool("VAULT_DISABLE_RSA", func(value bool) {
202+
appConfig.DisableRSA = value
203+
})
204+
201205
EnvIsBool("VAULT_RSA", func(value bool) {
202-
appConfig.DoRSA = value
206+
appConfig.DisableRSA = !value
207+
})
208+
209+
EnvIsBool("VAULT_DISABLE_AES", func(value bool) {
210+
appConfig.DisableAES256 = value
203211
})
204212

205213
EnvIsBool("VAULT_AES", func(value bool) {
206-
appConfig.DoAES256 = value
214+
appConfig.DisableAES256 = !value
207215
})
208216

209217
EnvIsBool("VAULT_VERBOSE", func(value bool) {

0 commit comments

Comments
 (0)