mirror of
https://github.com/khairul169/vaulterm.git
synced 2025-04-28 08:39:37 +07:00
61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
package auth
|
|
|
|
import (
|
|
"gorm.io/gorm"
|
|
"rul.sh/vaulterm/server/db"
|
|
"rul.sh/vaulterm/server/lib"
|
|
"rul.sh/vaulterm/server/models"
|
|
)
|
|
|
|
type Auth struct{ db *gorm.DB }
|
|
|
|
func NewRepository() *Auth {
|
|
return &Auth{db: db.Get()}
|
|
}
|
|
|
|
func (r *Auth) FindUser(username string, email string) (*models.User, error) {
|
|
var user models.User
|
|
if email == "" {
|
|
email = username
|
|
}
|
|
ret := r.db.Where("username = ? OR email = ?", username, email).First(&user)
|
|
|
|
return &user, ret.Error
|
|
}
|
|
|
|
func (r *Auth) CreateUserSession(user *models.User) (string, error) {
|
|
sessionId, err := lib.GenerateSessionID(20)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
if ret := r.db.Create(&models.UserSession{ID: sessionId, UserID: user.ID}); ret.Error != nil {
|
|
return "", ret.Error
|
|
}
|
|
|
|
return sessionId, nil
|
|
}
|
|
|
|
func (r *Auth) GetSession(sessionId string) (*models.UserSession, error) {
|
|
var session models.UserSession
|
|
res := r.db.Joins("User").Where(&models.UserSession{ID: sessionId}).First(&session)
|
|
return &session, res.Error
|
|
}
|
|
|
|
func (r *Auth) RemoveUserSession(sessionId string, force bool) error {
|
|
db := r.db
|
|
if force {
|
|
db = db.Unscoped()
|
|
}
|
|
|
|
res := db.Delete(&models.UserSession{ID: sessionId})
|
|
return res.Error
|
|
}
|
|
|
|
func (r *Auth) CreateUser(user *models.User) (string, error) {
|
|
if err := r.db.Create(user).Error; err != nil {
|
|
return "", err
|
|
}
|
|
return r.CreateUserSession(user)
|
|
}
|