From 5cd2f11306c44b6b748947bf5bfad309ee07bcc7 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sat, 16 Mar 2024 22:34:52 +0100 Subject: [PATCH 01/38] v1.0.1: ci: fix ci in back Signed-off-by: GnomeZworc --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cb4b3a2..61a853b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -96,7 +96,6 @@ release-front: stage: release image: docker:23.0.3-cli variables: - IMAGE_TYPE: front DOCKER_TLS_VERIFY: 1 DOCKER_CERT_PATH: /certs/client script: From 8483d7631a52271ca6a20432f72037f898249887 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sat, 16 Mar 2024 22:35:15 +0100 Subject: [PATCH 02/38] v1.0.0: doc: fix missing feature Signed-off-by: GnomeZworc --- docs/release/v1.0.0_helixire.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/release/v1.0.0_helixire.md b/docs/release/v1.0.0_helixire.md index 573b778..8917fa3 100644 --- a/docs/release/v1.0.0_helixire.md +++ b/docs/release/v1.0.0_helixire.md @@ -1,6 +1,6 @@ -# Helixire v1.0.0 +# Helixire v1.0.1 ## Release feature -- ... -- ... +- import login from accounts +- add personnal healthcheck From 6675a35088269bfa2ed83cf7ef670a13f5440a15 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sat, 16 Mar 2024 23:12:36 +0100 Subject: [PATCH 03/38] v1.1.0: ci: test fix quality code Signed-off-by: GnomeZworc --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 61a853b..f1c1cd2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -30,7 +30,7 @@ lint: stage: check before_script: [] script: - - golangci-lint run --issues-exit-code 1 --print-issued-lines=false --out-format code-climate:gl-code-quality-report.json,line-number + - golangci-lint run --issues-exit-code 0 --out-format code-climate | tee gl-code-quality-report.json artifacts: reports: codequality: gl-code-quality-report.json From fc3ef55c80cbf60db699d1241c925fc3eaa624a4 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sat, 16 Mar 2024 23:27:38 +0100 Subject: [PATCH 04/38] v1.1.0: ci: add coverage and test report Signed-off-by: GnomeZworc --- .gitlab-ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f1c1cd2..2004cfe 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,6 +29,7 @@ lint: image: golangci/golangci-lint:$GOLANGCI_LINT_VERSION stage: check before_script: [] + services: [] script: - golangci-lint run --issues-exit-code 0 --out-format code-climate | tee gl-code-quality-report.json artifacts: @@ -70,6 +71,8 @@ integration_test: - bash -ex ./scripts/prepar_test.sh - . ./config/test.src - go test -v ./cmd/ + - go install gotest.tools/gotestsum@latest + - gotestsum --junitfile report.xml --format testname needs: - build From ee4e2e3e31f0526d2ce3ce3cbec10904235a322b Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 17 Mar 2024 21:54:48 +0100 Subject: [PATCH 05/38] v2.0.0: doc: add swagger from code Signed-off-by: GnomeZworc --- cmd/docs/docs.go | 146 ++++++++++++++++++++++++++++++++++++++++++ cmd/docs/swagger.json | 119 ++++++++++++++++++++++++++++++++++ cmd/docs/swagger.yaml | 75 ++++++++++++++++++++++ cmd/login.go | 8 +++ cmd/main.go | 35 ++++++++++ go.mod | 27 +++++++- go.sum | 93 +++++++++++++++++++++++++++ internal/struct.go | 2 + 8 files changed, 502 insertions(+), 3 deletions(-) create mode 100644 cmd/docs/docs.go create mode 100644 cmd/docs/swagger.json create mode 100644 cmd/docs/swagger.yaml diff --git a/cmd/docs/docs.go b/cmd/docs/docs.go new file mode 100644 index 0000000..4018233 --- /dev/null +++ b/cmd/docs/docs.go @@ -0,0 +1,146 @@ +// Package docs Code generated by swaggo/swag. DO NOT EDIT +package docs + +import "github.com/swaggo/swag" + +const docTemplate = `{ + "schemes": {{ marshal .Schemes }}, + "swagger": "2.0", + "info": { + "description": "{{escape .Description}}", + "title": "{{.Title}}", + "termsOfService": "http://swagger.io/terms/", + "contact": { + "name": "API Support", + "url": "http://www.swagger.io/support", + "email": "support@swagger.io" + }, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + }, + "version": "{{.Version}}" + }, + "host": "{{.Host}}", + "basePath": "{{.BasePath}}", + "paths": { + "/": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Cette route de verifier que le token est toujours valide", + "tags": [ + "auth" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "string" + } + } + } + }, + "post": { + "description": "Cette route permet d'obtenir un token user", + "consumes": [ + "application/json" + ], + "tags": [ + "auth" + ], + "parameters": [ + { + "description": "request body", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/logins.RequestLogin" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/logins.ResponseLogin" + } + } + } + }, + "delete": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Cette route permet de revoker sont token", + "tags": [ + "auth" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "string" + } + } + } + } + } + }, + "definitions": { + "logins.RequestLogin": { + "type": "object", + "properties": { + "password": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "logins.ResponseLogin": { + "type": "object", + "properties": { + "publickey": { + "type": "string" + }, + "token": { + "type": "string" + } + } + } + }, + "securityDefinitions": { + "ApiKeyAuth": { + "description": "Enter the token with the ` + "`" + `Bearer: ` + "`" + ` prefix, e.g. \"Bearer abcde12345\".", + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + } +}` + +// SwaggerInfo holds exported Swagger Info so clients can modify it +var SwaggerInfo = &swag.Spec{ + Version: "1.0", + Host: "", + BasePath: "", + Schemes: []string{}, + Title: "Users", + Description: "", + InfoInstanceName: "swagger", + SwaggerTemplate: docTemplate, + LeftDelim: "{{", + RightDelim: "}}", +} + +func init() { + swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) +} diff --git a/cmd/docs/swagger.json b/cmd/docs/swagger.json new file mode 100644 index 0000000..e625a83 --- /dev/null +++ b/cmd/docs/swagger.json @@ -0,0 +1,119 @@ +{ + "swagger": "2.0", + "info": { + "title": "Users", + "termsOfService": "http://swagger.io/terms/", + "contact": { + "name": "API Support", + "url": "http://www.swagger.io/support", + "email": "support@swagger.io" + }, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + }, + "version": "1.0" + }, + "paths": { + "/": { + "get": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Cette route de verifier que le token est toujours valide", + "tags": [ + "auth" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "string" + } + } + } + }, + "post": { + "description": "Cette route permet d'obtenir un token user", + "consumes": [ + "application/json" + ], + "tags": [ + "auth" + ], + "parameters": [ + { + "description": "request body", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/logins.RequestLogin" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/logins.ResponseLogin" + } + } + } + }, + "delete": { + "security": [ + { + "ApiKeyAuth": [] + } + ], + "description": "Cette route permet de revoker sont token", + "tags": [ + "auth" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "string" + } + } + } + } + } + }, + "definitions": { + "logins.RequestLogin": { + "type": "object", + "properties": { + "password": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "logins.ResponseLogin": { + "type": "object", + "properties": { + "publickey": { + "type": "string" + }, + "token": { + "type": "string" + } + } + } + }, + "securityDefinitions": { + "ApiKeyAuth": { + "description": "Enter the token with the `Bearer: ` prefix, e.g. \"Bearer abcde12345\".", + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + } +} \ No newline at end of file diff --git a/cmd/docs/swagger.yaml b/cmd/docs/swagger.yaml new file mode 100644 index 0000000..5fb3241 --- /dev/null +++ b/cmd/docs/swagger.yaml @@ -0,0 +1,75 @@ +definitions: + logins.RequestLogin: + properties: + password: + type: string + username: + type: string + type: object + logins.ResponseLogin: + properties: + publickey: + type: string + token: + type: string + type: object +info: + contact: + email: support@swagger.io + name: API Support + url: http://www.swagger.io/support + license: + name: Apache 2.0 + url: http://www.apache.org/licenses/LICENSE-2.0.html + termsOfService: http://swagger.io/terms/ + title: Users + version: "1.0" +paths: + /: + delete: + description: Cette route permet de revoker sont token + responses: + "200": + description: OK + schema: + type: string + security: + - ApiKeyAuth: [] + tags: + - auth + get: + description: Cette route de verifier que le token est toujours valide + responses: + "200": + description: OK + schema: + type: string + security: + - ApiKeyAuth: [] + tags: + - auth + post: + consumes: + - application/json + description: Cette route permet d'obtenir un token user + parameters: + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/logins.RequestLogin' + responses: + "200": + description: OK + schema: + $ref: '#/definitions/logins.ResponseLogin' + tags: + - auth +securityDefinitions: + ApiKeyAuth: + description: 'Enter the token with the `Bearer: ` prefix, e.g. "Bearer abcde12345".' + in: header + name: Authorization + type: apiKey +swagger: "2.0" diff --git a/cmd/login.go b/cmd/login.go index d288c4f..53fa6e5 100644 --- a/cmd/login.go +++ b/cmd/login.go @@ -7,6 +7,14 @@ import ( logins "gitlab.g3e.fr/h6n/users/internal" ) +// Login +// @Tags auth +// @Description Cette route permet d'obtenir un token user +// @Accept json +// @Product json +// @Router / [post] +// @Param request body logins.RequestLogin true "request body" +// @Success 200 {object} logins.ResponseLogin func login(c echo.Context) error { var request logins.RequestLogin if err := c.Bind(&request); err != nil { diff --git a/cmd/main.go b/cmd/main.go index 0f9f075..7092f54 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -6,19 +6,35 @@ import ( "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" + echoSwagger "github.com/swaggo/echo-swagger" "gitlab.g3e.fr/h6n/users/lib" "database/sql" _ "github.com/lib/pq" + _ "gitlab.g3e.fr/h6n/users/cmd/docs" ) var db *sql.DB = nil +// Logout +// @Tags auth +// @Description Cette route permet de revoker sont token +// @Product json +// @Router / [delete] +// @Success 200 {object} string +// @Security ApiKeyAuth func logout(c echo.Context) error { return c.NoContent(http.StatusNoContent) } +// Logout +// @Tags auth +// @Description Cette route de verifier que le token est toujours valide +// @Product json +// @Router / [get] +// @Success 200 {object} string +// @Security ApiKeyAuth func isLoggedIn(c echo.Context) error { return c.NoContent(http.StatusNoContent) } @@ -45,6 +61,9 @@ func skip_auth(c echo.Context) bool { if c.Request().Method == "GET" && c.Path() == "/health" { return true } + if len(c.Path()) > 9 && c.Path()[:9] == "/swagger/" { + return true + } return false } @@ -55,6 +74,21 @@ func skip_log(c echo.Context) bool { return false } +// @title Users +// @version 1.0 +// @termsOfService http://swagger.io/terms/ + +// @contact.name API Support +// @contact.url http://www.swagger.io/support +// @contact.email support@swagger.io + +// @license.name Apache 2.0 +// @license.url http://www.apache.org/licenses/LICENSE-2.0.html + +// @securityDefinitions.apikey ApiKeyAuth +// @in header +// @name Authorization +// @description Enter the token with the `Bearer: ` prefix, e.g. "Bearer abcde12345". func main() { init_database() if err := lib.InitLoginBiscuit(); err != nil { @@ -76,6 +110,7 @@ func main() { e.POST("/", login) e.DELETE("/", logout) e.GET("/health", health) + e.GET("/swagger/*", echoSwagger.WrapHandler) // Start server e.Logger.Fatal(e.Start(":1222")) diff --git a/go.mod b/go.mod index 2eff39b..7f46fd1 100644 --- a/go.mod +++ b/go.mod @@ -3,20 +3,41 @@ module gitlab.g3e.fr/h6n/users go 1.21.0 require ( + github.com/KyleBanks/depth v1.2.1 // indirect + github.com/PuerkitoBio/purell v1.2.1 // indirect + github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/alecthomas/participle/v2 v2.0.0 // indirect github.com/biscuit-auth/biscuit-go/v2 v2.2.0 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d // indirect + github.com/ghodss/yaml v1.0.0 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + github.com/go-openapi/spec v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect github.com/golang-jwt/jwt v3.2.2+incompatible // indirect + github.com/josharian/intern v1.0.0 // indirect github.com/labstack/echo/v4 v4.11.4 // indirect github.com/labstack/gommon v0.4.2 // indirect github.com/lib/pq v1.10.9 // indirect + github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect + github.com/russross/blackfriday/v2 v2.0.1 // indirect + github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect + github.com/swaggo/echo-swagger v1.4.1 // indirect + github.com/swaggo/files/v2 v2.0.0 // indirect + github.com/swaggo/swag v1.16.3 // indirect + github.com/urfave/cli/v2 v2.3.0 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect - golang.org/x/crypto v0.17.0 // indirect - golang.org/x/net v0.19.0 // indirect - golang.org/x/sys v0.15.0 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/net v0.22.0 // indirect + golang.org/x/sys v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect + golang.org/x/tools v0.19.0 // indirect google.golang.org/protobuf v1.31.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/go.sum b/go.sum index 0b19315..e6fc3b3 100644 --- a/go.sum +++ b/go.sum @@ -1,39 +1,132 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= +github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.2.1 h1:QsZ4TjvwiMpat6gBCBxEQI0rcS9ehtkKtSpiUnd9N28= +github.com/PuerkitoBio/purell v1.2.1/go.mod h1:ZwHcC/82TOaovDi//J/804umJFFmbOHPngi8iYYv/Eo= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/alecthomas/participle/v2 v2.0.0 h1:Fgrq+MbuSsJwIkw3fEj9h75vDP0Er5JzepJ0/HNHv0g= github.com/alecthomas/participle/v2 v2.0.0/go.mod h1:rAKZdJldHu8084ojcWevWAL8KmEU+AT+Olodb+WoN2Y= github.com/biscuit-auth/biscuit-go/v2 v2.2.0 h1:1zBfZ0ZCbxJbhtAhou6Fa07lBlJ+wcphBEPV/sENBvY= github.com/biscuit-auth/biscuit-go/v2 v2.2.0/go.mod h1:c7AsMdr816vPd/4Psb3z6Xv2EKciKxSEayI8ueBaJio= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= +github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= +github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= +github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= +github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/labstack/echo/v4 v4.11.4 h1:vDZmA+qNeh1pd/cCkEicDMrjtrnMGQ1QFI9gWN1zGq8= github.com/labstack/echo/v4 v4.11.4/go.mod h1:noh7EvLwqDsmh/X/HWKPUl1AjzJrhyptRyEbQJfxen8= github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0= github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/swaggo/echo-swagger v1.4.1 h1:Yf0uPaJWp1uRtDloZALyLnvdBeoEL5Kc7DtnjzO/TUk= +github.com/swaggo/echo-swagger v1.4.1/go.mod h1:C8bSi+9yH2FLZsnhqMZLIZddpUxZdBYuNHbtaS1Hljc= +github.com/swaggo/files/v2 v2.0.0 h1:hmAt8Dkynw7Ssz46F6pn8ok6YmGZqHSVLZ+HQM7i0kw= +github.com/swaggo/files/v2 v2.0.0/go.mod h1:24kk2Y9NYEJ5lHuCra6iVwkMjIekMCaFq/0JQj66kyM= +github.com/swaggo/swag v1.16.3 h1:PnCYjPCah8FK4I26l2F/KQ4yz3sILcVUN3cTlBFA9Pg= +github.com/swaggo/swag v1.16.3/go.mod h1:DImHIuOFXKpMFAQjcC7FG4m3Dg4+QuUgUzJmKjI/gRk= +github.com/urfave/cli/v2 v2.3.0 h1:qph92Y649prgesehzOrQjdWyxFOp/QVM+6imKHad91M= +github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw= +golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/internal/struct.go b/internal/struct.go index 751ee07..a32b8fb 100644 --- a/internal/struct.go +++ b/internal/struct.go @@ -1,11 +1,13 @@ package logins type ( + // RequestLogin model info RequestLogin struct { Username string `json:"username"` Password string `json:"password"` } + // ResponseLogin model info ResponseLogin struct { Token string `json:"token"` PublicKey string `json:"publickey"` From c38375eb2bde8fe868a04327abcb41f4d9573c6a Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 17 Mar 2024 21:56:39 +0100 Subject: [PATCH 06/38] v2.0.0: doc: add swagger deploy in README Signed-off-by: GnomeZworc --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index fa33080..a6fd5a4 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,12 @@ v1.0.0: Helixire - Golang - Docker +### generate swagger + +```bash +swag init --parseInternal --generalInfo ./cmd/main.go --output ./cmd/docs/ +``` + ### with docker compose ```bash From f75519fa919ec8a31864708e72d145f70d5add28 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Wed, 20 Mar 2024 20:44:23 +0100 Subject: [PATCH 07/38] release-v1.1.0 Signed-off-by: GnomeZworc --- README.md | 2 +- docs/release/v1.1.0_fer.md | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 docs/release/v1.1.0_fer.md diff --git a/README.md b/README.md index a6fd5a4..361773c 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Has this project is in H6N global project his requirement will first meet H6N ne ## Version -v1.0.0: Helixire +v1.1.0: Fer ## Developpement diff --git a/docs/release/v1.1.0_fer.md b/docs/release/v1.1.0_fer.md new file mode 100644 index 0000000..770b7d0 --- /dev/null +++ b/docs/release/v1.1.0_fer.md @@ -0,0 +1,6 @@ +# Fer v1.1.0 + +## Release feature + +- add swagger api +- add code quality test From 8861c369cc9119abb947bcc47d610fac0b52a4f9 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sat, 30 Mar 2024 11:07:41 +0100 Subject: [PATCH 08/38] v1.2.0: back: first use of gorm for the database Signed-off-by: GnomeZworc --- cmd/main.go | 2 ++ go.mod | 7 +++++++ go.sum | 15 +++++++++++++++ internal/databases.go | 28 ++++++++++++++++++++++++++++ 4 files changed, 52 insertions(+) create mode 100644 internal/databases.go diff --git a/cmd/main.go b/cmd/main.go index 7092f54..0b34c72 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -7,6 +7,7 @@ import ( "github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware" echoSwagger "github.com/swaggo/echo-swagger" + logins "gitlab.g3e.fr/h6n/users/internal" "gitlab.g3e.fr/h6n/users/lib" "database/sql" @@ -91,6 +92,7 @@ func skip_log(c echo.Context) bool { // @description Enter the token with the `Bearer: ` prefix, e.g. "Bearer abcde12345". func main() { init_database() + logins.Init_database() if err := lib.InitLoginBiscuit(); err != nil { fmt.Println("error : ", err) return diff --git a/go.mod b/go.mod index 7f46fd1..f9b2551 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,11 @@ require ( github.com/go-openapi/spec v0.21.0 // indirect github.com/go-openapi/swag v0.23.0 // indirect github.com/golang-jwt/jwt v3.2.2+incompatible // indirect + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect + github.com/jackc/pgx/v5 v5.4.3 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/labstack/echo/v4 v4.11.4 // indirect github.com/labstack/gommon v0.4.2 // indirect @@ -39,5 +44,7 @@ require ( google.golang.org/protobuf v1.31.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + gorm.io/driver/postgres v1.5.7 // indirect + gorm.io/gorm v1.25.9 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/go.sum b/go.sum index e6fc3b3..1ddc90a 100644 --- a/go.sum +++ b/go.sum @@ -40,6 +40,16 @@ github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keL github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.4.3 h1:cxFyXhxlvAifxnkKKdlxv8XqUf59tDlYjnV5YYfsJJY= +github.com/jackc/pgx/v5 v5.4.3/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -72,6 +82,7 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/swaggo/echo-swagger v1.4.1 h1:Yf0uPaJWp1uRtDloZALyLnvdBeoEL5Kc7DtnjzO/TUk= github.com/swaggo/echo-swagger v1.4.1/go.mod h1:C8bSi+9yH2FLZsnhqMZLIZddpUxZdBYuNHbtaS1Hljc= github.com/swaggo/files/v2 v2.0.0 h1:hmAt8Dkynw7Ssz46F6pn8ok6YmGZqHSVLZ+HQM7i0kw= @@ -128,5 +139,9 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/postgres v1.5.7 h1:8ptbNJTDbEmhdr62uReG5BGkdQyeasu/FZHxI0IMGnM= +gorm.io/driver/postgres v1.5.7/go.mod h1:3e019WlBaYI5o5LIdNV+LyxCMNtLOQETBXL2h4chKpA= +gorm.io/gorm v1.25.9 h1:wct0gxZIELDk8+ZqF/MVnHLkA1rvYlBWUMv2EdsK1g8= +gorm.io/gorm v1.25.9/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/internal/databases.go b/internal/databases.go new file mode 100644 index 0000000..6a4b852 --- /dev/null +++ b/internal/databases.go @@ -0,0 +1,28 @@ +package logins + +import ( + "fmt" + + "gorm.io/driver/postgres" + "gorm.io/gorm" +) + +type Users struct { + Username string `gorm:"primaryKey"` + Email string `gorm:"unique:users_email_key"` + Password string `gorm:""` +} + +func test(tx *gorm.DB) *gorm.DB { + return tx.Table("users") +} + +func Init_database() { + dsn := "postgres://acc:totor@postgres:5432/accounts?sslmode=disable" + db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) + if err != nil { + panic("failed to connect database") + } + fmt.Println(test(db)) + db.AutoMigrate(&Users{}) +} From b7e44e85afaab3cd5ef347b69149df1e4f9f4d4a Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 31 Mar 2024 00:03:46 +0100 Subject: [PATCH 09/38] v1.2.0: remove test from gorm Signed-off-by: GnomeZworc --- internal/databases.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/internal/databases.go b/internal/databases.go index 6a4b852..38f69f7 100644 --- a/internal/databases.go +++ b/internal/databases.go @@ -1,8 +1,6 @@ package logins import ( - "fmt" - "gorm.io/driver/postgres" "gorm.io/gorm" ) @@ -13,16 +11,11 @@ type Users struct { Password string `gorm:""` } -func test(tx *gorm.DB) *gorm.DB { - return tx.Table("users") -} func Init_database() { dsn := "postgres://acc:totor@postgres:5432/accounts?sslmode=disable" db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { - panic("failed to connect database") } - fmt.Println(test(db)) db.AutoMigrate(&Users{}) } From 82a057f131a364472f0a3c11fc73ba4f4a92de17 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 31 Mar 2024 00:05:22 +0100 Subject: [PATCH 10/38] v1.2.0: back: add DropUnusedColumns Signed-off-by: GnomeZworc --- internal/databases.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/internal/databases.go b/internal/databases.go index 38f69f7..0e17ebd 100644 --- a/internal/databases.go +++ b/internal/databases.go @@ -11,6 +11,28 @@ type Users struct { Password string `gorm:""` } +func DropUnusedColumns(DB *gorm.DB, values ...interface{}) { + + for _, dst := range values { + stmt := &gorm.Statement{DB: DB} + stmt.Parse(dst) + fields := stmt.Schema.Fields + columns, _ := DB.Debug().Migrator().ColumnTypes(dst) + + for i := range columns { + found := false + for j := range fields { + if columns[i].Name() == fields[j].DBName { + found = true + break + } + } + if !found { + DB.Migrator().DropColumn(dst, columns[i].Name()) + } + } + } +} func Init_database() { dsn := "postgres://acc:totor@postgres:5432/accounts?sslmode=disable" @@ -18,4 +40,5 @@ func Init_database() { if err != nil { } db.AutoMigrate(&Users{}) + DropUnusedColumns(db, &Users{}) } From 0695062ad71a9f1ca60772e599b6cadfb383b3b6 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 31 Mar 2024 00:06:00 +0100 Subject: [PATCH 11/38] v1.2.0: take var and return gorm.db Signed-off-by: GnomeZworc --- internal/databases.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/databases.go b/internal/databases.go index 0e17ebd..97f3be6 100644 --- a/internal/databases.go +++ b/internal/databases.go @@ -34,11 +34,13 @@ func DropUnusedColumns(DB *gorm.DB, values ...interface{}) { } } -func Init_database() { - dsn := "postgres://acc:totor@postgres:5432/accounts?sslmode=disable" +func Init_database(dsn string) (*gorm.DB, error) { db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{}) if err != nil { + return db, err } db.AutoMigrate(&Users{}) DropUnusedColumns(db, &Users{}) + + return db, nil } From a2288ec90abec0d3a1889c2fc961a7d75c0eb7b5 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 31 Mar 2024 00:00:34 +0100 Subject: [PATCH 12/38] v1.2.0: back: use gorm in code Signed-off-by: GnomeZworc --- cmd/main.go | 8 +++++++- config/db.sql | 6 ------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index 0b34c72..9abbdc6 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -9,6 +9,7 @@ import ( echoSwagger "github.com/swaggo/echo-swagger" logins "gitlab.g3e.fr/h6n/users/internal" "gitlab.g3e.fr/h6n/users/lib" + "gorm.io/gorm" "database/sql" @@ -17,6 +18,7 @@ import ( ) var db *sql.DB = nil +var dbGor *gorm.DB = nil // Logout // @Tags auth @@ -49,6 +51,11 @@ func init_database() { connStr := "postgres://acc:totor@postgres:5432/accounts?sslmode=disable" + dbGor, err = logins.Init_database(connStr) + if err != nil { + fmt.Println(err) + } + db, err = sql.Open("postgres", connStr) if err != nil { fmt.Println(err) @@ -92,7 +99,6 @@ func skip_log(c echo.Context) bool { // @description Enter the token with the `Bearer: ` prefix, e.g. "Bearer abcde12345". func main() { init_database() - logins.Init_database() if err := lib.InitLoginBiscuit(); err != nil { fmt.Println("error : ", err) return diff --git a/config/db.sql b/config/db.sql index 591d4d8..9357a40 100644 --- a/config/db.sql +++ b/config/db.sql @@ -1,7 +1 @@ -CREATE TABLE users ( - username TEXT PRIMARY KEY, - email TEXT UNIQUE NOT NULL, - password TEXT NOT NULL -); - INSERT INTO users(username, email, password) VALUES('0000000023', 'root@root.fr', '$2a$14$FU8FKR7pUq4akLThraD9kOu0zY0BuUFASo0xakgWEWbYF2gz20DuG'); \ No newline at end of file From 8f3d9da55e99fd4ce9529b98e0f2459a61a79b02 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 31 Mar 2024 00:01:49 +0100 Subject: [PATCH 13/38] v1.2.0: back: use gorm in login Signed-off-by: GnomeZworc --- cmd/login.go | 2 +- internal/createLogin.go | 18 ++++++------------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/cmd/login.go b/cmd/login.go index 53fa6e5..97027da 100644 --- a/cmd/login.go +++ b/cmd/login.go @@ -21,7 +21,7 @@ func login(c echo.Context) error { return c.JSON(http.StatusBadRequest, err) } - if response, err := logins.CreateLogin(db, request); err != nil { + if response, err := logins.CreateLogin(dbGor, request); err != nil { return c.JSON(http.StatusBadRequest, "Not a valide user username or password") } else { return c.JSON(http.StatusOK, response) diff --git a/internal/createLogin.go b/internal/createLogin.go index 140b350..7484bf9 100644 --- a/internal/createLogin.go +++ b/internal/createLogin.go @@ -1,7 +1,6 @@ package logins import ( - "database/sql" "encoding/base64" "encoding/hex" "errors" @@ -11,6 +10,7 @@ import ( "github.com/biscuit-auth/biscuit-go/v2/parser" "gitlab.g3e.fr/h6n/users/lib" "golang.org/x/crypto/bcrypt" + "gorm.io/gorm" ) func CheckPasswordHash(password, hash string) bool { @@ -18,20 +18,14 @@ func CheckPasswordHash(password, hash string) bool { return err == nil } -func CreateLogin(db *sql.DB, request RequestLogin) (ResponseLogin, error) { - type ( - User struct { - Username string - EncryptedPassword string - } - ) - var user User +func CreateLogin(db *gorm.DB, request RequestLogin) (ResponseLogin, error) { var response ResponseLogin - if err := db.QueryRow("SELECT username, password FROM users WHERE email = $1", request.Username).Scan(&user.Username, &user.EncryptedPassword); err != nil { - return response, err + var user = Users{Email: request.Username} + if err := db.First(&user); err.Error != nil { + return response, err.Error } - if !CheckPasswordHash(request.Password, user.EncryptedPassword) { + if !CheckPasswordHash(request.Password, user.Password) { return response, errors.ErrUnsupported } now := time.Now() From 2ee18b5d939a53caa023d186cf316d0c446da358 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sun, 31 Mar 2024 00:09:20 +0100 Subject: [PATCH 14/38] v1.2.0: back: remove all db intel Signed-off-by: GnomeZworc --- cmd/main.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index 9abbdc6..54ec4d7 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -11,13 +11,10 @@ import ( "gitlab.g3e.fr/h6n/users/lib" "gorm.io/gorm" - "database/sql" - _ "github.com/lib/pq" _ "gitlab.g3e.fr/h6n/users/cmd/docs" ) -var db *sql.DB = nil var dbGor *gorm.DB = nil // Logout @@ -55,11 +52,6 @@ func init_database() { if err != nil { fmt.Println(err) } - - db, err = sql.Open("postgres", connStr) - if err != nil { - fmt.Println(err) - } } func skip_auth(c echo.Context) bool { From 2cc564c420334717675378145370f4b1fcb31263 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Mon, 1 Apr 2024 17:26:59 +0200 Subject: [PATCH 15/38] v1.2.0: ci: rename job Signed-off-by: GnomeZworc --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2004cfe..ee22eb7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -95,7 +95,7 @@ release-latest: - build - integration_test -release-front: +release: stage: release image: docker:23.0.3-cli variables: From 821fc8c3d95b562f0a0d938068c77be54624e495 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Mon, 1 Apr 2024 19:29:29 +0200 Subject: [PATCH 16/38] v1.2.0: lib: add health lib Signed-off-by: GnomeZworc --- lib/health/isHealth.go | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 lib/health/isHealth.go diff --git a/lib/health/isHealth.go b/lib/health/isHealth.go new file mode 100644 index 0000000..7cac15c --- /dev/null +++ b/lib/health/isHealth.go @@ -0,0 +1,10 @@ +package health + +import "github.com/labstack/echo/v4" + +func IsHealth(c echo.Context) bool { + if c.Request().Method == "GET" && c.Path() == "/health" { + return true + } + return false +} From 41563e925680f167dabef8efe06dbc5e0df12172 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Mon, 1 Apr 2024 19:30:18 +0200 Subject: [PATCH 17/38] v1.2.0: back: rename health path Signed-off-by: GnomeZworc --- cmd/main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index 54ec4d7..e075df5 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -39,7 +39,7 @@ func isLoggedIn(c echo.Context) error { return c.NoContent(http.StatusNoContent) } -func health(c echo.Context) error { +func status(c echo.Context) error { return c.NoContent(http.StatusOK) } @@ -109,7 +109,7 @@ func main() { e.GET("/", isLoggedIn) e.POST("/", login) e.DELETE("/", logout) - e.GET("/health", health) + e.GET("/health", status) e.GET("/swagger/*", echoSwagger.WrapHandler) // Start server From 0ad1626bdb9392dc0ee9b12547ced8e17e76ba44 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Mon, 1 Apr 2024 19:31:01 +0200 Subject: [PATCH 18/38] v1.2.0: back: use health skip from lib Signed-off-by: GnomeZworc --- cmd/main.go | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index e075df5..55d3d49 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -9,6 +9,7 @@ import ( echoSwagger "github.com/swaggo/echo-swagger" logins "gitlab.g3e.fr/h6n/users/internal" "gitlab.g3e.fr/h6n/users/lib" + "gitlab.g3e.fr/h6n/users/lib/health" "gorm.io/gorm" _ "github.com/lib/pq" @@ -58,20 +59,14 @@ func skip_auth(c echo.Context) bool { if c.Request().Method == "POST" && c.Path() == "/" { return true } - if c.Request().Method == "GET" && c.Path() == "/health" { - return true - } if len(c.Path()) > 9 && c.Path()[:9] == "/swagger/" { return true } - return false + return health.IsHealth(c) } func skip_log(c echo.Context) bool { - if c.Request().Method == "GET" && c.Path() == "/health" { - return true - } - return false + return health.IsHealth(c) } // @title Users From 1f9d3847e04f82c231aaeb99bde371b692361164 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Mon, 1 Apr 2024 19:49:02 +0200 Subject: [PATCH 19/38] v1.2.0: lib: add health path Signed-off-by: GnomeZworc --- lib/health/status.go | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 lib/health/status.go diff --git a/lib/health/status.go b/lib/health/status.go new file mode 100644 index 0000000..0d9ea5e --- /dev/null +++ b/lib/health/status.go @@ -0,0 +1,11 @@ +package health + +import ( + "net/http" + + "github.com/labstack/echo/v4" +) + +func Health(c echo.Context) error { + return c.NoContent(http.StatusOK) +} From d31f7d4e0a099601ea23fdba8ea926bad7be65d6 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Mon, 1 Apr 2024 19:49:33 +0200 Subject: [PATCH 20/38] v1.2.0: back: use health lib path Signed-off-by: GnomeZworc --- cmd/main.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index 55d3d49..6bf258d 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -40,10 +40,6 @@ func isLoggedIn(c echo.Context) error { return c.NoContent(http.StatusNoContent) } -func status(c echo.Context) error { - return c.NoContent(http.StatusOK) -} - func init_database() { var err error @@ -104,7 +100,7 @@ func main() { e.GET("/", isLoggedIn) e.POST("/", login) e.DELETE("/", logout) - e.GET("/health", status) + e.GET("/health", health.Health) e.GET("/swagger/*", echoSwagger.WrapHandler) // Start server From 68c216c48ad50e9efd8fcfe0fd7eadb1df683423 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Mon, 1 Apr 2024 21:25:08 +0200 Subject: [PATCH 21/38] v1.2.0: doc: add release list and naming policy Signed-off-by: GnomeZworc --- docs/release.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 docs/release.md diff --git a/docs/release.md b/docs/release.md new file mode 100644 index 0000000..7831a01 --- /dev/null +++ b/docs/release.md @@ -0,0 +1,10 @@ +# Release + +## Naming policy + +The naming policy is based on the [periodique table](https://fr.wikipedia.org/wiki/Tableau_p%C3%A9riodique_des_%C3%A9l%C3%A9ments#/media/Fichier:Tableau_p%C3%A9riodique_des_%C3%A9l%C3%A9ments.svg) for this project. + +## Release list + +- [v1.0.0 Helixire](./release/v1.0.0_damian.md) +- [v1.1.0 Fer](./release/v1.1.0_fer.md) From cee580b47304a60d64eeb95dba32390fdd9a9763 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Mon, 1 Apr 2024 21:30:58 +0200 Subject: [PATCH 22/38] release-v1.2.0 Signed-off-by: GnomeZworc --- README.md | 2 +- docs/release/v1.2.0_helium.md | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 docs/release/v1.2.0_helium.md diff --git a/README.md b/README.md index 361773c..bc768c2 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Has this project is in H6N global project his requirement will first meet H6N ne ## Version -v1.1.0: Fer +v1.2.0: Helium ## Developpement diff --git a/docs/release/v1.2.0_helium.md b/docs/release/v1.2.0_helium.md new file mode 100644 index 0000000..098c527 --- /dev/null +++ b/docs/release/v1.2.0_helium.md @@ -0,0 +1,9 @@ +# Helium v1.2.0 + +## Release feature + +- Add naming policy +- Add health skip in lib +- Add health path in lib +- Fix ci name for release job +- Change database usage, use Gorm From 31da5565054e7ec7cbdea3a0f5c994ca639438cb Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Mon, 8 Apr 2024 13:55:22 +0200 Subject: [PATCH 23/38] v1.3.0: lib: add login struct in lib Signed-off-by: GnomeZworc --- lib/login/struct.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 lib/login/struct.go diff --git a/lib/login/struct.go b/lib/login/struct.go new file mode 100644 index 0000000..1ad7774 --- /dev/null +++ b/lib/login/struct.go @@ -0,0 +1,15 @@ +package login_lib + +type ( + // RequestLogin model info + RequestLogin struct { + Username string `json:"username"` + Password string `json:"password"` + } + + // ResponseLogin model info + ResponseLogin struct { + Token string `json:"token"` + PublicKey string `json:"publickey"` + } +) From b0c6a8e0f97f18bb8c8c2b31caf9d121a53e9cb5 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Mon, 8 Apr 2024 13:56:25 +0200 Subject: [PATCH 24/38] v1.3.0: back: use lib for the request data Signed-off-by: GnomeZworc --- cmd/login.go | 3 ++- internal/createLogin.go | 5 +++-- internal/struct.go | 15 --------------- 3 files changed, 5 insertions(+), 18 deletions(-) delete mode 100644 internal/struct.go diff --git a/cmd/login.go b/cmd/login.go index 97027da..75a645f 100644 --- a/cmd/login.go +++ b/cmd/login.go @@ -5,6 +5,7 @@ import ( "github.com/labstack/echo/v4" logins "gitlab.g3e.fr/h6n/users/internal" + login_lib "gitlab.g3e.fr/h6n/users/lib/login" ) // Login @@ -16,7 +17,7 @@ import ( // @Param request body logins.RequestLogin true "request body" // @Success 200 {object} logins.ResponseLogin func login(c echo.Context) error { - var request logins.RequestLogin + var request login_lib.RequestLogin if err := c.Bind(&request); err != nil { return c.JSON(http.StatusBadRequest, err) } diff --git a/internal/createLogin.go b/internal/createLogin.go index 7484bf9..8609ae5 100644 --- a/internal/createLogin.go +++ b/internal/createLogin.go @@ -9,6 +9,7 @@ import ( "github.com/biscuit-auth/biscuit-go/v2" "github.com/biscuit-auth/biscuit-go/v2/parser" "gitlab.g3e.fr/h6n/users/lib" + login_lib "gitlab.g3e.fr/h6n/users/lib/login" "golang.org/x/crypto/bcrypt" "gorm.io/gorm" ) @@ -18,8 +19,8 @@ func CheckPasswordHash(password, hash string) bool { return err == nil } -func CreateLogin(db *gorm.DB, request RequestLogin) (ResponseLogin, error) { - var response ResponseLogin +func CreateLogin(db *gorm.DB, request login_lib.RequestLogin) (login_lib.ResponseLogin, error) { + var response login_lib.ResponseLogin var user = Users{Email: request.Username} if err := db.First(&user); err.Error != nil { diff --git a/internal/struct.go b/internal/struct.go deleted file mode 100644 index a32b8fb..0000000 --- a/internal/struct.go +++ /dev/null @@ -1,15 +0,0 @@ -package logins - -type ( - // RequestLogin model info - RequestLogin struct { - Username string `json:"username"` - Password string `json:"password"` - } - - // ResponseLogin model info - ResponseLogin struct { - Token string `json:"token"` - PublicKey string `json:"publickey"` - } -) From 205902205f45956f55fe385d180eb9fdae73af10 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Wed, 24 Sep 2025 21:21:40 +0200 Subject: [PATCH 25/38] 1.3.0: ci: add first forgejo ci #1 Signed-off-by: GnomeZworc --- .forgejo/workflows/test.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .forgejo/workflows/test.yml diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml new file mode 100644 index 0000000..6506d74 --- /dev/null +++ b/.forgejo/workflows/test.yml @@ -0,0 +1,20 @@ +on: + pull_request: + types: [opened, synchronize] + +jobs: + lint: + runs-on: raw + steps: + - name: Check out repository + uses: actions/checkout@v3 + + - name: Setup golang + uses: actions/setup-go@v5 + with: + go-version: "1.21" + + - name: golangci-lint + uses: https://github.com/golangci/golangci-lint-action@v8 + with: + version: v2.1 \ No newline at end of file From 3f0a6382665447e44f643e439a4c8ea396c89a28 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Thu, 25 Sep 2025 23:20:51 +0200 Subject: [PATCH 26/38] 1.3.0: ci: add test for the code #1 Signed-off-by: GnomeZworc --- .forgejo/workflows/test.yml | 43 ++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml index 6506d74..2bc7ce1 100644 --- a/.forgejo/workflows/test.yml +++ b/.forgejo/workflows/test.yml @@ -1,3 +1,5 @@ +name: Test Pipeline + on: pull_request: types: [opened, synchronize] @@ -17,4 +19,43 @@ jobs: - name: golangci-lint uses: https://github.com/golangci/golangci-lint-action@v8 with: - version: v2.1 \ No newline at end of file + version: v2.1 + ci-test: + runs-on: raw + steps: + - name: Check out repository + uses: actions/checkout@v3 + + - name: Install docker-cli + run: | + apt-get update + apt-get install -y ca-certificates curl + install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc + chmod a+r /etc/apt/keyrings/docker.asc + + # Add the repository to Apt sources: + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null + apt-get update + apt-get install -y docker-ce-cli + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build image + run: | + docker build --pull -t users-release --target release . + + - name: Run Test + run: | + bash -ex ./scripts/prepar_test.sh + . ./config/test.src + go test -v ./cmd/ + go install gotest.tools/gotestsum@latest + gotestsum --junitfile report.xml --format testname \ No newline at end of file From feb4e93f032ff789b4dc5eaa73b6b6dbfea21866 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Thu, 25 Sep 2025 23:24:14 +0200 Subject: [PATCH 27/38] 1.3.0: ci: add container gestion #1 Signed-off-by: GnomeZworc --- .forgejo/workflows/test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml index 2bc7ce1..009f560 100644 --- a/.forgejo/workflows/test.yml +++ b/.forgejo/workflows/test.yml @@ -22,6 +22,8 @@ jobs: version: v2.1 ci-test: runs-on: raw + container: + options: --privileged -v /var/run/docker.sock:/var/run/docker.sock steps: - name: Check out repository uses: actions/checkout@v3 From 66471df0245c3b414e4b2c73b57399e0d1536fc2 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Thu, 25 Sep 2025 23:29:36 +0200 Subject: [PATCH 28/38] 1.3.0: docker: update url link #1 Signed-off-by: GnomeZworc --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index e8ee6d4..cc0783d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,8 +4,9 @@ FROM golang:1.21-alpine AS develop WORKDIR / RUN apk update && apk add --no-cache curl tar && \ - curl -O https://gitlab.g3e.fr/api/v4/projects/34/packages/generic/minicurl/v1.0.0/minicurl_linux_amd64.tar.gz && \ - tar xzvf minicurl_linux_amd64.tar.gz + curl -OJ https://git.g3e.fr/api/packages/H6N/generic/minicurl/1.1.0/minicurl-linux-amd64 && \ + mv minicurl-linux-amd64 minicurl && \ + chmod +x ./minicurl # Changement du répertoire de travail WORKDIR /app From ce6b78d13e8adbd7d1936c7b68609815ee02d0a6 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Sep 2025 02:08:36 +0200 Subject: [PATCH 29/38] 1.3.0: ci: change to alpine image Signed-off-by: GnomeZworc --- .forgejo/workflows/test.yml | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml index 009f560..4cc5c3e 100644 --- a/.forgejo/workflows/test.yml +++ b/.forgejo/workflows/test.yml @@ -23,6 +23,7 @@ jobs: ci-test: runs-on: raw container: + image: node:22.20.0-alpine3.22 options: --privileged -v /var/run/docker.sock:/var/run/docker.sock steps: - name: Check out repository @@ -30,19 +31,8 @@ jobs: - name: Install docker-cli run: | - apt-get update - apt-get install -y ca-certificates curl - install -m 0755 -d /etc/apt/keyrings - curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc - chmod a+r /etc/apt/keyrings/docker.asc - - # Add the repository to Apt sources: - echo \ - "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ - $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ - tee /etc/apt/sources.list.d/docker.list > /dev/null - apt-get update - apt-get install -y docker-ce-cli + apk update && apk add --no-cache docker-cli + apk add bash - name: Set up QEMU uses: docker/setup-qemu-action@v3 From e80bf3abc376fda8e39a2f59e7141208be81d412 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Sep 2025 02:13:19 +0200 Subject: [PATCH 30/38] 1.3.0: ci: rollback change image #1 Signed-off-by: GnomeZworc --- .forgejo/workflows/test.yml | 16 +++++++++++++--- scripts/prepar_test.sh | 11 +---------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml index 4cc5c3e..009f560 100644 --- a/.forgejo/workflows/test.yml +++ b/.forgejo/workflows/test.yml @@ -23,7 +23,6 @@ jobs: ci-test: runs-on: raw container: - image: node:22.20.0-alpine3.22 options: --privileged -v /var/run/docker.sock:/var/run/docker.sock steps: - name: Check out repository @@ -31,8 +30,19 @@ jobs: - name: Install docker-cli run: | - apk update && apk add --no-cache docker-cli - apk add bash + apt-get update + apt-get install -y ca-certificates curl + install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc + chmod a+r /etc/apt/keyrings/docker.asc + + # Add the repository to Apt sources: + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null + apt-get update + apt-get install -y docker-ce-cli - name: Set up QEMU uses: docker/setup-qemu-action@v3 diff --git a/scripts/prepar_test.sh b/scripts/prepar_test.sh index 2db967f..fed653e 100644 --- a/scripts/prepar_test.sh +++ b/scripts/prepar_test.sh @@ -1,16 +1,7 @@ #!/bin/bash - -cat <> /etc/apk/repositories -http://ftp.halifax.rwth-aachen.de/alpine/v3.16/main -http://ftp.halifax.rwth-aachen.de/alpine/v3.16/community -ENDFILE -apk update -apk add docker docker-cli-compose docker version docker compose version -docker load --input "$IMAGE_TYPE-$IMAGE_VERSION-release.tar.gz" -docker tag $CI_REGISTRY_IMAGE:$IMAGE_VERSION-release $IMAGE_TYPE:latest cat < docker-compose.yml version: '3.1' @@ -29,7 +20,7 @@ services: timeout: 5s retries: 5 users: - image: $IMAGE_TYPE + image: users-release volumes: - ./docker/keys:/keys depends_on: From 7f5a418f28faac758829228082dabac4f46d5c4a Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Sep 2025 02:21:47 +0200 Subject: [PATCH 31/38] 1.3.0: docker: mise au propre Signed-off-by: GnomeZworc --- scripts/prepar_test.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/scripts/prepar_test.sh b/scripts/prepar_test.sh index fed653e..032e9af 100644 --- a/scripts/prepar_test.sh +++ b/scripts/prepar_test.sh @@ -3,9 +3,7 @@ docker version docker compose version -cat < docker-compose.yml -version: '3.1' - +cat < compose.yml services: postgres: image: postgres:15.2-alpine3.17 From 5eddb8cec5982dc9cb3e38dfbdb79d1517c96f78 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Sep 2025 02:22:09 +0200 Subject: [PATCH 32/38] 1.3.0: ci: add golang to forgejo Signed-off-by: GnomeZworc --- .forgejo/workflows/test.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml index 009f560..8216c3b 100644 --- a/.forgejo/workflows/test.yml +++ b/.forgejo/workflows/test.yml @@ -49,6 +49,11 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 + + - name: Setup golang + uses: actions/setup-go@v5 + with: + go-version: "1.21" - name: Build image run: | From e16d9ed188579a476ee298610382aaa05745aac4 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Sep 2025 02:36:21 +0200 Subject: [PATCH 33/38] 1.3.0: ci: update with lint params Signed-off-by: GnomeZworc --- .forgejo/workflows/test.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml index 8216c3b..a28d932 100644 --- a/.forgejo/workflows/test.yml +++ b/.forgejo/workflows/test.yml @@ -20,6 +20,8 @@ jobs: uses: https://github.com/golangci/golangci-lint-action@v8 with: version: v2.1 + args: --issues-exit-code 0 --out-format code-climate + ci-test: runs-on: raw container: @@ -53,7 +55,7 @@ jobs: - name: Setup golang uses: actions/setup-go@v5 with: - go-version: "1.21" + go-version: "1.24" - name: Build image run: | From fa9f3c490fbb95b05900bc0e3b676459f8b54303 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Sep 2025 02:36:44 +0200 Subject: [PATCH 34/38] 1.3.0: docker: update golang version Signed-off-by: GnomeZworc --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index cc0783d..68ff1a2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21-alpine AS develop +FROM golang:1.24-alpine AS develop # Changement du répertoire de travail WORKDIR / From 3de726658f77241b018d23f89da34544264a288a Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Sep 2025 02:37:24 +0200 Subject: [PATCH 35/38] 1.3.0: go: add return check Signed-off-by: GnomeZworc --- internal/databases.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/internal/databases.go b/internal/databases.go index 97f3be6..aee5bb1 100644 --- a/internal/databases.go +++ b/internal/databases.go @@ -15,7 +15,9 @@ func DropUnusedColumns(DB *gorm.DB, values ...interface{}) { for _, dst := range values { stmt := &gorm.Statement{DB: DB} - stmt.Parse(dst) + if stmt.Parse(dst) != nil { + return + } fields := stmt.Schema.Fields columns, _ := DB.Debug().Migrator().ColumnTypes(dst) @@ -28,7 +30,9 @@ func DropUnusedColumns(DB *gorm.DB, values ...interface{}) { } } if !found { - DB.Migrator().DropColumn(dst, columns[i].Name()) + if DB.Migrator().DropColumn(dst, columns[i].Name()) != nil { + return + } } } } From 98cdbaef90820dcd8e1b8b856ceca983ddd5a705 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Sep 2025 02:45:23 +0200 Subject: [PATCH 36/38] 1.3.0: ci: update lint params #1 Signed-off-by: GnomeZworc --- .forgejo/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.forgejo/workflows/test.yml b/.forgejo/workflows/test.yml index a28d932..80cbd6c 100644 --- a/.forgejo/workflows/test.yml +++ b/.forgejo/workflows/test.yml @@ -20,7 +20,7 @@ jobs: uses: https://github.com/golangci/golangci-lint-action@v8 with: version: v2.1 - args: --issues-exit-code 0 --out-format code-climate + args: --issues-exit-code 0 ci-test: runs-on: raw From 1992280022024227f37961361dc6c0956e51d7d4 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Sep 2025 02:56:16 +0200 Subject: [PATCH 37/38] 1.3.0: code: fix close issue #1 Signed-off-by: GnomeZworc --- internal/databases.go | 2 +- lib/initBiscuit.go | 43 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/internal/databases.go b/internal/databases.go index aee5bb1..8eb3d96 100644 --- a/internal/databases.go +++ b/internal/databases.go @@ -43,7 +43,7 @@ func Init_database(dsn string) (*gorm.DB, error) { if err != nil { return db, err } - db.AutoMigrate(&Users{}) + _ = db.AutoMigrate(&Users{}) DropUnusedColumns(db, &Users{}) return db, nil diff --git a/lib/initBiscuit.go b/lib/initBiscuit.go index 0853db2..ed74eaf 100644 --- a/lib/initBiscuit.go +++ b/lib/initBiscuit.go @@ -3,6 +3,7 @@ package lib import ( "crypto/ed25519" "crypto/rand" + "fmt" "io" "os" "time" @@ -22,7 +23,12 @@ func InitLoginBiscuit() error { if file, err := os.Create(filePrivateKey); err != nil { return err } else { - defer file.Close() + defer func() { + if cerr := file.Close(); cerr != nil { + // ici tu peux logger ou faire quelque chose + fmt.Printf("Erreur à la fermeture: %v\n", cerr) + } + }() if _, err = io.WriteString(file, string(PrivateKey)); err != nil { return err @@ -34,7 +40,12 @@ func InitLoginBiscuit() error { if file, err := os.Create(filePublicKey); err != nil { return err } else { - defer file.Close() + defer func() { + if cerr := file.Close(); cerr != nil { + // ici tu peux logger ou faire quelque chose + fmt.Printf("Erreur à la fermeture: %v\n", cerr) + } + }() if _, err = io.WriteString(file, string(PublicKey)); err != nil { return err @@ -47,7 +58,12 @@ func InitLoginBiscuit() error { if file, err := os.Open(filePrivateKey); err != nil { return err } else { - defer file.Close() + defer func() { + if cerr := file.Close(); cerr != nil { + // ici tu peux logger ou faire quelque chose + fmt.Printf("Erreur à la fermeture: %v\n", cerr) + } + }() PrivateKey, err = io.ReadAll(file) if err != nil { @@ -57,7 +73,12 @@ func InitLoginBiscuit() error { if file, err := os.Open(filePublicKey); err != nil { return err } else { - defer file.Close() + defer func() { + if cerr := file.Close(); cerr != nil { + // ici tu peux logger ou faire quelque chose + fmt.Printf("Erreur à la fermeture: %v\n", cerr) + } + }() PublicKey, err = io.ReadAll(file) if err != nil { @@ -86,7 +107,12 @@ func InitGlobalBiscuit() error { if file, err := os.Open(filePrivateKey); err != nil { return err } else { - defer file.Close() + defer func() { + if cerr := file.Close(); cerr != nil { + // ici tu peux logger ou faire quelque chose + fmt.Printf("Erreur à la fermeture: %v\n", cerr) + } + }() PrivateKey, err = io.ReadAll(file) if err != nil { @@ -96,7 +122,12 @@ func InitGlobalBiscuit() error { if file, err := os.Open(filePublicKey); err != nil { return err } else { - defer file.Close() + defer func() { + if cerr := file.Close(); cerr != nil { + // ici tu peux logger ou faire quelque chose + fmt.Printf("Erreur à la fermeture: %v\n", cerr) + } + }() PublicKey, err = io.ReadAll(file) if err != nil { From dfce12b15659ecf9d0304d67467d443889e2cc30 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sat, 27 Sep 2025 22:37:04 +0200 Subject: [PATCH 38/38] 1.3.0: ci: add release ci Signed-off-by: GnomeZworc --- .forgejo/workflows/release.yml | 75 ++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 .forgejo/workflows/release.yml diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml new file mode 100644 index 0000000..4353228 --- /dev/null +++ b/.forgejo/workflows/release.yml @@ -0,0 +1,75 @@ +name: Release Workflow + +on: + push: + tags: + - '*' + branches: + - main + +jobs: + set-release-target: + runs-on: docker + outputs: + release_cible: ${{ steps.setvar.outputs.release_cible }} + steps: + - name: Déterminer la release cible + id: setvar + run: | + if [[ "${GITHUB_REF}" == refs/tags/* ]]; then + TAG="${GITHUB_REF#refs/tags/}" + echo "release_cible=$TAG" >> $GITHUB_OUTPUT + elif [[ "${GITHUB_REF}" == "refs/heads/main" ]]; then + echo "release_cible=latest" >> $GITHUB_OUTPUT + else + echo "release_cible=unknown" >> $GITHUB_OUTPUT + fi + + - name: Afficher la variable + run: echo "Release cible = ${{ steps.setvar.outputs.release_cible }}" + + build: + runs-on: raw + container: + options: --privileged -v /var/run/docker.sock:/var/run/docker.sock + needs: set-release-target + steps: + - name: Check out repository + uses: actions/checkout@v3 + + - name: Install docker-cli + run: | + apt-get update + apt-get install -y ca-certificates curl + install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc + chmod a+r /etc/apt/keyrings/docker.asc + + # Add the repository to Apt sources: + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null + apt-get update + apt-get install -y docker-ce-cli + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login docker registry + uses: docker/login-action@v2 + with: + username: ${{ forge.ACTOR }} + password: ${{ secrets.PACKAGE }} + registry: ${{ forge.SERVER_URL }} + + - name: Build and push + uses: docker/build-push-action@v4 + with: + context: . + push: true + tags: git.g3e.fr/h6n/users:${{ needs.set-release-target.outputs.release_cible }} + target: release \ No newline at end of file