fin-check-api/tokens/sessions.go

59 lines
1.3 KiB
Go
Raw Normal View History

2024-11-06 18:47:22 +01:00
package tokens
import (
"crypto/sha256"
"log"
"time"
"git.qowevisa.me/Qowevisa/fin-check-api/db"
)
func getSalt() []byte {
return []byte("w40DJV3v1flySvFdxHWbBSJsIOaakkVs5FG7brq4oi1#nEz2fEZxpUfyBwkkww7f")
}
func CreateSessionFromToken(token string, userID uint) error {
salt := getSalt()
sessionID := sha256.New().Sum(append(salt, []byte(token)...))
dbc := db.Connect()
session := &db.Session{
ID: string(sessionID),
UserID: userID,
ExpireAt: time.Now().Add(time.Hour),
}
if err := dbc.Create(session).Error; err != nil {
return err
}
return nil
}
func ValidateSessionToken(token string) bool {
salt := getSalt()
sessionID := sha256.New().Sum(append(salt, []byte(token)...))
dbc := db.Connect()
session := &db.Session{}
if err := dbc.Find(session, sessionID).Error; err != nil {
log.Printf("DBERROR: %v\n", err)
return false
}
if session.ID == "" {
return false
}
if session.ExpireAt.Unix() < time.Now().Unix() {
dbc.Delete(session)
return false
}
return session.ID != ""
}
func GetSession(token string) (*db.Session, error) {
salt := getSalt()
sessionID := sha256.New().Sum(append(salt, []byte(token)...))
dbc := db.Connect()
session := &db.Session{}
if err := dbc.Find(session, sessionID).Error; err != nil {
return nil, err
}
return session, nil
}