Mercurial > gemma
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)) + } +}