diff auth/encode.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
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/auth/encode.go	Tue Jul 24 11:09:18 2018 +0200
@@ -0,0 +1,52 @@
+package auth
+
+import (
+	"encoding/binary"
+	"io"
+)
+
+type binReader struct {
+	r   io.Reader
+	err error
+}
+
+func (r *binReader) read(x interface{}) {
+	if r.err == nil {
+		r.err = binary.Read(r.r, binary.BigEndian, x)
+	}
+}
+
+func (r *binReader) readString(s *string) {
+	if r.err != nil {
+		return
+	}
+	var l uint32
+	if r.err = binary.Read(r.r, binary.BigEndian, &l); r.err != nil {
+		return
+	}
+	b := make([]byte, l)
+	if r.err = binary.Read(r.r, binary.BigEndian, b); r.err != nil {
+		return
+	}
+	*s = string(b)
+}
+
+type binWriter struct {
+	w   io.Writer
+	err error
+}
+
+func (w *binWriter) write(x interface{}) {
+	if w.err == nil {
+		w.err = binary.Write(w.w, binary.BigEndian, x)
+	}
+}
+
+func (w *binWriter) writeString(s string) {
+	if w.err == nil {
+		w.err = binary.Write(w.w, binary.BigEndian, uint32(len(s)))
+	}
+	if w.err == nil {
+		w.err = binary.Write(w.w, binary.BigEndian, []byte(s))
+	}
+}