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()