vaulterm/server/app/auth/repository.go

67 lines
1.6 KiB
Go
Raw Normal View History

2024-11-07 19:07:41 +00:00
package auth
import (
"gorm.io/gorm"
2024-11-16 02:34:07 +07:00
"rul.sh/vaulterm/server/db"
"rul.sh/vaulterm/server/models"
2024-11-17 19:49:42 +07:00
"rul.sh/vaulterm/server/utils"
2024-11-07 19:07:41 +00:00
)
type Auth struct{ db *gorm.DB }
func NewRepository() *Auth {
2024-11-07 19:07:41 +00:00
return &Auth{db: db.Get()}
}
2024-11-14 18:50:58 +07:00
func (r *Auth) FindUser(username string, email string) (*models.User, error) {
2024-11-07 19:07:41 +00:00
var user models.User
2024-11-14 18:50:58 +07:00
if email == "" {
email = username
}
ret := r.db.Where("username = ? OR email = ?", username, email).First(&user)
2024-11-07 19:07:41 +00:00
return &user, ret.Error
}
2024-11-17 17:54:41 +07:00
func (r *Auth) FindUserAccount(accountType string, accountId string) (*models.UserAccount, error) {
var user models.UserAccount
ret := r.db.Where("type = ? AND account_id = ?", accountType, accountId).Joins("User").First(&user)
return &user, ret.Error
}
2024-11-07 19:07:41 +00:00
func (r *Auth) CreateUserSession(user *models.User) (string, error) {
2024-11-17 19:49:42 +07:00
sessionId, err := utils.GenerateSessionID(20)
2024-11-07 19:07:41 +00:00
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
}
2024-11-14 18:50:58 +07:00
func (r *Auth) CreateUser(user *models.User) (string, error) {
if err := r.db.Create(user).Error; err != nil {
return "", err
}
return r.CreateUserSession(user)
}