From d8f89726fec3822d7d1dd42c52f478f37003b534 Mon Sep 17 00:00:00 2001 From: Michael Muré Date: Thu, 2 Aug 2018 23:37:49 +0200 Subject: implement media hosting in git for comments + API for the webui --- util/hash.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'util/hash.go') diff --git a/util/hash.go b/util/hash.go index 088fd70e..df0a83b8 100644 --- a/util/hash.go +++ b/util/hash.go @@ -1,3 +1,43 @@ package util +import ( + "fmt" + "io" +) + type Hash string + +func (h Hash) String() string { + return string(h) +} + +func (h *Hash) UnmarshalGQL(v interface{}) error { + _, ok := v.(string) + if !ok { + return fmt.Errorf("labels must be strings") + } + + *h = v.(Hash) + + if !h.IsValid() { + return fmt.Errorf("invalid hash") + } + + return nil +} + +func (h Hash) MarshalGQL(w io.Writer) { + w.Write([]byte(`"` + h.String() + `"`)) +} + +func (h *Hash) IsValid() bool { + if len(*h) != 40 { + return false + } + for _, r := range *h { + if (r < 'a' || r > 'z') && (r < '0' || r > '9') { + return false + } + } + return true +} -- cgit