152 lines
3.4 KiB
Go
152 lines
3.4 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
type FirefishShowResponse struct {
|
|
Id string `json:"id"`
|
|
Desc string `json:"description"`
|
|
}
|
|
|
|
type FirefishFollowersResponse struct {
|
|
ID string `json:"id"`
|
|
Followee FirefishMetaUser `json:"followee"`
|
|
}
|
|
|
|
type FirefishFolloweeResponse struct {
|
|
ID string `json:"id"`
|
|
Follower FirefishMetaUser `json:"follower"`
|
|
}
|
|
|
|
type FirefishMetaUser struct {
|
|
Username string `json:"username"`
|
|
Host string `json:"host"`
|
|
}
|
|
|
|
func FirefishShowUser(u User) FirefishShowResponse {
|
|
showuserjson := []byte(fmt.Sprintf(`{"username": "%s"}`, u.Name))
|
|
client := &http.Client{}
|
|
req, err := http.NewRequest("POST", "https://"+u.Instance+"/api/users/show", bytes.NewBuffer(showuserjson))
|
|
if err != nil {
|
|
fmt.Printf("error: %s\n", err)
|
|
return FirefishShowResponse{
|
|
Id: "",
|
|
}
|
|
}
|
|
req.Header.Add("Content-Type", "application/json")
|
|
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
fmt.Printf("error: %s\n", err)
|
|
return FirefishShowResponse{
|
|
Id: "",
|
|
}
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
jsonDecoder := json.NewDecoder(resp.Body)
|
|
var showuser FirefishShowResponse
|
|
err = jsonDecoder.Decode(&showuser)
|
|
if err != nil {
|
|
fmt.Printf("error: %s\n", err)
|
|
return FirefishShowResponse{
|
|
Id: "",
|
|
}
|
|
}
|
|
return showuser
|
|
}
|
|
|
|
func FirefishGetFollowing(u User) []User {
|
|
client := &http.Client{}
|
|
showuser := FirefishShowUser(u)
|
|
if !checkConsent(showuser.Desc) {
|
|
return nil
|
|
}
|
|
|
|
followersjson := []byte(fmt.Sprintf(`{"userId": "%s", "limit": %s}`, showuser.Id, "100"))
|
|
req, err := http.NewRequest("POST", "https://"+u.Instance+"/api/users/following", bytes.NewBuffer(followersjson))
|
|
if err != nil {
|
|
fmt.Printf("error: %s\n", err)
|
|
return nil
|
|
}
|
|
req.Header.Add("Content-Type", "application/json")
|
|
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
fmt.Printf("error: %s\n", err)
|
|
return nil
|
|
}
|
|
|
|
jsonDecoder := json.NewDecoder(resp.Body)
|
|
var followers []FirefishFollowersResponse
|
|
err = jsonDecoder.Decode(&followers)
|
|
if err != nil {
|
|
fmt.Printf("error: %s\n", err)
|
|
return nil
|
|
}
|
|
|
|
var followerlist []User
|
|
var tempuser User
|
|
for _, f := range followers {
|
|
var host string
|
|
if f.Followee.Host == "" {
|
|
host = u.Instance
|
|
} else {
|
|
host = f.Followee.Host
|
|
}
|
|
tempuser = MakeUser(f.Followee.Username + "@" + host)
|
|
followerlist = append(followerlist, tempuser)
|
|
}
|
|
return followerlist
|
|
}
|
|
|
|
func FirefishGetFollowers(u User) []User {
|
|
client := &http.Client{}
|
|
showuser := FirefishShowUser(u)
|
|
if !checkConsent(showuser.Desc) {
|
|
return nil
|
|
}
|
|
followersjson := []byte(fmt.Sprintf(`{"userId": "%s", "limit": %s}`, showuser.Id, "100"))
|
|
req, err := http.NewRequest("POST", "https://"+u.Instance+"/api/users/followers", bytes.NewBuffer(followersjson))
|
|
if err != nil {
|
|
fmt.Printf("error: %s\n", err)
|
|
return nil
|
|
}
|
|
req.Header.Add("Content-Type", "application/json")
|
|
|
|
resp, err := client.Do(req)
|
|
if err != nil {
|
|
fmt.Printf("error: %s\n", err)
|
|
return nil
|
|
}
|
|
|
|
jsonDecoder := json.NewDecoder(resp.Body)
|
|
var followers []FirefishFolloweeResponse
|
|
err = jsonDecoder.Decode(&followers)
|
|
if err != nil {
|
|
fmt.Printf("error: %s\n", err)
|
|
return nil
|
|
}
|
|
|
|
var followerlist []User
|
|
var tempuser User
|
|
for _, f := range followers {
|
|
var host string
|
|
if f.Follower.Host == "" {
|
|
host = u.Instance
|
|
} else {
|
|
host = f.Follower.Host
|
|
}
|
|
if f.Follower.Username == "" {
|
|
continue
|
|
}
|
|
tempuser = MakeUser(f.Follower.Username + "@" + host)
|
|
followerlist = append(followerlist, tempuser)
|
|
}
|
|
return followerlist
|
|
}
|