2020-02-04 20:25:57 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
"net/http"
|
|
|
|
)
|
|
|
|
|
|
|
|
type RemoteActor struct {
|
|
|
|
iri, inbox, sharedInbox string
|
|
|
|
info map[string]interface{}
|
|
|
|
}
|
|
|
|
|
|
|
|
func NewRemoteActor(iri string) (RemoteActor, error) {
|
|
|
|
info, err := get(iri)
|
|
|
|
if err != nil {
|
|
|
|
return RemoteActor{}, err
|
|
|
|
}
|
|
|
|
inbox := info["inbox"].(string)
|
|
|
|
var endpoints map[string]interface{}
|
|
|
|
var sharedInbox string
|
|
|
|
if info["endpoints"] != nil {
|
|
|
|
endpoints = info["endpoints"].(map[string]interface{})
|
|
|
|
if val, ok := endpoints["sharedInbox"]; ok {
|
|
|
|
sharedInbox = val.(string)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return RemoteActor{
|
|
|
|
iri: iri,
|
|
|
|
inbox: inbox,
|
|
|
|
sharedInbox: sharedInbox,
|
|
|
|
}, err
|
|
|
|
}
|
|
|
|
|
|
|
|
func get(iri string) (info map[string]interface{}, err error) {
|
|
|
|
buf := new(bytes.Buffer)
|
|
|
|
req, err := http.NewRequest("GET", iri, buf)
|
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
req.Header.Add("Accept", ContentTypeAs2)
|
|
|
|
req.Header.Add("User-Agent", fmt.Sprintf("%s %s", libName, version))
|
|
|
|
req.Header.Add("Accept-Charset", "utf-8")
|
2020-02-07 09:24:19 +00:00
|
|
|
resp, err := http.DefaultClient.Do(req)
|
2020-02-04 20:25:57 +00:00
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
if !isSuccess(resp.StatusCode) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
var e interface{}
|
2020-03-26 18:04:05 +00:00
|
|
|
err = json.NewDecoder(resp.Body).Decode(&e)
|
2020-02-04 20:25:57 +00:00
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
info = e.(map[string]interface{})
|
|
|
|
return
|
|
|
|
}
|