From 8861c369cc9119abb947bcc47d610fac0b52a4f9 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Sat, 30 Mar 2024 11:07:41 +0100 Subject: [PATCH 1/7] 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 2/7] 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 3/7] 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 4/7] 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 5/7] 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 6/7] 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 7/7] 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 {