Mercurial > gemma
diff auth/session.go @ 215:f345edb409b2
Made serialisation and deserialisation of sessions more robust (fixed a small bug on the way).
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 24 Jul 2018 11:09:18 +0200 |
parents | e85413e5befa |
children | a7b2db8b3d18 |
line wrap: on
line diff
--- a/auth/session.go Tue Jul 24 10:58:38 2018 +0200 +++ b/auth/session.go Tue Jul 24 11:09:18 2018 +0200 @@ -3,7 +3,6 @@ import ( "crypto/rand" "encoding/base64" - "encoding/binary" "io" "time" ) @@ -32,43 +31,33 @@ } 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) - } + wr := binWriter{w: w} + wr.write(s.ExpiresAt) + wr.writeString(s.User) + wr.writeString(s.Password) + wr.write(uint32(len(s.Roles))) + for _, role := range s.Roles { + wr.writeString(role) } - write(s.ExpiresAt) - write(s.User) - write(s.Password) - write(uint32(len(s.Roles))) - for _, role := range s.Roles { - write(role) - } - return err + return wr.err } 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 var n uint32 - read(&x.ExpiresAt) - read(&x.User) - read(&x.Password) - read(&n) + rd := binReader{r: r} + rd.read(&x.ExpiresAt) + rd.readString(&x.User) + rd.readString(&x.Password) + rd.read(&n) x.Roles = make([]string, n) for i := uint32(0); n > 0 && i < n; i++ { - read(&x.Roles[i]) + rd.readString(&x.Roles[i]) } - if err == nil { + if rd.err == nil { *s = x } - return err + return rd.err } func GenerateSessionKey() string {