# HG changeset patch # User Sascha L. Teichmann # Date 1532119859 -7200 # Node ID e85413e5befafc8fdd34fc026275ee01a13f75c8 # Parent b67208d82543f90c55cb6c73b3ad427bca3b1249 Cleaned up serialisation/deserilisation of sessions a bit. diff -r b67208d82543 -r e85413e5befa auth/connection.go --- a/auth/connection.go Fri Jul 20 18:31:45 2018 +0200 +++ b/auth/connection.go Fri Jul 20 22:50:59 2018 +0200 @@ -58,9 +58,9 @@ return buf.Bytes() } -func (c *Connection) unserialize(r io.Reader) error { +func (c *Connection) deserialize(r io.Reader) error { session := new(Session) - if err := session.unserialize(r); err != nil { + if err := session.deserialize(r); err != nil { return err } diff -r b67208d82543 -r e85413e5befa auth/persistent.go --- a/auth/persistent.go Fri Jul 20 18:31:45 2018 +0200 +++ b/auth/persistent.go Fri Jul 20 22:50:59 2018 +0200 @@ -36,7 +36,7 @@ for k, v := c.First(); k != nil; k, v = c.Next() { var conn Connection - if err := conn.unserialize(bytes.NewReader(v)); err != nil { + if err := conn.deserialize(bytes.NewReader(v)); err != nil { return err } conns[string(k)] = &conn diff -r b67208d82543 -r e85413e5befa auth/session.go --- a/auth/session.go Fri Jul 20 18:31:45 2018 +0200 +++ b/auth/session.go Fri Jul 20 22:50:59 2018 +0200 @@ -31,31 +31,44 @@ } } -func (s *Session) serialize(w io.Writer) { - binary.Write(w, binary.BigEndian, s.ExpiresAt) - binary.Write(w, binary.BigEndian, s.User) - binary.Write(w, binary.BigEndian, s.Password) - binary.Write(w, binary.BigEndian, uint32(len(s.Roles))) +func (s *Session) serialize(w io.Writer) error { + var err error + write := func(data interface{}) { + if err == nil { + err = binary.Write(w, binary.BigEndian, data) + } + } + write(s.ExpiresAt) + write(s.User) + write(s.Password) + write(uint32(len(s.Roles))) for _, role := range s.Roles { - binary.Write(w, binary.BigEndian, role) + write(role) } + return err } -func (s *Session) unserialize(r io.Reader) error { +func (s *Session) deserialize(r io.Reader) error { + var err error + read := func(data interface{}) { + if err == nil { + err = binary.Read(r, binary.BigEndian, data) + } + } var x Session - binary.Read(r, binary.BigEndian, &x.ExpiresAt) - binary.Read(r, binary.BigEndian, &x.User) - binary.Read(r, binary.BigEndian, &x.Password) var n uint32 - binary.Read(r, binary.BigEndian, &n) + read(&x.ExpiresAt) + read(&x.User) + read(&x.Password) + read(&n) x.Roles = make([]string, n) for i := uint32(0); n > 0 && i < n; i++ { - if err := binary.Read(r, binary.BigEndian, &x.Roles[i]); err != nil { - return err - } + read(&x.Roles[i]) } - *s = x - return nil + if err == nil { + *s = x + } + return err } func GenerateSessionKey() string {