fixed changing of pointers
This commit is contained in:
@@ -27,14 +27,14 @@ type Session struct {
|
||||
CurrentUser *User
|
||||
}
|
||||
|
||||
func NewSession(phrase string) Session {
|
||||
func NewSession(phrase string) *Session {
|
||||
sessionName := petname.Generate(3, "-")
|
||||
p := strings.Split(phrase, "")
|
||||
|
||||
s := Session{
|
||||
id: lastSessionId,
|
||||
Name: sessionName,
|
||||
Users: []User{},
|
||||
Users: make([]User, 0),
|
||||
phrase: p,
|
||||
AskedLetters: []string{},
|
||||
DiscoveredPhrase: make([]string, len(p)),
|
||||
@@ -44,34 +44,44 @@ func NewSession(phrase string) Session {
|
||||
}
|
||||
|
||||
sessionStorage = append(sessionStorage, s)
|
||||
nameToSession[sessionName] = &s
|
||||
nameToSession[sessionName] = &sessionStorage[len(sessionStorage)-1]
|
||||
lastSessionId++
|
||||
|
||||
return s
|
||||
return &sessionStorage[len(sessionStorage)-1]
|
||||
}
|
||||
|
||||
func GetSession(name string) *Session {
|
||||
return nameToSession[name]
|
||||
func GetSession(name string) (*Session, error) {
|
||||
s, ok := nameToSession[name]
|
||||
if !ok {
|
||||
return s, errors.New("can't find session " + name)
|
||||
}
|
||||
|
||||
return s, nil
|
||||
}
|
||||
|
||||
func (s *Session) AddUser(user User) {
|
||||
s.Users = append(s.Users, user)
|
||||
|
||||
if s.CurrentUser == nil {
|
||||
s.CurrentUser = &s.Users[s.userIndex]
|
||||
}
|
||||
// fmt.Printf("#### Adding %v:\t%p\n", s.Users[len(s.Users)-1].Name, &(s.Users[len(s.Users)-1]))
|
||||
// append changes the pointers to the users because it needs to resize that slice
|
||||
s.CurrentUser = &(s.Users[s.userIndex])
|
||||
}
|
||||
|
||||
func (s Session) VerifySignature(signature string, message []byte) *User {
|
||||
for _, u := range s.Users {
|
||||
sig, _ := base64.StdEncoding.DecodeString(signature)
|
||||
func (s *Session) VerifySignature(signature string, message []byte) (*User, error) {
|
||||
sig, err := base64.StdEncoding.DecodeString(signature)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if ed25519.Verify(u.PublicKey, message, sig) {
|
||||
return &u
|
||||
for i := range s.Users {
|
||||
// fmt.Printf("looking %v:\t%p\n", s.Users[i].Name, &(s.Users[i]))
|
||||
|
||||
if ed25519.Verify(s.Users[i].PublicKey, message, sig) {
|
||||
return &s.Users[i], nil
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
return nil, errors.New("this user was not fount in the current session")
|
||||
}
|
||||
|
||||
func (s *Session) GuessLetter(letter string) (*Session, error) {
|
||||
@@ -101,5 +111,6 @@ func (s *Session) GuessLetter(letter string) (*Session, error) {
|
||||
|
||||
s.userIndex = (s.userIndex + 1) % len(s.Users)
|
||||
s.CurrentUser = &s.Users[s.userIndex]
|
||||
|
||||
return s, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user