55 lines
968 B
Go
55 lines
968 B
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
|
|
}
|
|
|
|
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
|
|
}
|