Mercurial > gemma
changeset 197:e85413e5befa
Cleaned up serialisation/deserilisation of sessions a bit.
author | Sascha L. Teichmann <teichmann@intevation.de> |
---|---|
date | Fri, 20 Jul 2018 22:50:59 +0200 |
parents | b67208d82543 |
children | c20e86a3c073 |
files | auth/connection.go auth/persistent.go auth/session.go |
diffstat | 3 files changed, 32 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- 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 }
--- 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
--- 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 {