diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..85d5f55 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,17 @@ +version: "2" +run: + modules-download-mode: readonly +linters: + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + paths: + - .*_test.go + - api + - third_party$ + - builtin$ + - examples$ diff --git a/Taskfile.yml b/Taskfile.yml index 2d86c88..25dd942 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -6,6 +6,10 @@ vars: LOCALBIN: sh: echo "$(pwd)/bin" MIGRATE: "{{.LOCALBIN}}/migrate" + GOFUMPT: "{{.LOCALBIN}}/gofumpt" + GOLANGCI_LINT: "{{.LOCALBIN}}/golangci-lint" + # Tool versions + GOLANGCI_LINT_VERSION: v2.8.0 tasks: build: @@ -23,6 +27,34 @@ tasks: - run-migrations-dev silent: true + fmt: + desc: Run gofumt fmt against code. + deps: + - gofumt + cmd: '"{{.GOFUMPT}}" -l -w .' + + vet: + desc: Run go vet against code. + cmd: go vet ./... + + lint: + desc: Run golangci-lint linter + deps: + - golangci-lint + cmd: '"{{.GOLANGCI_LINT}}" run' + + lint-fix: + desc: Run golangci-lint linter and perform fixes + deps: + - golangci-lint + cmd: '"{{.GOLANGCI_LINT}}" run --fix' + + lint-config: + desc: Verify golangci-lint linter configuration + deps: + - golangci-lint + cmd: '"{{.GOLANGCI_LINT}}" config verify' + run-migrations-dev: desc: Execute database migrations env: @@ -122,3 +154,33 @@ tasks: mv "{{.LOCALBIN}}/$(basename "$TARGET")" "$VERSIONED" ln -sf "$(realpath "$VERSIONED")" "$TARGET" + + gofumt: + desc: Download latest gofumt + silent: true + deps: + - localbin + cmds: + - task: go-install-tool + vars: + TARGET: "{{.GOFUMPT}}" + PACKAGE: mvdan.cc/gofumpt + VERSION: "latest" + + golangci-lint: + desc: Install golangci-lint (with optional custom build) + silent: true + deps: + - localbin + cmds: + - task: go-install-tool + vars: + TARGET: "{{.GOLANGCI_LINT}}" + PACKAGE: github.com/golangci/golangci-lint/v2/cmd/golangci-lint + VERSION: "{{.GOLANGCI_LINT_VERSION}}" + - | + if [ -f .custom-gcl.yml ]; then + echo "Building custom golangci-lint with plugins..." + "{{.GOLANGCI_LINT}}" custom --destination "{{.LOCALBIN}}" --name golangci-lint-custom + mv -f "{{.LOCALBIN}}/golangci-lint-custom" "{{.GOLANGCI_LINT}}" + fi diff --git a/cmd/migrate.go b/cmd/migrate.go index 466ac84..36b22e5 100644 --- a/cmd/migrate.go +++ b/cmd/migrate.go @@ -39,7 +39,8 @@ func (cmd *Migrate) Run(ctx context.Context) error { log.Info("Preparing database migrations") m, err := migrate.NewWithDatabaseInstance( cmd.MigrationsPath, - "postgres", driver) + "postgres", driver, + ) if err != nil { log.Error(err, "Couldn't perform database migrations") return err diff --git a/cover.cov b/cover.cov new file mode 100644 index 0000000..362c9a0 --- /dev/null +++ b/cover.cov @@ -0,0 +1,383 @@ +mode: set +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/token/token.go:15.38,18.16 3 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/token/token.go:18.16,20.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/token/token.go:21.2,21.57 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/token/token.go:29.32,31.2 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/token/token.go:33.54,41.2 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/token/token.go:43.49,45.2 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/hash/hash.go:5.62,8.2 2 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/hash/hash.go:10.53,12.2 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/main.go:7.13,8.34 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/main.go:8.34,9.13 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:19.19,24.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:32.99,34.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:34.16,36.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:38.2,38.54 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:38.54,40.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:42.2,43.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:43.16,45.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:47.2,47.37 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:47.37,49.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:51.2,56.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:56.16,58.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:60.2,65.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:65.16,67.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:68.2,70.82 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:70.82,72.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:74.2,78.52 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:78.52,80.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/accounts.go:82.2,82.30 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:19.25,24.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:32.110,34.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:34.16,36.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:37.2,42.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:42.16,44.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:46.2,51.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:51.16,53.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:55.2,57.79 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:57.79,59.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:60.2,64.52 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:64.52,66.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:67.2,67.30 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:71.110,77.16 3 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:77.16,79.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:81.2,86.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:86.16,88.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:90.2,95.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:95.16,97.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:99.2,101.79 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:101.79,103.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:105.2,109.52 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:109.52,111.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_accounts.go:112.2,112.30 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_tokens.go:27.23,32.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_tokens.go:34.140,36.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_tokens.go:36.16,37.46 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_tokens.go:37.46,39.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_tokens.go:40.3,40.49 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_tokens.go:40.49,42.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_tokens.go:43.3,43.64 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_tokens.go:46.2,53.16 3 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_tokens.go:53.16,55.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_tokens.go:57.2,60.52 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_tokens.go:60.52,62.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/public_tokens.go:63.2,63.30 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/test.go:11.34,13.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/test.go:19.98,21.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/test.go:23.118,24.26 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/test.go:24.26,25.78 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/test.go:25.78,27.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/test.go:29.2,29.12 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/test.go:32.46,34.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/test.go:40.104,42.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/test.go:44.124,45.26 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/test.go:45.26,46.78 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/test.go:46.78,48.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/test.go:50.2,50.12 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:26.17,31.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:34.127,36.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:36.16,38.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:39.2,39.25 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:39.25,41.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:43.2,43.32 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:43.32,45.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:46.2,47.64 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:47.64,49.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:51.2,59.16 3 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:59.16,60.49 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:60.49,62.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:63.3,63.69 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:66.2,71.8 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:75.132,77.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:77.16,79.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:80.2,80.25 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:80.25,82.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:84.2,84.94 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:84.94,85.49 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:85.49,87.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:88.3,88.90 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:91.2,91.83 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:91.83,92.49 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:92.49,94.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:95.3,95.69 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:97.2,97.30 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:101.118,103.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:103.16,105.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:106.2,106.25 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:106.25,108.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:109.2,109.94 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:109.94,110.49 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:110.49,112.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:113.3,113.90 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:116.2,117.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:117.16,118.49 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:118.49,120.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:121.3,121.66 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:124.2,137.8 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:141.124,143.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:143.16,145.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:146.2,146.25 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:146.25,148.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:150.2,151.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:151.16,152.49 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:152.49,154.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:155.3,155.61 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:158.2,158.37 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:158.37,171.18 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:171.18,173.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:175.2,175.12 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:179.139,181.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:181.16,183.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:184.2,184.25 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:184.25,186.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:187.2,187.94 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:187.94,188.49 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:188.49,190.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:191.3,191.90 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:194.2,195.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:195.16,196.49 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:196.49,198.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:199.3,199.66 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:201.2,205.8 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:209.127,211.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:211.16,213.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:214.2,214.25 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:214.25,216.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:218.2,218.94 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:218.94,219.49 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:219.49,221.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:222.3,222.90 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:224.2,224.32 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:224.32,226.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:228.2,229.64 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:229.64,231.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:232.2,236.61 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:236.61,237.49 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:237.49,239.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:240.3,240.66 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:242.2,246.8 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:250.134,252.30 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:252.30,260.45 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:260.45,262.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/api/v1/tokens.go:264.2,264.12 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:23.52,28.16 4 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:28.16,31.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:33.2,34.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:34.16,37.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:39.2,43.16 3 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:43.16,46.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:48.2,50.16 3 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:50.16,51.42 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:51.42,53.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:53.9,56.4 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/migrate.go:59.2,59.12 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/root.go:20.18,24.27 3 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/root.go:25.16,26.45 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/root.go:26.45,28.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/root.go:29.17,30.46 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/root.go:30.46,32.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/root.go:33.10,34.27 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/root.go:37.2,37.12 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:50.51,56.16 4 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:56.16,59.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:61.2,63.16 3 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:63.16,65.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:67.2,96.20 4 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:96.20,98.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:100.2,127.46 12 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:127.46,129.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:131.2,131.12 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:135.84,137.28 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:137.28,139.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:140.2,143.46 3 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:143.46,145.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:147.2,147.55 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:147.55,149.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:151.2,151.64 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:151.64,153.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/cmd/server.go:155.2,155.13 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/cache/cache.go:15.42,17.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/cache/cache.go:19.88,21.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/cache/cache.go:23.112,25.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/logger/logger.go:13.47,15.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/logger/logger.go:15.16,17.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/logger/logger.go:18.2,26.11 5 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/logger/logger.go:29.70,33.2 3 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/logger/logger.go:35.51,37.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/logger/logger.go:37.16,39.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/logger/logger.go:40.2,40.41 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/logger/logger.go:43.73,45.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:24.81,27.105 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:27.105,29.29 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:29.29,30.47 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:30.47,32.5 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:33.4,33.14 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:35.3,35.13 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:37.2,37.12 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:41.102,43.73 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:43.73,44.36 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:44.36,46.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:47.3,47.9 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:49.2,49.8 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:53.94,55.61 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:55.61,56.36 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:56.36,58.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:59.3,59.9 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:61.2,61.8 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/accounts.go:65.81,75.2 3 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:24.74,41.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:41.16,43.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:44.2,44.12 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:48.74,50.96 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:50.96,52.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:53.2,53.12 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:56.92,81.16 8 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:81.16,82.36 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:82.36,84.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:85.3,85.18 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/repository/tokens.go:87.2,93.20 6 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:12.61,14.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:14.16,16.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:18.2,18.41 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:18.41,20.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/helpers/postgres/postgres.go:22.2,23.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:47.92,53.16 5 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:53.16,56.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:58.2,64.71 2 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:64.71,65.50 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:65.50,67.4 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:68.3,69.28 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:72.2,72.23 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:76.96,81.16 4 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:81.16,82.45 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:82.45,84.4 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:85.3,86.28 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:89.2,89.71 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:89.71,91.3 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:93.2,94.16 2 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:94.16,95.45 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:95.45,97.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:98.3,99.28 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/accounts.go:102.2,102.18 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:54.116,61.2 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:71.70,73.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:76.62,78.26 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:78.26,80.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:82.2,82.20 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:85.90,87.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:87.16,89.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:91.2,92.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:92.16,94.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:95.2,95.40 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:95.40,96.88 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:96.88,98.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:102.2,102.53 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:102.53,104.10 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:104.10,106.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:108.3,109.73 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:109.73,111.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:112.3,113.15 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:113.15,115.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:118.2,119.17 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:122.70,123.38 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:123.38,124.34 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:124.34,125.63 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:125.63,127.5 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:130.2,130.14 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:134.90,137.24 3 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:138.23,139.42 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:140.24,141.43 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:142.10,143.37 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:146.2,166.16 5 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:166.16,168.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:169.2,169.8 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:172.71,176.47 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:176.47,178.4 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:180.2,180.16 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:180.16,182.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:184.2,185.25 2 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:185.25,187.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:189.2,189.20 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:196.43,198.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:200.99,202.16 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:202.16,204.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:206.2,206.108 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:206.108,208.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:210.2,210.12 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:213.92,215.73 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:215.73,217.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:218.2,219.68 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:219.68,221.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/authorization.go:222.2,222.21 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:58.76,60.2 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:62.41,69.2 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:73.98,79.22 4 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:79.22,83.17 2 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:83.17,86.4 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:89.2,89.26 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:89.26,91.3 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:92.2,92.115 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:92.115,94.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:95.2,95.12 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:99.99,105.16 5 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:105.16,108.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:111.2,111.17 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:111.17,113.3 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:115.2,116.16 2 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:116.16,119.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:121.2,124.16 3 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:124.16,127.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:129.2,140.72 2 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:140.72,143.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:145.2,145.28 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:149.81,154.16 4 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:154.16,157.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:159.2,165.72 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:165.72,168.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:170.2,170.12 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:174.84,179.64 4 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:179.64,182.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:184.2,184.12 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:188.89,193.16 4 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:193.16,196.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:198.2,208.75 3 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:208.75,211.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:213.2,213.16 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:217.94,222.16 4 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:222.16,223.45 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:223.45,225.4 1 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:226.3,227.29 2 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:230.2,231.74 2 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:231.74,235.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:237.2,248.20 2 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:252.92,264.16 6 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:264.16,267.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:269.2,271.35 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:271.35,274.3 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:276.2,276.18 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:276.18,301.17 13 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:301.17,304.4 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:306.3,306.29 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:309.2,309.20 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:313.96,315.41 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:315.41,316.34 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:316.34,317.12 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:319.3,320.35 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:320.35,322.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:323.3,323.25 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:325.2,325.8 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:332.46,333.26 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:333.26,334.26 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:334.26,336.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:338.2,338.14 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:346.113,364.16 8 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:364.16,365.36 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:365.36,367.4 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:368.3,369.29 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:372.2,372.21 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:372.21,374.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:376.2,376.39 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:376.39,378.3 1 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:380.2,385.20 2 0 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:388.34,391.2 2 1 +gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers/tokens.go:393.44,398.2 4 0 diff --git a/internal/controllers/accounts_test.go b/internal/controllers/accounts_test.go index 9667700..d87a2b1 100644 --- a/internal/controllers/accounts_test.go +++ b/internal/controllers/accounts_test.go @@ -16,10 +16,11 @@ import ( "github.com/stretchr/testify/assert" ) -func newTestDbConnection(ctx context.Context) *sql.DB { +func newTestDBConnection(ctx context.Context) *sql.DB { connStr, ok := os.LookupEnv("SOFTPLAYER_DB_CONNECTION_STRING") if !ok { - panic("set the db connection string env var") + // Default connection string + connStr = "postgres://softplayer:qwertyu9@localhost:30432/softplayer?sslmode=disable" } db, err := postgres.Open(ctx, connStr) if err != nil { @@ -31,7 +32,8 @@ func newTestDbConnection(ctx context.Context) *sql.DB { func newTestRedisConnection() *redis.Client { connStr, ok := os.LookupEnv("SOFTPLAYER_REDIS_HOST") if !ok { - panic("set the redis connection string env var") + // Default redis host + connStr = "localhost:30379" } return redis.NewClient(&redis.Options{ Addr: connStr, @@ -40,7 +42,7 @@ func newTestRedisConnection() *redis.Client { func newTestAccountController(ctx context.Context) *controllers.AccountController { return &controllers.AccountController{ - DB: newTestDbConnection(ctx), + DB: newTestDBConnection(ctx), Redis: newTestRedisConnection(), DevMode: true, HashCost: 3, diff --git a/internal/controllers/tokens.go b/internal/controllers/tokens.go index f5f15d1..f6b28b0 100644 --- a/internal/controllers/tokens.go +++ b/internal/controllers/tokens.go @@ -1,3 +1,5 @@ +// package controllers for token management +// This a token controller, that implements the logic around tokens package controllers import ( @@ -28,7 +30,8 @@ type TokenController struct { Redis *redis.Client } -// Services that are not available for tokens +// DisabledServicesRegex is a slice of regex to catch the services +// that are not available for tokens var DisabledServicesRegex = []string{".*Accounts.*", ".*Tokens.*"} // Errors @@ -51,9 +54,7 @@ type TokenData struct { Scopes map[string][]string } -type Scopes struct{} - -// Set the grpc info, must happen after all the service are initialized +// SetGRPCInfo must happen after all the service are initialized func (ctrl *TokenController) SetGRPCInfo(info map[string]grpc.ServiceInfo) { ctrl.ServiceInfo = info } @@ -67,8 +68,7 @@ func (ctrl *TokenController) SetRules() { ctrl.rules = rules } -// Each token operation must first verify that the current user -// is allowed to manipulate the token. +// VerifyTokenOwner is there to ensure that a user can't manipulate tokens of other users func (ctrl *TokenController) VerifyTokenOwner(ctx context.Context, userID, tokenID string) error { log := logger.FromContext(ctx).WithValues("uuid", tokenID, "user_id", userID) log.V(2).Info("Verifying the token owner") @@ -119,7 +119,7 @@ func (ctrl *TokenController) Create(ctx context.Context, data *TokenData) (strin tokenHash := hashSHA256(tokenValue) - scopesJson, err := json.Marshal(data.Scopes) + scopesJSON, err := json.Marshal(data.Scopes) if err != nil { log.Error(err, "Couldn't marshal permissions into json") return "", "", ErrServerError @@ -133,7 +133,7 @@ func (ctrl *TokenController) Create(ctx context.Context, data *TokenData) (strin CreatedAt: time.Now(), GeneratedAt: time.Now(), ExpiresAt: data.ExpiresAt, - Scope: string(scopesJson), + Scope: string(scopesJSON), } if err := repository.CreateToken(ctx, ctrl.DB, queryData); err != nil { @@ -149,7 +149,7 @@ func (ctrl *TokenController) Update(ctx context.Context, data *TokenData) error log := logger.FromContext(ctx).WithValues("uuid", data.UUID) log.V(2).Info("Updating a token") - scopesJson, err := json.Marshal(data.Scopes) + scopesJSON, err := json.Marshal(data.Scopes) if err != nil { log.Error(err, "Couldn't marshal permissions into json") return ErrServerError @@ -157,7 +157,7 @@ func (ctrl *TokenController) Update(ctx context.Context, data *TokenData) error queryData := &repository.TokenData{ UUID: data.UUID, - Scope: string(scopesJson), + Scope: string(scopesJSON), Decsription: data.Name, } @@ -389,7 +389,6 @@ func hashSHA256(s string) string { return hex.EncodeToString(hash[:]) } -// Unit Tests func TestUnitHashPersistence(t *testing.T) { password := "qwertyu9" hash1 := hashSHA256(password) diff --git a/internal/controllers/tokens_test.go b/internal/controllers/tokens_test.go index 91429a5..670bfa8 100644 --- a/internal/controllers/tokens_test.go +++ b/internal/controllers/tokens_test.go @@ -12,7 +12,7 @@ import ( func newTestTokensController(ctx context.Context) *controllers.TokenController { return &controllers.TokenController{ - DB: newTestDbConnection(ctx), + DB: newTestDBConnection(ctx), Redis: newTestRedisConnection(), } } @@ -104,6 +104,14 @@ func TestIntegrationGetToken_NotExists(t *testing.T) { assert.Empty(t, token) } +func TestIntegrationGetToken_WrongRequest(t *testing.T) { + ctrl := newTestTokensController(t.Context()) + token, err := ctrl.Get(t.Context(), "test", "test") + assert.Error(t, err) + assert.ErrorIs(t, err, controllers.ErrServerError) + assert.Empty(t, token) +} + func TestIntegrationVerifyTokenOwner_Success(t *testing.T) { // Create a user for the token ctrlAccount := newTestAccountController(t.Context()) diff --git a/internal/helpers/postgres/postgres.go b/internal/helpers/postgres/postgres.go index 51c9c91..589f408 100644 --- a/internal/helpers/postgres/postgres.go +++ b/internal/helpers/postgres/postgres.go @@ -6,7 +6,6 @@ import ( "github.com/jackc/pgx/v5/pgxpool" "github.com/jackc/pgx/v5/stdlib" - _ "github.com/jackc/pgx/v5/stdlib" ) func Open(ctx context.Context, dsn string) (*sql.DB, error) {