can cache fishing results in db
This commit is contained in:
parent
2f3ee823d9
commit
6be21e9f0b
58
activity.go
58
activity.go
|
@ -845,3 +845,61 @@ func asjonker(user *WhatAbout) map[string]interface{} {
|
||||||
|
|
||||||
return j
|
return j
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var handfull = make(map[string]string)
|
||||||
|
var handlock sync.Mutex
|
||||||
|
|
||||||
|
func gofish(name string) string {
|
||||||
|
if name[0] == '@' {
|
||||||
|
name = name[1:]
|
||||||
|
}
|
||||||
|
m := strings.Split(name, "@")
|
||||||
|
if len(m) != 2 {
|
||||||
|
log.Printf("bad fish name: %s", name)
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
handlock.Lock()
|
||||||
|
ref, ok := handfull[name]
|
||||||
|
handlock.Unlock()
|
||||||
|
if ok {
|
||||||
|
return ref
|
||||||
|
}
|
||||||
|
db := opendatabase()
|
||||||
|
row := db.QueryRow("select ibox from xonkers where xid = ?", name)
|
||||||
|
var href string
|
||||||
|
err := row.Scan(&href)
|
||||||
|
if err == nil {
|
||||||
|
handlock.Lock()
|
||||||
|
handfull[name] = href
|
||||||
|
handlock.Unlock()
|
||||||
|
return href
|
||||||
|
}
|
||||||
|
log.Printf("fishing for %s", name)
|
||||||
|
j, err := GetJunk(fmt.Sprintf("https://%s/.well-known/webfinger?resource=acct:%s", m[1], name))
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("failed to go fish %s: %s", name, err)
|
||||||
|
handlock.Lock()
|
||||||
|
handfull[name] = ""
|
||||||
|
handlock.Unlock()
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
links, _ := jsongetarray(j, "links")
|
||||||
|
for _, l := range links {
|
||||||
|
href, _ := jsongetstring(l, "href")
|
||||||
|
rel, _ := jsongetstring(l, "rel")
|
||||||
|
t, _ := jsongetstring(l, "type")
|
||||||
|
if rel == "self" && friendorfoe(t) {
|
||||||
|
db.Exec("insert into xonkers (xid, ibox, obox, sbox, pubkey) values (?, ?, ?, ?, ?)",
|
||||||
|
name, href, "", "", "")
|
||||||
|
handlock.Lock()
|
||||||
|
handfull[name] = href
|
||||||
|
handlock.Unlock()
|
||||||
|
return href
|
||||||
|
}
|
||||||
|
}
|
||||||
|
handlock.Lock()
|
||||||
|
handfull[name] = ""
|
||||||
|
handlock.Unlock()
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
|
41
honk.go
41
honk.go
|
@ -31,7 +31,6 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
@ -982,46 +981,6 @@ func showcombos(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var handfull = make(map[string]string)
|
|
||||||
var handlock sync.Mutex
|
|
||||||
|
|
||||||
func gofish(name string) string {
|
|
||||||
if name[0] == '@' {
|
|
||||||
name = name[1:]
|
|
||||||
}
|
|
||||||
m := strings.Split(name, "@")
|
|
||||||
if len(m) != 2 {
|
|
||||||
log.Printf("bad fish name: %s", name)
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
handlock.Lock()
|
|
||||||
ref, ok := handfull[name]
|
|
||||||
handlock.Unlock()
|
|
||||||
if ok {
|
|
||||||
return ref
|
|
||||||
}
|
|
||||||
j, err := GetJunk(fmt.Sprintf("https://%s/.well-known/webfinger?resource=acct:%s", m[1], name))
|
|
||||||
handlock.Lock()
|
|
||||||
defer handlock.Unlock()
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("failed to go fish %s: %s", name, err)
|
|
||||||
handfull[name] = ""
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
links, _ := jsongetarray(j, "links")
|
|
||||||
for _, l := range links {
|
|
||||||
href, _ := jsongetstring(l, "href")
|
|
||||||
rel, _ := jsongetstring(l, "rel")
|
|
||||||
t, _ := jsongetstring(l, "type")
|
|
||||||
if rel == "self" && friendorfoe(t) {
|
|
||||||
handfull[name] = href
|
|
||||||
return href
|
|
||||||
}
|
|
||||||
}
|
|
||||||
handfull[name] = ""
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func savehonker(w http.ResponseWriter, r *http.Request) {
|
func savehonker(w http.ResponseWriter, r *http.Request) {
|
||||||
u := login.GetUserInfo(r)
|
u := login.GetUserInfo(r)
|
||||||
name := r.FormValue("name")
|
name := r.FormValue("name")
|
||||||
|
|
Loading…
Reference in New Issue