Mercurial > gemma
diff auth/connection.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 | 3457a60fb12d |
children | e85413e5befa |
line wrap: on
line diff
--- a/auth/connection.go Fri Jul 20 17:11:57 2018 +0200 +++ b/auth/connection.go Fri Jul 20 18:32:11 2018 +0200 @@ -1,8 +1,11 @@ package auth import ( + "bytes" "database/sql" + "encoding/binary" "errors" + "io" "log" "sync" "time" @@ -47,6 +50,38 @@ mu sync.Mutex } +func (c *Connection) serialize() []byte { + var buf bytes.Buffer + c.session.serialize(&buf) + access, _ := c.last().MarshalText() + binary.Write(&buf, binary.BigEndian, string(access)) + return buf.Bytes() +} + +func (c *Connection) unserialize(r io.Reader) error { + session := new(Session) + if err := session.unserialize(r); err != nil { + return err + } + + var access string + if err := binary.Read(r, binary.BigEndian, &access); err != nil { + return err + } + + var t time.Time + if err := t.UnmarshalText([]byte(access)); err != nil { + return err + } + + *c = Connection{ + session: session, + access: t, + } + + return nil +} + func (c *Connection) set(session *Session) { c.session = session c.touch()