chore(webui): improve the randomness of session cookies
All checks were successful
main / main (push) Successful in 1m40s
main / deploy (push) Has been skipped
main / publish (push) Has been skipped

Closes #24
This commit is contained in:
Julien Dessaux 2025-04-23 00:16:36 +02:00
parent 342e1d6328
commit 929657fd34
Signed by: adyxax
GPG key ID: F92E51B86E07177E
2 changed files with 7 additions and 8 deletions

View file

@ -2,29 +2,28 @@ package database
import ( import (
"database/sql" "database/sql"
"encoding/base64"
"errors" "errors"
"fmt" "fmt"
"time" "time"
"git.adyxax.org/adyxax/tfstated/pkg/model" "git.adyxax.org/adyxax/tfstated/pkg/model"
"go.n16f.net/uuid" "git.adyxax.org/adyxax/tfstated/pkg/scrypto"
) )
func (db *DB) CreateSession(account *model.Account) (string, error) { func (db *DB) CreateSession(account *model.Account) (string, error) {
var sessionId uuid.UUID sessionBytes := scrypto.RandomBytes(32)
if err := sessionId.Generate(uuid.V4); err != nil { sessionId := base64.RawURLEncoding.EncodeToString(sessionBytes[:])
return "", fmt.Errorf("failed to generate session id: %w", err)
}
if _, err := db.Exec( if _, err := db.Exec(
`INSERT INTO sessions(id, account_id, data) `INSERT INTO sessions(id, account_id, data)
VALUES (?, ?, ?);`, VALUES (?, ?, ?);`,
sessionId.String(), sessionId,
account.Id, account.Id,
"", "",
); err != nil { ); err != nil {
return "", fmt.Errorf("failed insert new session in database: %w", err) return "", fmt.Errorf("failed insert new session in database: %w", err)
} }
return sessionId.String(), nil return sessionId, nil
} }
func (db *DB) DeleteExpiredSessions() error { func (db *DB) DeleteExpiredSessions() error {

View file

@ -21,7 +21,7 @@ func sessionsMiddleware(db *database.DB) func(http.Handler) http.Handler {
return return
} }
if err == nil { if err == nil {
if len(cookie.Value) != 36 { if len(cookie.Value) != 43 {
unsetSesssionCookie(w) unsetSesssionCookie(w)
} else { } else {
session, err := db.LoadSessionById(cookie.Value) session, err := db.LoadSessionById(cookie.Value)