Implement saved sessions

This commit is contained in:
William Bouzourène 2025-01-08 15:21:47 +01:00
parent 9bec3a591e
commit 71e39dcf62
9 changed files with 187 additions and 0 deletions

56
helpers/saved_session.go Normal file
View file

@ -0,0 +1,56 @@
package helpers
import (
"crypto/rand"
"encoding/hex"
"time"
"git.readonly.ch/bouzoure/pop-camarades/models"
"github.com/google/uuid"
)
func CreateSavedSession(userid uint) (models.UserSavedSession, string, error) {
var savedSession models.UserSavedSession
db, err := GetDatabase()
if err != nil {
return savedSession, "", err
}
secret := GenerateSecureToken(30)
hashedSecret, err := HashPassword(secret)
if err != nil {
return savedSession, "", err
}
now := time.Now()
expiration := now.AddDate(0, 0, 30)
savedSession.UserID = userid
savedSession.UUID = uuid.NewString()
savedSession.Secret = hashedSecret
savedSession.Expiration = expiration
db.Create(&savedSession)
return savedSession, secret, nil
}
func RemoveSavedSession(uuid string) error {
db, err := GetDatabase()
if err != nil {
return err
}
db.Delete(&models.UserSavedSession{}, "uuid = ?", uuid)
return nil
}
func GenerateSecureToken(length int) string {
b := make([]byte, length)
if _, err := rand.Read(b); err != nil {
return ""
}
return hex.EncodeToString(b)
}