decoupling retrieval of actor from activity in database
This commit is contained in:
parent
6efd723aac
commit
126aac8c81
66
retrieve.go
66
retrieve.go
@ -3,7 +3,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
//"errors"
|
||||||
"html"
|
"html"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -69,20 +69,22 @@ type PostJson struct {
|
|||||||
instance string
|
instance string
|
||||||
}
|
}
|
||||||
|
|
||||||
func check_activity(uri string) (PostJson, error) {
|
func check_activity(uri string) {
|
||||||
var activityjson PostJson
|
var activityjson PostJson
|
||||||
|
|
||||||
// Ignore banned
|
// Ignore banned
|
||||||
for _, banned := range settings.Banned {
|
for _, banned := range settings.Banned {
|
||||||
if strings.Index(uri, "https://"+banned+"/") == 0 {
|
if strings.Index(uri, "https://"+banned+"/") == 0 {
|
||||||
return activityjson, errors.New("Banned instance")
|
//return activityjson, errors.New("Banned instance")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ignore invalid URIs
|
// Ignore invalid URIs
|
||||||
endslash := strings.Index(uri[8:], "/")
|
endslash := strings.Index(uri[8:], "/")
|
||||||
if endslash == -1 {
|
if endslash == -1 {
|
||||||
return activityjson, errors.New("Invalid URI " + uri)
|
//return activityjson, errors.New("Invalid URI " + uri)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
activityjson.instance = uri[8 : endslash+8]
|
activityjson.instance = uri[8 : endslash+8]
|
||||||
|
|
||||||
@ -92,7 +94,8 @@ func check_activity(uri string) (PostJson, error) {
|
|||||||
o.recentactivities.mu.Lock()
|
o.recentactivities.mu.Lock()
|
||||||
if o.recentactivities.Add(uri) == true {
|
if o.recentactivities.Add(uri) == true {
|
||||||
o.recentactivities.mu.Unlock()
|
o.recentactivities.mu.Unlock()
|
||||||
return activityjson, errors.New("Recently requested within local cache")
|
//return activityjson, errors.New("Recently requested within local cache")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
o.recentactivities.mu.Unlock()
|
o.recentactivities.mu.Unlock()
|
||||||
@ -103,7 +106,8 @@ func check_activity(uri string) (PostJson, error) {
|
|||||||
err := selectRet.Scan(&activityjson.id, &jsonmap)
|
err := selectRet.Scan(&activityjson.id, &jsonmap)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
/////////// BETTER RETURN VALUES!!!!!
|
/////////// BETTER RETURN VALUES!!!!!
|
||||||
return activityjson, nil
|
//return activityjson, nil
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
req, _ := http.NewRequest("GET", uri, nil)
|
req, _ := http.NewRequest("GET", uri, nil)
|
||||||
@ -112,18 +116,21 @@ func check_activity(uri string) (PostJson, error) {
|
|||||||
|
|
||||||
resp, err := DoTries(&o, req)
|
resp, err := DoTries(&o, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return activityjson, errors.New("Connection error to " + uri)
|
//return activityjson, errors.New("Connection error to " + uri)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
body, err := ioutil.ReadAll(resp.Body)
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return activityjson, errors.New("Read error on " + uri)
|
//return activityjson, errors.New("Read error on " + uri)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
resp.Body.Close()
|
resp.Body.Close()
|
||||||
jsondocument = string(body)
|
jsondocument = string(body)
|
||||||
err = json.Unmarshal(body, &activityjson)
|
err = json.Unmarshal(body, &activityjson)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return activityjson, err
|
return
|
||||||
|
//return activityjson, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if activityjson.InReplyTo != "" && activityjson.InReplyTo != uri {
|
if activityjson.InReplyTo != "" && activityjson.InReplyTo != uri {
|
||||||
@ -135,13 +142,11 @@ func check_activity(uri string) (PostJson, error) {
|
|||||||
// If AttributedTo is blank, this is likely an authentication failure
|
// If AttributedTo is blank, this is likely an authentication failure
|
||||||
// For now, skip it...
|
// For now, skip it...
|
||||||
if activityjson.AttributedTo == "" {
|
if activityjson.AttributedTo == "" {
|
||||||
return activityjson, errors.New("Invalid AttributedTo value on " + uri)
|
//return activityjson, errors.New("Invalid AttributedTo value on " + uri)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = check_actor(activityjson.AttributedTo) // This must be done BEFORE the `INSERT INTO activities'` below
|
go check_actor(activityjson.AttributedTo) // This must be done BEFORE the `INSERT INTO activities'` below
|
||||||
if err != nil {
|
|
||||||
return activityjson, err
|
|
||||||
}
|
|
||||||
|
|
||||||
activityjson.normalized = removeHTMLReg.ReplaceAllString(activityjson.Content, " ")
|
activityjson.normalized = removeHTMLReg.ReplaceAllString(activityjson.Content, " ")
|
||||||
activityjson.normalized = html.UnescapeString(strings.ToLower(p.Sanitize(activityjson.normalized)))
|
activityjson.normalized = html.UnescapeString(strings.ToLower(p.Sanitize(activityjson.normalized)))
|
||||||
@ -151,7 +156,8 @@ func check_activity(uri string) (PostJson, error) {
|
|||||||
_, err = pool.Exec(context.Background(), "INSERT INTO activities (document, normalized, instance) VALUES($1, $2, $3)", jsondocument, activityjson.normalized, activityjson.instance)
|
_, err = pool.Exec(context.Background(), "INSERT INTO activities (document, normalized, instance) VALUES($1, $2, $3)", jsondocument, activityjson.normalized, activityjson.instance)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logWarn.Printf("Error inserting %s into `activities`: %s", uri, err)
|
logWarn.Printf("Error inserting %s into `activities`: %s", uri, err)
|
||||||
return activityjson, err
|
//return activityjson, err
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, to := range activityjson.To {
|
for _, to := range activityjson.To {
|
||||||
@ -164,19 +170,21 @@ func check_activity(uri string) (PostJson, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return activityjson, nil
|
//return activityjson, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func check_actor(uri string) (ActorJson, error) {
|
func check_actor(uri string) {
|
||||||
var actorjson ActorJson
|
var actorjson ActorJson
|
||||||
endslash := strings.Index(uri[8:], "/")
|
endslash := strings.Index(uri[8:], "/")
|
||||||
if endslash == -1 {
|
if endslash == -1 {
|
||||||
return actorjson, errors.New("Invalid user: " + uri)
|
// return actorjson, errors.New("Invalid user: " + uri)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
actorjson.instance = uri[8 : endslash+8]
|
actorjson.instance = uri[8 : endslash+8]
|
||||||
for _, banned := range settings.Banned {
|
for _, banned := range settings.Banned {
|
||||||
if strings.Index(uri, "https://"+banned+"/") == 0 {
|
if strings.Index(uri, "https://"+banned+"/") == 0 {
|
||||||
return actorjson, errors.New("Banned instance")
|
// return actorjson, errors.New("Banned instance")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,7 +193,8 @@ func check_actor(uri string) (ActorJson, error) {
|
|||||||
o.recentactors.mu.Lock()
|
o.recentactors.mu.Lock()
|
||||||
if o.recentactors.Add(uri) == true {
|
if o.recentactors.Add(uri) == true {
|
||||||
o.recentactors.mu.Unlock()
|
o.recentactors.mu.Unlock()
|
||||||
return actorjson, errors.New("Recently requested actor within local cache")
|
return
|
||||||
|
// return actorjson, errors.New("Recently requested actor within local cache")
|
||||||
}
|
}
|
||||||
o.recentactors.mu.Unlock()
|
o.recentactors.mu.Unlock()
|
||||||
|
|
||||||
@ -194,7 +203,8 @@ func check_actor(uri string) (ActorJson, error) {
|
|||||||
err := selectRet.Scan(&actorjson.id, &jsonmap, &actorjson.instance)
|
err := selectRet.Scan(&actorjson.id, &jsonmap, &actorjson.instance)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
///////// BETTER RETURN VALUES ////////
|
///////// BETTER RETURN VALUES ////////
|
||||||
return actorjson, nil
|
// return actorjson, nil
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
req, _ := http.NewRequest("GET", uri, nil)
|
req, _ := http.NewRequest("GET", uri, nil)
|
||||||
@ -208,7 +218,8 @@ func check_actor(uri string) (ActorJson, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
if tries > 10 {
|
if tries > 10 {
|
||||||
logErr.Print("Unable to connect to "+uri+" attempt 10/10, giving up.")
|
logErr.Print("Unable to connect to "+uri+" attempt 10/10, giving up.")
|
||||||
return actorjson, err
|
// return actorjson, err
|
||||||
|
return
|
||||||
}
|
}
|
||||||
logWarn.Print("Unable to connect to "+uri+", attempt ",tries+1,"+/10 sleeping for 30 seconds.")
|
logWarn.Print("Unable to connect to "+uri+", attempt ",tries+1,"+/10 sleeping for 30 seconds.")
|
||||||
time.Sleep(time.Second * 30)
|
time.Sleep(time.Second * 30)
|
||||||
@ -220,7 +231,8 @@ func check_actor(uri string) (ActorJson, error) {
|
|||||||
|
|
||||||
body, err := ioutil.ReadAll(resp.Body)
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return actorjson, errors.New("Read error on " + uri)
|
// return actorjson, errors.New("Read error on " + uri)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
resp.Body.Close()
|
resp.Body.Close()
|
||||||
|
|
||||||
@ -228,14 +240,16 @@ func check_actor(uri string) (ActorJson, error) {
|
|||||||
|
|
||||||
err = json.Unmarshal(body, &actorjson)
|
err = json.Unmarshal(body, &actorjson)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return actorjson, err
|
// return actorjson, err
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = pool.Exec(context.Background(), "INSERT INTO actors (document, instance) VALUES($1, $2)", jsondocument, actorjson.instance)
|
_, err = pool.Exec(context.Background(), "INSERT INTO actors (document, instance) VALUES($1, $2)", jsondocument, actorjson.instance)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logWarn.Printf("Error inserting %s into `actors`: %s", uri, err)
|
logWarn.Printf("Error inserting %s into `actors`: %s", uri, err)
|
||||||
return actorjson, err
|
// return actorjson, err
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
return actorjson, nil
|
// return actorjson, nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user