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 } func NewSession() 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 }