hangman/internal/game/session.go
Hazel Noack 9d6700fa9a draft
2025-06-27 15:46:52 +02:00

58 lines
1.0 KiB
Go

package game
import (
"crypto/ed25519"
"encoding/base64"
petname "github.com/dustinkirkland/golang-petname"
)
var lastSessionId int = 0
var sessionStorage []Session = []Session{}
var nameToSession map[string]*Session = make(map[string]*Session)
type Session struct {
id int
Name string
Users []User
Phrase []string
HiddenPhrase []string
}
func NewSession(phrase string) Session {
sessionName := petname.Generate(3, "-")
s := Session{
id: lastSessionId,
Name: sessionName,
Users: []User{},
}
sessionStorage = append(sessionStorage, s)
nameToSession[sessionName] = &s
lastSessionId++
return s
}
func GetSession(name string) *Session {
return nameToSession[name]
}
func (s *Session) AddUser(user User) {
s.Users = append(s.Users, user)
}
func (s Session) VerifySignature(signature string, message []byte) *User {
for _, u := range s.Users {
sig, _ := base64.StdEncoding.DecodeString(signature)
if ed25519.Verify(u.PublicKey, message, sig) {
return &u
}
}
return nil
}