diff --git a/web.go b/web.go index 91cc14f..e8178dd 100644 --- a/web.go +++ b/web.go @@ -854,12 +854,37 @@ func thelistingoftheontologies(w http.ResponseWriter, r *http.Request) { } } +type Track struct { + xid string + who string +} + +var trackchan = make(chan Track) + +func tracker() { + var track Track + for { + + select { + case track = <-trackchan: + log.Printf("%s fetched by %s", track.xid, track.who) + } + } +} + +var re_keyholder = regexp.MustCompile(`keyId="([^"]+)"`) + func trackback(xid string, r *http.Request) { agent := r.UserAgent() who := originate(agent) sig := r.Header.Get("Signature") - - log.Printf("(%s) fetched %s (%s)", who, xid, sig) + if sig != "" { + m := re_keyholder.FindStringSubmatch(sig) + if len(m) > 2 { + who = m[1] + } + } + trackchan <- Track{xid:xid, who: who} } func showonehonk(w http.ResponseWriter, r *http.Request) { @@ -1943,6 +1968,7 @@ func serve() { log.Fatal(err) } go redeliverator() + go tracker() debug := false getconfig("debug", &debug)