diff options
| author | Ben Burwell <ben@benburwell.com> | 2019-09-09 15:13:31 -0400 | 
|---|---|---|
| committer | Ben Burwell <ben@benburwell.com> | 2019-09-09 15:13:31 -0400 | 
| commit | 2521534614c4422d865dde674c258eef9441336a (patch) | |
| tree | 1b964605367103083152684f9598446c1866002e /main.go | |
| parent | 231fe480a3a52ad228d9a7d3cda0a2fe1663a284 (diff) | |
stub out monitor
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 70 | 
1 files changed, 55 insertions, 15 deletions
@@ -2,6 +2,7 @@ package main  import (  	"log" +	"sync"  	"time"  	"git.sr.ht/~benburwell/gosumdbaudit/sumdb" @@ -18,23 +19,62 @@ func main() {  			pollInterval: 10 * time.Second,  		},  	} +	var wg sync.WaitGroup +	wg.Add(len(dbs))  	for _, db := range dbs { -		client := sumdb.NewClient(db) -		// lines, err := client.Lookup("golang.org/x/text", "v0.3.0") -		lines, err := client.Lookup("github.com/influxdata/influxdb", "v0.0.0-20190908081120-80e3efa37a3a") -		if err != nil { -			log.Printf("could not lookup: %v", err) -		} else { -			for _, line := range lines { -				log.Printf("got: %s", line) +		go func(db *database) { +			defer wg.Done() +			if err := monitor(db); err != nil { +				log.Printf("AUDIT FAILED: %s", err.Error()) +				return  			} -		} -		// log.Printf("config: %s", string(db.config["sum.golang.org/latest"])) -		// if err := d.monitor(); err != nil { -		// 	log.Printf("AUDIT FAIL (%s): %s", d.host, err.Error()) -		// } -		// if err := audit(d); err != nil { -		// 	log.Printf("AUDIT FAIL (%s): %s", d.host, err.Error()) +		}(db) +	} +	wg.Wait() +} + +func monitor(db *database) error { +	log.Printf("starting monitor for %s", db.host) + +	client := sumdb.NewClient(db) + +	lines, err := client.Lookup("golang.org/x/text", "v0.3.0") +	if err != nil { +		return err +	} +	log.Printf("got lines: %s", lines) + +	// fetch & verify current STH +	// latest, err := client.Latest() +	// if err != nil { +	// 	return err +	// } + +	// fetch all entries in the tree according to the STH +	// entries := client.Entries(nil, latest) + +	// confirm the tree made from the entries produces the same hash as the STH +	// IF NOT: the server has signed invalid data + +	// prev := latest +	for { +		// await a new STH +		// prev = latest +		time.Sleep(db.pollInterval) +		log.Printf("checking %s for new STH...", db.host) +		// awaitNewSTH() + +		// latest, err := client.Latest() +		// if err != nil { +		// 	return err  		// } + +		// fetch all NEW entries between prev and latest +		// if unavailable for an extended period, this should be viewed as misbehavior +		// entries := client.Entries(prev, latest) + +		// fetch a consistency proof for the new STH with the previous STH +		// verify consistency proof +		// verify the new entries generate the corresponding elements in the consistency proof  	}  }  | 
