Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a797700685 | ||
|
|
d7890f747b | ||
|
|
e469b61bb2 | ||
|
|
42c4f1d915 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
*.log
|
*.log
|
||||||
|
*.db
|
||||||
18
README.md
18
README.md
@@ -21,13 +21,12 @@ It provides ready-to-use user authentication (login, refresh, logout, user info)
|
|||||||
|
|
||||||
```
|
```
|
||||||
AccessHandler/
|
AccessHandler/
|
||||||
├── handlers/
|
├── access_handler.go # AccessHandler initialization
|
||||||
│ ├── access_handler.go # AccessHandler initialization
|
├── db_handler.go # Database handler using GORM
|
||||||
│ ├── db_handler.go # Database handler using GORM
|
├── login.go # Login, Refresh, Me, Logout handlers
|
||||||
│ ├── login.go # Login, Refresh, Me, Logout handlers
|
├── middleware.go # middleware authentification
|
||||||
│ ├── middleware.go # middleware authentification
|
├── role.go # database handling for roles
|
||||||
| ├── role.go # database handling for roles
|
├── user.go # database users for roles
|
||||||
| ├── user.go # database users for roles
|
|
||||||
|
|
|
|
||||||
├── models/
|
├── models/
|
||||||
│ ├── jsonResponse.go # Json responses model
|
│ ├── jsonResponse.go # Json responses model
|
||||||
@@ -79,7 +78,7 @@ go get https://gitea.tecamino.com/paadi/tecamino-logger/logging
|
|||||||
|
|
||||||
## 🔑 Authentication Constants
|
## 🔑 Authentication Constants
|
||||||
|
|
||||||
In `handlers/login.go`:
|
In `login.go`:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
// -----------------------------
|
// -----------------------------
|
||||||
@@ -119,7 +118,6 @@ var REFRESH_SECRET = []byte("*")
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"AccessHandler/handlers"
|
|
||||||
"gitea.tecamino.com/paadi/tecamino-logger/logging"
|
"gitea.tecamino.com/paadi/tecamino-logger/logging"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"log"
|
"log"
|
||||||
@@ -127,7 +125,7 @@ import (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
logger, _ := logging.NewLogger("server.log", nil)
|
logger, _ := logging.NewLogger("server.log", nil)
|
||||||
accessHandler, err := handlers.NewAccessHandler("access.db", logger)
|
accessHandler, err := NewAccessHandler("access.db", logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package handlers
|
package AccessHandler
|
||||||
|
|
||||||
import "gitea.tecamino.com/paadi/tecamino-logger/logging"
|
import "gitea.tecamino.com/paadi/tecamino-logger/logging"
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ type AccessHandler struct {
|
|||||||
// - Default role(s)
|
// - Default role(s)
|
||||||
//
|
//
|
||||||
// Parameters:
|
// Parameters:
|
||||||
// - dbPath: The file path or connection string for the database.
|
// - dbPath: The file path to the database.
|
||||||
// - logger: Optional pointer to a logging.Logger instance. If nil, a new one is created.
|
// - logger: Optional pointer to a logging.Logger instance. If nil, a new one is created.
|
||||||
//
|
//
|
||||||
// Returns:
|
// Returns:
|
||||||
@@ -43,12 +43,12 @@ type AccessHandler struct {
|
|||||||
// - err: Any error that occurs during initialization.
|
// - err: Any error that occurs during initialization.
|
||||||
//
|
//
|
||||||
// Example:
|
// Example:
|
||||||
// handler, err := handlers.NewAccessHandler("data/app.db", appLogger)
|
// handler, err := NewAccessHandler("data/app.db", appLogger)
|
||||||
// if err != nil {
|
// if err != nil {
|
||||||
// log.Fatal(err)
|
// log.Fatal(err)
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
func NewAccessHandler(dbPath string, logger *logging.Logger) (aH *AccessHandler, err error) {
|
func NewAccessHandler(path string, logger *logging.Logger) (aH *AccessHandler, err error) {
|
||||||
if logger == nil {
|
if logger == nil {
|
||||||
logger, err = logging.NewLogger("accessHandler.log", nil)
|
logger, err = logging.NewLogger("accessHandler.log", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -65,7 +65,7 @@ func NewAccessHandler(dbPath string, logger *logging.Logger) (aH *AccessHandler,
|
|||||||
|
|
||||||
logger.Debug("NewAccessHandler", "initialize db handler")
|
logger.Debug("NewAccessHandler", "initialize db handler")
|
||||||
// Create a new DB handler instance
|
// Create a new DB handler instance
|
||||||
aH.dbHandler, err = NewDBHandler(dbPath, logger)
|
aH.dbHandler, err = NewDBHandler(path, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
aH.logger.Error("NewAccessHandler", err)
|
aH.logger.Error("NewAccessHandler", err)
|
||||||
return
|
return
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
package handlers
|
package AccessHandler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -43,8 +44,9 @@ type DBHandler struct {
|
|||||||
// Returns:
|
// Returns:
|
||||||
// - dH: A pointer to the initialized `DBHandler`.
|
// - dH: A pointer to the initialized `DBHandler`.
|
||||||
// - err: Any error encountered during database connection.
|
// - err: Any error encountered during database connection.
|
||||||
func NewDBHandler(dbPath string, logger *logging.Logger) (dH *DBHandler, err error) {
|
func NewDBHandler(path string, logger *logging.Logger) (dH *DBHandler, err error) {
|
||||||
dH = &DBHandler{logger: logger}
|
dH = &DBHandler{logger: logger}
|
||||||
|
dbPath := filepath.Join(path, "user.db")
|
||||||
logger.Debug("NewDBHandler", "open database "+dbPath)
|
logger.Debug("NewDBHandler", "open database "+dbPath)
|
||||||
dH.db, err = gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
|
dH.db, err = gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
|
||||||
return
|
return
|
||||||
13
db_test.go
13
db_test.go
@@ -1,4 +1,4 @@
|
|||||||
package accessmanager_test
|
package AccessHandler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
@@ -7,8 +7,7 @@ import (
|
|||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"gitea.tecamino.com/paadi/AccessHandler/handlers"
|
"gitea.tecamino.com/paadi/access-handler/models"
|
||||||
"gitea.tecamino.com/paadi/AccessHandler/models"
|
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/go-playground/assert/v2"
|
"github.com/go-playground/assert/v2"
|
||||||
@@ -18,7 +17,7 @@ func TestAccesshandlerLogin(t *testing.T) {
|
|||||||
t.Log("start access handler test")
|
t.Log("start access handler test")
|
||||||
|
|
||||||
t.Log("initialize accessHandler")
|
t.Log("initialize accessHandler")
|
||||||
accessHandler, err := handlers.NewAccessHandler("test.db", nil)
|
accessHandler, err := NewAccessHandler(".", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@@ -100,20 +99,20 @@ func TestLoginHandler(t *testing.T) {
|
|||||||
gin.SetMode(gin.TestMode)
|
gin.SetMode(gin.TestMode)
|
||||||
|
|
||||||
// Setup your AccessHandler and router
|
// Setup your AccessHandler and router
|
||||||
aH, err := handlers.NewAccessHandler("test.db", nil)
|
aH, err := NewAccessHandler(".", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
r := gin.Default()
|
r := gin.Default()
|
||||||
|
|
||||||
handlers.SetMiddlewareLogger(r, aH.GetLogger())
|
SetMiddlewareLogger(r, aH.GetLogger())
|
||||||
|
|
||||||
r.POST("/login", aH.Login)
|
r.POST("/login", aH.Login)
|
||||||
r.POST("/login/refresh", aH.Refresh)
|
r.POST("/login/refresh", aH.Refresh)
|
||||||
r.GET("/login/me", aH.Me)
|
r.GET("/login/me", aH.Me)
|
||||||
r.GET("/logout", aH.Logout)
|
r.GET("/logout", aH.Logout)
|
||||||
middleware := r.Group("", handlers.AuthMiddleware())
|
middleware := r.Group("", AuthMiddleware())
|
||||||
|
|
||||||
auth := middleware.Group("/members", aH.AuthorizeRole(""))
|
auth := middleware.Group("/members", aH.AuthorizeRole(""))
|
||||||
auth.GET("", func(ctx *gin.Context) {
|
auth.GET("", func(ctx *gin.Context) {
|
||||||
|
|||||||
2
go.mod
2
go.mod
@@ -1,4 +1,4 @@
|
|||||||
module gitea.tecamino.com/paadi/AccessHandler
|
module gitea.tecamino.com/paadi/access-handler
|
||||||
|
|
||||||
go 1.24.5
|
go 1.24.5
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package handlers
|
package AccessHandler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
@@ -6,8 +6,8 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"gitea.tecamino.com/paadi/AccessHandler/models"
|
"gitea.tecamino.com/paadi/access-handler/models"
|
||||||
"gitea.tecamino.com/paadi/AccessHandler/utils"
|
"gitea.tecamino.com/paadi/access-handler/utils"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/golang-jwt/jwt/v5"
|
"github.com/golang-jwt/jwt/v5"
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package handlers
|
package AccessHandler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
@@ -27,7 +27,7 @@ import (
|
|||||||
//
|
//
|
||||||
// Usage:
|
// Usage:
|
||||||
//
|
//
|
||||||
// handlers.SetMiddlewareLogger(router, logger)
|
// SetMiddlewareLogger(router, logger)
|
||||||
func SetMiddlewareLogger(r *gin.Engine, logger *logging.Logger) {
|
func SetMiddlewareLogger(r *gin.Engine, logger *logging.Logger) {
|
||||||
// Add middleware that injects logger into context
|
// Add middleware that injects logger into context
|
||||||
r.Use(func(c *gin.Context) {
|
r.Use(func(c *gin.Context) {
|
||||||
@@ -55,7 +55,7 @@ func SetMiddlewareLogger(r *gin.Engine, logger *logging.Logger) {
|
|||||||
//
|
//
|
||||||
// Usage:
|
// Usage:
|
||||||
//
|
//
|
||||||
// r.Use(handlers.AuthMiddleware())
|
// r.Use(AuthMiddleware())
|
||||||
func AuthMiddleware() gin.HandlerFunc {
|
func AuthMiddleware() gin.HandlerFunc {
|
||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
// Retrieve logger from Gin context
|
// Retrieve logger from Gin context
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package handlers
|
package AccessHandler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"gitea.tecamino.com/paadi/AccessHandler/models"
|
"gitea.tecamino.com/paadi/access-handler/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AddRoleTable
|
// AddRoleTable
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package handlers
|
package AccessHandler
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"gitea.tecamino.com/paadi/AccessHandler/models"
|
"gitea.tecamino.com/paadi/access-handler/models"
|
||||||
"gitea.tecamino.com/paadi/AccessHandler/utils"
|
"gitea.tecamino.com/paadi/access-handler/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AddUserTable
|
// AddUserTable
|
||||||
Reference in New Issue
Block a user