diff options
author | Michael Muré <batolettre@gmail.com> | 2018-08-02 23:37:49 +0200 |
---|---|---|
committer | Michael Muré <batolettre@gmail.com> | 2018-08-02 23:37:49 +0200 |
commit | d8f89726fec3822d7d1dd42c52f478f37003b534 (patch) | |
tree | 567e97ee605ef3a286e42e11535fa6516321e743 /util/hash.go | |
parent | ed8f7eca9a8e0d1c448a7cc6240e2b7e357cf354 (diff) | |
download | git-bug-d8f89726fec3822d7d1dd42c52f478f37003b534.tar.gz |
implement media hosting in git for comments + API for the webui
Diffstat (limited to 'util/hash.go')
-rw-r--r-- | util/hash.go | 40 |
1 files changed, 40 insertions, 0 deletions
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 +} |