package server import ( "bytes" "encoding/gob" "os" "github.com/akrylysov/pogreb" ) // GetHSTSHeader returns a HSTS header with includeSubdomains & preload for MainDomainSuffix and RawDomain, or an empty // string for custom domains. func GetHSTSHeader(host, mainDomainSuffix, rawDomain []byte) string { if bytes.HasSuffix(host, mainDomainSuffix) || bytes.Equal(host, rawDomain) { return "max-age=63072000; includeSubdomains; preload" } else { return "" } } func TrimHostPort(host []byte) []byte { i := bytes.IndexByte(host, ':') if i >= 0 { return host[:i] } return host } func PogrebPut(db *pogreb.DB, name []byte, obj interface{}) { var resGob bytes.Buffer resEnc := gob.NewEncoder(&resGob) err := resEnc.Encode(obj) if err != nil { panic(err) } err = db.Put(name, resGob.Bytes()) if err != nil { panic(err) } } func PogrebGet(db *pogreb.DB, name []byte, obj interface{}) bool { resBytes, err := db.Get(name) if err != nil { panic(err) } if resBytes == nil { return false } resGob := bytes.NewBuffer(resBytes) resDec := gob.NewDecoder(resGob) err = resDec.Decode(obj) if err != nil { panic(err) } return true } // EnvOr reads an environment variable and returns a default value if it's empty. // TODO: to helpers.go or use CLI framework func EnvOr(env string, or string) string { if v := os.Getenv(env); v != "" { return v } return or }