59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
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.Unscoped().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)
|
|
}
|