view 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 source

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