Core system #1

Merged
qpismont merged 8 commits from core into main 2025-02-26 21:24:55 +01:00
7 changed files with 63 additions and 20 deletions
Showing only changes of commit 4d268f0b08 - Show all commits

View file

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

View file

@ -4,6 +4,11 @@ when:
steps:
- name: publish-docker
image: docker:27-cli
environment:
DOCKER_USERNAME:
from_secret: docker_username
DOCKER_PASSWORD:
from_secret: docker_password
commands:
- tag="tintounn/trepa:$${CI_COMMIT_TAG}"
- docker login -u="$${DOCKER_USERNAME}" -p="$${DOCKER_PASSWORD}"
@ -12,13 +17,6 @@ steps:
- docker rmi $tag
volumes:
- /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:
- build

View file

@ -3,14 +3,15 @@ when:
steps:
tests:
image: golang:1.23-alpine
image: golang:1.24-alpine
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:
- 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
services:
@ -19,4 +20,4 @@ services:
environment:
- POSTGRES_USER=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
require (
github.com/golang-jwt/jwt/v5 v5.2.1
github.com/jackc/pgx v3.6.2+incompatible
github.com/jmoiron/sqlx v1.4.0
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/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/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/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ=
github.com/jackc/pgx v3.6.2+incompatible h1:2zP5OD7kiyR3xzRYMhOcXVvkDZsImVXfj+yIyTQf3/o=

View file

@ -4,6 +4,10 @@ import (
"net/http"
)
var (
ErrInvalidToken = NewHTTPError(http.StatusUnauthorized, "Invalid token", nil)
)
type HTTPError struct {
Code int `json:"code"`
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
}