Implement saved sessions
This commit is contained in:
parent
025b984314
commit
fa0e917d34
9 changed files with 187 additions and 0 deletions
|
|
@ -37,6 +37,7 @@ func connectDatabase() (*gorm.DB, error) {
|
|||
|
||||
err = database.AutoMigrate(
|
||||
&models.User{},
|
||||
&models.UserSavedSession{},
|
||||
&models.Section{},
|
||||
&models.Role{},
|
||||
&models.UserRole{},
|
||||
|
|
|
|||
56
helpers/saved_session.go
Normal file
56
helpers/saved_session.go
Normal 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)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue