Implement saved sessions
This commit is contained in:
parent
025b984314
commit
fa0e917d34
9 changed files with 187 additions and 0 deletions
55
middlewares/saved_session.go
Normal file
55
middlewares/saved_session.go
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
package middlewares
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"git.readonly.ch/bouzoure/pop-camarades/helpers"
|
||||
"git.readonly.ch/bouzoure/pop-camarades/models"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func SavedSessionMiddleware(c *fiber.Ctx) error {
|
||||
sessionUUID := c.Cookies("saved-session-uuid")
|
||||
sessionSecret := c.Cookies("saved-session-secret")
|
||||
|
||||
if len(sessionUUID) > 0 && len(sessionSecret) > 0 {
|
||||
db, err := helpers.GetDatabase()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var savedSession models.UserSavedSession
|
||||
result := db.Find(
|
||||
&savedSession,
|
||||
"uuid = ? AND expiration >= ?",
|
||||
sessionUUID,
|
||||
time.Now(),
|
||||
)
|
||||
|
||||
if errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||
c.ClearCookie("saved-session-uuid")
|
||||
c.ClearCookie("saved-session-secret")
|
||||
|
||||
return c.Next()
|
||||
}
|
||||
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
|
||||
if helpers.CheckPasswordHash(sessionSecret, savedSession.Secret) {
|
||||
sess, err := helpers.GetSessionStore(c)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
sess.Set("userid", savedSession.UserID)
|
||||
sess.Set("totp-verified", "yes")
|
||||
sess.Save()
|
||||
}
|
||||
}
|
||||
|
||||
return c.Next()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue