view misc/encode.go @ 391:13c5fc6cbaea

docs: add map-data-flow.svg. * Add diagram to show how our proxy, geoserver and the external WFS and WMS servers will work together.
author Bernhard Reiter <bernhard@intevation.de>
date Mon, 13 Aug 2018 17:25:00 +0200
parents 999f4f83a072
children
line wrap: on
line source

package misc

import (
	"encoding/base64"
	"encoding/binary"
	"io"
)

type BinReader struct {
	io.Reader
	Err error
}

func (r *BinReader) Read(buf []byte) (int, error) {
	if r.Err != nil {
		return 0, r.Err
	}
	var n int
	n, r.Err = r.Read(buf)
	return n, r.Err
}

func (r *BinReader) ReadBin(x interface{}) {
	if r.Err == nil {
		r.Err = binary.Read(r.Reader, binary.BigEndian, x)
	}
}

func (r *BinReader) ReadString(s *string) {
	if r.Err != nil {
		return
	}
	var l uint32
	if r.Err = binary.Read(r.Reader, binary.BigEndian, &l); r.Err != nil {
		return
	}
	b := make([]byte, l)
	if r.Err = binary.Read(r.Reader, binary.BigEndian, b); r.Err != nil {
		return
	}
	*s = string(b)
}

type BinWriter struct {
	io.Writer
	Err error
}

func (w *BinWriter) Write(buf []byte) (int, error) {
	if w.Err != nil {
		return 0, w.Err
	}
	var n int
	n, w.Err = w.Writer.Write(buf)
	return n, w.Err
}

func (w *BinWriter) WriteBin(x interface{}) {
	if w.Err == nil {
		w.Err = binary.Write(w.Writer, binary.BigEndian, x)
	}
}

func (w *BinWriter) WriteString(s string) {
	if w.Err == nil {
		w.Err = binary.Write(w.Writer, binary.BigEndian, uint32(len(s)))
	}
	if w.Err == nil {
		w.Err = binary.Write(w.Writer, binary.BigEndian, []byte(s))
	}
}

func BasicAuth(user, password string) string {
	auth := user + ":" + password
	return base64.StdEncoding.EncodeToString([]byte(auth))
}