Personal Git forge.
package dbimport ( "crypto/rand" "farga/db/types" "farga/lib" "time" "github.com/google/uuid")// retrieves a session from the hash.func (db *DB) Session(sessionString string) (types.Session, error) { var session types.Session hash := lib.HashSHA256([]byte(sessionString)) err := db.First(&session, &types.Session{Hash: hash}).Error return session, err}// generates a new session + token, saving a SHA256 hash of the token into the database.func (db *DB) NewSession(user_id *uuid.UUID) (session types.Session, token string, err error) { token = rand.Text() session = types.Session{ UserID: user_id, Hash: lib.HashSHA256([]byte(token)), } err = db.Create(&session).Error return session, token, err}// deletes all expired sessions in the database.func (db *DB) DeleteExpiredSessions() { db.Where("created_at < ?", time.Now().AddDate(0, 0, -lib.SessionDurationDays)).Delete(&types.Session{})}// deletes a session given its token.func (db *DB) DeleteSession(sessionString string) error { hash := lib.HashSHA256([]byte(sessionString)) return db.Where("hash = ?", hash).Delete(&types.Session{}).Error}