diff options
author | Ben Burwell <ben@benburwell.com> | 2019-09-09 14:18:35 -0400 |
---|---|---|
committer | Ben Burwell <ben@benburwell.com> | 2019-09-09 14:18:35 -0400 |
commit | 231fe480a3a52ad228d9a7d3cda0a2fe1663a284 (patch) | |
tree | 8aa90edd88e766361b09dc5e4e22a5c03dd9c396 /database.go | |
parent | 81342fc5250e14a53b42cb168f7fd6fffad50de5 (diff) |
vendor sumdb
Diffstat (limited to 'database.go')
-rw-r--r-- | database.go | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/database.go b/database.go new file mode 100644 index 0000000..47a8918 --- /dev/null +++ b/database.go @@ -0,0 +1,82 @@ +package main + +import ( + "bytes" + "fmt" + "io/ioutil" + "log" + "net/http" + "sync" + "time" + + "git.sr.ht/~benburwell/gosumdbaudit/sumdb" +) + +type database struct { + host string + key string + pollInterval time.Duration + + hc http.Client + + config map[string][]byte + configMu sync.RWMutex +} + +func (d *database) ReadRemote(path string) ([]byte, error) { + log.Printf("read remote: %s", path) + resp, err := d.hc.Get("https://" + d.host + path) + if err != nil { + return nil, err + } + defer resp.Body.Close() + return ioutil.ReadAll(resp.Body) +} + +func (d *database) ReadConfig(file string) ([]byte, error) { + log.Printf("read config: %s", file) + if file == "key" { + return []byte(d.key), nil + } + d.configMu.RLock() + defer d.configMu.RUnlock() + if d.config == nil { + d.config = make(map[string][]byte) + // d.config["sum.golang.org/latest"] = []byte(`go.sum database tree + // 163038 + // S1dhskM/kuUJUOCz3InBRhl0vFiHxr0INft+24ClisI= + + // — sum.golang.org Az3gruAGD/ybzwcCUArmKpzAZNmEOu3Yahr9WIKA2SFAK3G2xzo39uHS70mylR3nsT9t3ZpVQW89RT6Tg1+1nIf7bgI= + // `) + } + c, ok := d.config[file] + if !ok { + return nil, nil + } + return c, nil +} + +func (d *database) WriteConfig(file string, old, new []byte) error { + log.Printf("write config: %s", file) + d.configMu.Lock() + defer d.configMu.Unlock() + if val, ok := d.config[file]; ok && !bytes.Equal(val, old) { + return sumdb.ErrWriteConflict + } + d.config[file] = new + return nil +} + +func (d *database) ReadCache(file string) ([]byte, error) { + return nil, fmt.Errorf("cache is not implemented") +} + +func (d *database) WriteCache(file string, data []byte) {} + +func (d *database) Log(msg string) { + log.Printf(msg) +} + +func (d *database) SecurityError(msg string) { + log.Printf("!!! SECURITY ERROR !!!\n%s", msg) +} |