fix woodpecker ci + add jwt helpers

This commit is contained in:
qpismont 2025-02-26 19:11:47 +00:00
parent 604f705662
commit 4d268f0b08
7 changed files with 63 additions and 20 deletions

View file

@ -3,14 +3,11 @@ when:
steps: steps:
build: build:
image: golang:1.23-alpine image: golang:1.24-alpine
commands: commands:
- apk update - apk update
- apk add git - apk add bash
- go install github.com/goreleaser/goreleaser/v2@latest - bash scripts/build.sh
- echo "$${SENTRY_DSN}" > cmd/api/sentry
- goreleaser build --snapshot
secrets: [sentry_dsn]
depends_on: depends_on:
- lint - lint

View file

@ -4,6 +4,11 @@ when:
steps: steps:
- name: publish-docker - name: publish-docker
image: docker:27-cli image: docker:27-cli
environment:
DOCKER_USERNAME:
from_secret: docker_username
DOCKER_PASSWORD:
from_secret: docker_password
commands: commands:
- tag="tintounn/trepa:$${CI_COMMIT_TAG}" - tag="tintounn/trepa:$${CI_COMMIT_TAG}"
- docker login -u="$${DOCKER_USERNAME}" -p="$${DOCKER_PASSWORD}" - docker login -u="$${DOCKER_USERNAME}" -p="$${DOCKER_PASSWORD}"
@ -12,13 +17,6 @@ steps:
- docker rmi $tag - docker rmi $tag
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock - /var/run/docker.sock:/var/run/docker.sock
secrets: [docker_username, docker_password]
- name: publish-binaries
image: goreleaser/goreleaser
commands:
- goreleaser release
secrets: [ gitea_token ]
depends_on: depends_on:
- build - build

View file

@ -3,14 +3,15 @@ when:
steps: steps:
tests: tests:
image: golang:1.23-alpine image: golang:1.24-alpine
environment: environment:
TEST_DATABASE_URL: postgres://dev:dev@db/trepa?sslmode=disable TEST_DB_HOST: db
TEST_DB_PORT: 5432
TEST_DB_USER: dev
TEST_DB_PASSWORD: dev
TEST_DB_NAME: trepa_test
commands: commands:
- sleep 30 - sleep 30
- wget https://github.com/golang-migrate/migrate/releases/download/v4.17.1/migrate.linux-amd64.tar.gz
- tar -xf migrate.linux-amd64.tar.gz
- ./migrate -source file://migrations/ -database "$${TEST_DATABASE_URL}" up
- go test -cover ./internal/... -v - go test -cover ./internal/... -v
services: services:
@ -19,4 +20,4 @@ services:
environment: environment:
- POSTGRES_USER=dev - POSTGRES_USER=dev
- POSTGRES_PASSWORD=dev - POSTGRES_PASSWORD=dev
- POSTGRES_DB=trepa - POSTGRES_DB=trepa_test

1
go.mod
View file

@ -3,6 +3,7 @@ module gitea.qpismont.fr/qpismont/trepa
go 1.24.0 go 1.24.0
require ( require (
github.com/golang-jwt/jwt/v5 v5.2.1
github.com/jackc/pgx v3.6.2+incompatible github.com/jackc/pgx v3.6.2+incompatible
github.com/jmoiron/sqlx v1.4.0 github.com/jmoiron/sqlx v1.4.0
github.com/joho/godotenv v1.5.1 github.com/joho/godotenv v1.5.1

2
go.sum
View file

@ -8,6 +8,8 @@ github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpv
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA=
github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 h1:vr3AYkKovP8uR8AvSGGUK1IDqRa5lAAvEkZG1LKaCRc= github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 h1:vr3AYkKovP8uR8AvSGGUK1IDqRa5lAAvEkZG1LKaCRc=
github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ= github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ=
github.com/jackc/pgx v3.6.2+incompatible h1:2zP5OD7kiyR3xzRYMhOcXVvkDZsImVXfj+yIyTQf3/o= github.com/jackc/pgx v3.6.2+incompatible h1:2zP5OD7kiyR3xzRYMhOcXVvkDZsImVXfj+yIyTQf3/o=

View file

@ -4,6 +4,10 @@ import (
"net/http" "net/http"
) )
var (
ErrInvalidToken = NewHTTPError(http.StatusUnauthorized, "Invalid token", nil)
)
type HTTPError struct { type HTTPError struct {
Code int `json:"code"` Code int `json:"code"`
Message string `json:"message"` Message string `json:"message"`

40
internal/core/jwt.go Normal file
View file

@ -0,0 +1,40 @@
package core
import (
"github.com/golang-jwt/jwt/v5"
)
type JWTClaims struct {
jwt.RegisteredClaims
AccountId string `json:"account_id"`
RoleId string `json:"role_id"`
}
var jwtSecret string
func InitJWT(secret string) {
jwtSecret = secret
}
func SignJWT(claims JWTClaims) (string, error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
return token.SignedString([]byte(jwtSecret))
}
func VerifyJWT(token string) (JWTClaims, error) {
parsedClaims := JWTClaims{}
claims, err := jwt.ParseWithClaims(token, &parsedClaims, func(token *jwt.Token) (any, error) {
return []byte(jwtSecret), nil
})
if err != nil {
return JWTClaims{}, NewInternalServerError(err)
}
if !claims.Valid {
return JWTClaims{}, ErrInvalidToken
}
return parsedClaims, nil
}