fix woodpecker ci + add jwt helpers
This commit is contained in:
parent
604f705662
commit
4d268f0b08
7 changed files with 63 additions and 20 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
1
go.mod
|
@ -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
2
go.sum
|
@ -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=
|
||||||
|
|
|
@ -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
40
internal/core/jwt.go
Normal 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
|
||||||
|
}
|
Loading…
Reference in a new issue