serve frontend from go
This commit is contained in:
64
internal/auth/resource.go
Normal file
64
internal/auth/resource.go
Normal file
@ -0,0 +1,64 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"git.schreifuchs.ch/schreifuchs/ng-blog/internal/model"
|
||||
jwt "github.com/golang-jwt/jwt/v5"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
)
|
||||
|
||||
// Config defines a struct for configuration settings, often loaded from environment variables.
|
||||
type Config struct {
|
||||
Secret string `env:"SECRET"`
|
||||
ValidDuration time.Duration `env:"VALID_DURATION"`
|
||||
AdminName string `env:"ADMIN_NAME"`
|
||||
AdminPassword string `env:"ADMIN_PASSWORD"`
|
||||
DefaultRole model.Role `env:"DEFAULT_ROLE"`
|
||||
}
|
||||
|
||||
// Service Represents a service with configuration and database connection.
|
||||
type Service struct {
|
||||
cfg *Config
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
// New creates a new Service instance, initializing a default admin user and saving it to the database.
|
||||
func New(cfg *Config, db *gorm.DB) *Service {
|
||||
user := model.NewUser()
|
||||
var err error
|
||||
if user.Password, err = bcrypt.GenerateFromPassword([]byte(cfg.AdminName), 6); err != nil {
|
||||
log.Fatalf("Error while creating default user: %v", err)
|
||||
}
|
||||
user.Name = cfg.AdminName
|
||||
user.Role = model.RoleAdmin
|
||||
|
||||
// add default user
|
||||
_ = db.Clauses(clause.OnConflict{DoNothing: true}).Save(&user).Error
|
||||
|
||||
return &Service{
|
||||
cfg,
|
||||
db,
|
||||
}
|
||||
}
|
||||
|
||||
// Claims struct represents JWT claims, including role and user ID, extending the standard jwt.RegisteredClaims.
|
||||
type Claims struct {
|
||||
Role model.Role `json:"rl"`
|
||||
UserID uint `json:"uid"`
|
||||
jwt.RegisteredClaims
|
||||
}
|
||||
|
||||
// Login struct represents user login credentials with a name and password.
|
||||
type Login struct {
|
||||
Name string `json:"name"`
|
||||
Password string `json:"Password"`
|
||||
}
|
||||
|
||||
// LoginResponse Represents the response from a login endpoint, containing a JWT token.
|
||||
type LoginResponse struct {
|
||||
Token string `json:"token"`
|
||||
}
|
Reference in New Issue
Block a user