Mercurial > gemma
diff auth/session.go @ 193:1585c334e8a7
More on persisting sessions.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 20 Jul 2018 18:32:11 +0200 |
parents | 83d798ea9f58 |
children | e85413e5befa |
line wrap: on
line diff
--- a/auth/session.go Fri Jul 20 17:11:57 2018 +0200 +++ b/auth/session.go Fri Jul 20 18:32:11 2018 +0200 @@ -3,6 +3,7 @@ import ( "crypto/rand" "encoding/base64" + "encoding/binary" "io" "time" ) @@ -30,6 +31,33 @@ } } +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))) + for _, role := range s.Roles { + binary.Write(w, binary.BigEndian, role) + } +} + +func (s *Session) unserialize(r io.Reader) error { + 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) + 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 + } + } + *s = x + return nil +} + func GenerateSessionKey() string { return base64.URLEncoding.EncodeToString(GenerateRandomKey(sessionKeyLength)) }