formatting and linting
This commit is contained in:
parent
8d56747f1c
commit
726ac7e0bd
65
config.go
65
config.go
@ -1,56 +1,61 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io/ioutil"
|
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"muzzammil.xyz/jsonc"
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
|
"muzzammil.xyz/jsonc"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Database - Database configuration used by config.go
|
||||||
type Database struct {
|
type Database struct {
|
||||||
Host string `"json:host"`
|
Host string `"json:host"`
|
||||||
Port int `"json:port"`
|
Port int `"json:port"`
|
||||||
Username string `"json:username"`
|
Username string `"json:username"`
|
||||||
Password string `"json:password"`
|
Password string `"json:password"`
|
||||||
Workers int `"json:workers"`
|
Workers int `"json:workers"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MassFollower - Mass follower configuration used by config.go
|
||||||
type MassFollower struct {
|
type MassFollower struct {
|
||||||
Acct string `"json:acct"`
|
Acct string `"json:acct"`
|
||||||
Name string `"json:name"`
|
Name string `"json:name"`
|
||||||
Summary string `"json:summary"`
|
Summary string `"json:summary"`
|
||||||
FollowingCount int `"json:followingcount"`
|
FollowingCount int `"json:followingcount"`
|
||||||
FollowLimit int `"json:followlimit"`
|
FollowLimit int `"json:followlimit"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ExtAccount - External account configuration used by config.go
|
||||||
type ExtAccount struct {
|
type ExtAccount struct {
|
||||||
Username string `"json:username"`
|
Username string `"json:username"`
|
||||||
Password string `"json:password"`
|
Password string `"json:password"`
|
||||||
Endpoint string `"json:endpoint"`
|
Endpoint string `"json:endpoint"`
|
||||||
Followlimit int `"json:followlimit"`
|
Followlimit int `"json:followlimit"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Proxy - Configuration file proxy settings
|
||||||
type Proxy struct {
|
type Proxy struct {
|
||||||
Host string `"json:host"`
|
Host string `"json:host"`
|
||||||
Port int `"json:port"`
|
Port int `"json:port"`
|
||||||
Username string `"json:username'`
|
Username string `"json:username'`
|
||||||
Password string `"json:password"`
|
Password string `"json:password"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Settings - Configuration file structure
|
||||||
type Settings struct {
|
type Settings struct {
|
||||||
Autostart []string `"json:autostart"`
|
Autostart []string `"json:autostart"`
|
||||||
Crawl bool `"json:crawl"`
|
Crawl bool `"json:crawl"`
|
||||||
Banned []string `"json:banned"`
|
Banned []string `"json:banned"`
|
||||||
Alwaysbot []string `"json:alwaysbot"`
|
Alwaysbot []string `"json:alwaysbot"`
|
||||||
Proxies []Proxy `"json:proxies"`
|
Proxies []Proxy `"json:proxies"`
|
||||||
Externalaccounts []ExtAccount `"json:externalaccounts"`
|
Externalaccounts []ExtAccount `"json:externalaccounts"`
|
||||||
MassFollowers []MassFollower `"json:massfollowers"`
|
MassFollowers []MassFollower `"json:massfollowers"`
|
||||||
Database Database `"json:database"`
|
Database Database `"json:database"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var settings Settings
|
var settings Settings
|
||||||
|
|
||||||
func StringExists(needle string, haystack []string) (bool) {
|
func stringexists(needle string, haystack []string) bool {
|
||||||
for _, check := range haystack {
|
for _, check := range haystack {
|
||||||
if check == needle {
|
if check == needle {
|
||||||
return true
|
return true
|
||||||
@ -61,7 +66,7 @@ func StringExists(needle string, haystack []string) (bool) {
|
|||||||
|
|
||||||
func getSettings() {
|
func getSettings() {
|
||||||
c, err := ioutil.ReadFile("config.jsonc")
|
c, err := ioutil.ReadFile("config.jsonc")
|
||||||
if (err != nil) {
|
if err != nil {
|
||||||
log.Fatal("Unable to open config.jsonc, exiting: ", err)
|
log.Fatal("Unable to open config.jsonc, exiting: ", err)
|
||||||
}
|
}
|
||||||
jsoncbin := jsonc.ToJSON(c) // Calling jsonc.ToJSON() to convert JSONC to JSON
|
jsoncbin := jsonc.ToJSON(c) // Calling jsonc.ToJSON() to convert JSONC to JSON
|
||||||
|
7
ctl.go
7
ctl.go
@ -4,9 +4,9 @@ import (
|
|||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
|
||||||
"log"
|
|
||||||
"io"
|
"io"
|
||||||
|
"log"
|
||||||
|
"net"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ func startctl(reportPostChan chan ReportPost) {
|
|||||||
}(l)
|
}(l)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
c := <-commandClient // New client connection
|
c := <-commandClient // New client connection
|
||||||
go handleClient(c, reportPostChan)
|
go handleClient(c, reportPostChan)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +90,6 @@ func handleClient(commandClient net.Conn, reportPostChan chan ReportPost) {
|
|||||||
fmt.Println("Something else")
|
fmt.Println("Something else")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
responseback.Type = "status"
|
responseback.Type = "status"
|
||||||
responseback.RunningInstances = runninginstances
|
responseback.RunningInstances = runninginstances
|
||||||
|
|
||||||
|
10
db.go
10
db.go
@ -1,10 +1,10 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/jackc/pgx/pgxpool"
|
|
||||||
"context"
|
"context"
|
||||||
"log"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/jackc/pgx/pgxpool"
|
||||||
|
"log"
|
||||||
)
|
)
|
||||||
|
|
||||||
func postHandler(reportPostChan chan ReportPost, pool *pgxpool.Pool) {
|
func postHandler(reportPostChan chan ReportPost, pool *pgxpool.Pool) {
|
||||||
@ -57,10 +57,10 @@ func writePost(pool *pgxpool.Pool, reportpost ReportPost) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func get_db_pool() (*pgxpool.Pool) {
|
func getDbPool() *pgxpool.Pool {
|
||||||
// Setup Database
|
// Setup Database
|
||||||
db_uri := fmt.Sprintf("postgres://%s:%s@%s:%d/fedilogue", settings.Database.Username, settings.Database.Password, settings.Database.Host, settings.Database.Port)
|
dbURI := fmt.Sprintf("postgres://%s:%s@%s:%d/fedilogue", settings.Database.Username, settings.Database.Password, settings.Database.Host, settings.Database.Port)
|
||||||
pool, err := pgxpool.Connect(context.Background(), db_uri)
|
pool, err := pgxpool.Connect(context.Background(), dbURI)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Unable to connect to database:", err)
|
log.Fatal("Unable to connect to database:", err)
|
||||||
}
|
}
|
||||||
|
@ -5,9 +5,9 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
"io"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
12
fedilogue.go
12
fedilogue.go
@ -1,13 +1,13 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "net/http/pprof"
|
|
||||||
"net/http"
|
|
||||||
"sync"
|
|
||||||
"regexp"
|
|
||||||
"log"
|
|
||||||
"github.com/microcosm-cc/bluemonday"
|
"github.com/microcosm-cc/bluemonday"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
_ "net/http/pprof"
|
||||||
|
"regexp"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Current instances
|
// Current instances
|
||||||
@ -27,7 +27,7 @@ func main() {
|
|||||||
getSettings()
|
getSettings()
|
||||||
go startpprof()
|
go startpprof()
|
||||||
|
|
||||||
pool := get_db_pool()
|
pool := getDbPool()
|
||||||
|
|
||||||
for i := 0; i < settings.Database.Workers; i++ {
|
for i := 0; i < settings.Database.Workers; i++ {
|
||||||
go postHandler(reportPostChan, pool)
|
go postHandler(reportPostChan, pool)
|
||||||
|
109
headers.go
109
headers.go
@ -5,89 +5,88 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
NEW_INSTANCE = 0
|
NEW_INSTANCE = 0
|
||||||
RUNNING = 200
|
RUNNING = 200
|
||||||
UNAUTHORIZED = 401
|
UNAUTHORIZED = 401
|
||||||
FORBIDDEN = 403
|
FORBIDDEN = 403
|
||||||
NOT_FOUND = 404
|
NOT_FOUND = 404
|
||||||
UNPROCESSABLE_ENTITY = 422
|
UNPROCESSABLE_ENTITY = 422
|
||||||
TOOMANYREQUESTS = 429
|
TOOMANYREQUESTS = 429
|
||||||
INTERNAL_ERROR = 500
|
INTERNAL_ERROR = 500
|
||||||
CLIENT_ISSUE = 600
|
CLIENT_ISSUE = 600
|
||||||
ONION_PROTOCOL = 601
|
ONION_PROTOCOL = 601
|
||||||
BAD_RESPONSE = 602
|
BAD_RESPONSE = 602
|
||||||
BAD_NODEINFO = 604
|
BAD_NODEINFO = 604
|
||||||
UNSUPPORTED_INSTANCE = 605
|
UNSUPPORTED_INSTANCE = 605
|
||||||
STREAM_ENDED = 606
|
STREAM_ENDED = 606
|
||||||
KEEPALIVE = 607
|
KEEPALIVE = 607
|
||||||
)
|
)
|
||||||
|
|
||||||
// Parsing Unmarshal JSON type
|
// Parsing Unmarshal JSON type
|
||||||
type ReportPost struct {
|
type ReportPost struct {
|
||||||
|
|
||||||
// Retrieved values
|
// Retrieved values
|
||||||
Id string `json:"id"`
|
Id string `json:"id"`
|
||||||
Uri string `json:"uri"`
|
Uri string `json:"uri"`
|
||||||
Account AccountType
|
Account AccountType
|
||||||
Content string `json:"content"`
|
Content string `json:"content"`
|
||||||
Created_at string `json:"created_at"`
|
Created_at string `json:"created_at"`
|
||||||
|
|
||||||
// Derived values
|
// Derived values
|
||||||
normalized string
|
normalized string
|
||||||
posthash []byte
|
posthash []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
type AccountType struct {
|
type AccountType struct {
|
||||||
Acct string `json:"acct"`
|
Acct string `json:"acct"`
|
||||||
Avatar string `json:"avatar"`
|
Avatar string `json:"avatar"`
|
||||||
Bot bool `json:"bot"`
|
Bot bool `json:"bot"`
|
||||||
Created_at string `json:"created_at"`
|
Created_at string `json:"created_at"`
|
||||||
Display_name string `json:"display_name"`
|
Display_name string `json:"display_name"`
|
||||||
Url string `json:"url"`
|
Url string `json:"url"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Instance's new min_id value
|
// Instance's new min_id value
|
||||||
type RunningInstance struct {
|
type RunningInstance struct {
|
||||||
Software string `json:"software"`
|
Software string `json:"software"`
|
||||||
Status int `json:"status"`
|
Status int `json:"status"`
|
||||||
LastRun string `json:"lastrun"`
|
LastRun string `json:"lastrun"`
|
||||||
CaptureType string `json:"capturetype"`
|
CaptureType string `json:"capturetype"`
|
||||||
client http.Client
|
client http.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
type NodeInfoSoftware struct {
|
type NodeInfoSoftware struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Version string `json:"version"`
|
Version string `json:"version"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type NodeInfo struct {
|
type NodeInfo struct {
|
||||||
Software NodeInfoSoftware `json:"software"`
|
Software NodeInfoSoftware `json:"software"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type CommandMap struct {
|
type CommandMap struct {
|
||||||
Type string `json:"Type"`
|
Type string `json:"Type"`
|
||||||
Endpoint string `json:"Endpoint"`
|
Endpoint string `json:"Endpoint"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ResponseBack struct {
|
type ResponseBack struct {
|
||||||
Type string `json:"Type"`
|
Type string `json:"Type"`
|
||||||
Message string `json:"Message"`
|
Message string `json:"Message"`
|
||||||
RunningInstances map[string]RunningInstance `json:"RunningInstances"`
|
RunningInstances map[string]RunningInstance `json:"RunningInstances"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Userinfo struct {
|
type Userinfo struct {
|
||||||
Id string `"json:id"`
|
Id string `"json:id"`
|
||||||
Type string `"json:type"`
|
Type string `"json:type"`
|
||||||
Following string `"json:following"`
|
Following string `"json:following"`
|
||||||
Followers string `"json:followers"`
|
Followers string `"json:followers"`
|
||||||
Inbox string `"json:inbox"`
|
Inbox string `"json:inbox"`
|
||||||
Outbox string `"json:outbox"`
|
Outbox string `"json:outbox"`
|
||||||
Featured string `"json:featured"`
|
Featured string `"json:featured"`
|
||||||
PreferredUsername string `"json:preferredUsername"`
|
PreferredUsername string `"json:preferredUsername"`
|
||||||
Name string `"json:name"`
|
Name string `"json:name"`
|
||||||
Summary string `"json:summary"`
|
Summary string `"json:summary"`
|
||||||
Url string `"json:Url"`
|
Url string `"json:Url"`
|
||||||
ManuallyApprovesFollowers string `"json:manuallyApprovesFollowers"`
|
ManuallyApprovesFollowers string `"json:manuallyApprovesFollowers"`
|
||||||
Discoverable string `"json:discoverable"`
|
Discoverable string `"json:discoverable"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
12
instance.go
12
instance.go
@ -1,14 +1,14 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/microcosm-cc/bluemonday"
|
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"github.com/microcosm-cc/bluemonday"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
|
||||||
"strings"
|
|
||||||
"regexp"
|
|
||||||
"time"
|
|
||||||
"log"
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var p *bluemonday.Policy
|
var p *bluemonday.Policy
|
||||||
@ -19,7 +19,7 @@ func GetNodeInfo(endpoint string) (http.Client, NodeInfo) {
|
|||||||
/* Checking order
|
/* Checking order
|
||||||
* Mastodon/Pleroma
|
* Mastodon/Pleroma
|
||||||
* Um..nothing else yet
|
* Um..nothing else yet
|
||||||
*/
|
*/
|
||||||
pleromastodon_nodeinfo_uri := "https://" + endpoint + "/nodeinfo/2.0.json"
|
pleromastodon_nodeinfo_uri := "https://" + endpoint + "/nodeinfo/2.0.json"
|
||||||
http_client := http.Client{}
|
http_client := http.Client{}
|
||||||
pleromastodon_api_resp, err := http_client.Get(pleromastodon_nodeinfo_uri)
|
pleromastodon_api_resp, err := http_client.Get(pleromastodon_nodeinfo_uri)
|
||||||
|
58
oauth.go
58
oauth.go
@ -1,25 +1,25 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
|
||||||
"encoding/json"
|
|
||||||
"bytes"
|
|
||||||
"bufio"
|
"bufio"
|
||||||
"log"
|
"bytes"
|
||||||
"io/ioutil"
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
type OAuth struct {
|
type OAuth struct {
|
||||||
Access_token string `"json:access_token"`
|
Access_token string `"json:access_token"`
|
||||||
Created_at int `"json:created_at"`
|
Created_at int `"json:created_at"`
|
||||||
Expires_in int64 `"json:Expires_in"`
|
Expires_in int64 `"json:Expires_in"`
|
||||||
Refresh_token string `"json:refresh_token"`
|
Refresh_token string `"json:refresh_token"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type authError struct {
|
type authError struct {
|
||||||
msg string
|
msg string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *authError) Error() string {
|
func (e *authError) Error() string {
|
||||||
@ -38,7 +38,7 @@ func register_client(endpoint string, http_client *http.Client) (string, string,
|
|||||||
|
|
||||||
resp, err := http_client.Post(api_base_apps, "application/json", requestBodybytes)
|
resp, err := http_client.Post(api_base_apps, "application/json", requestBodybytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Unable to connect to " + api_base_apps + " ", err)
|
log.Fatal("Unable to connect to "+api_base_apps+" ", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
body, err := ioutil.ReadAll(resp.Body)
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
@ -59,17 +59,17 @@ func register_client(endpoint string, http_client *http.Client) (string, string,
|
|||||||
|
|
||||||
f, err := os.Create("clients/" + endpoint)
|
f, err := os.Create("clients/" + endpoint)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print("Unable to create " + client_file + ": ", err)
|
log.Print("Unable to create "+client_file+": ", err)
|
||||||
return bodymap["client_id"], bodymap["client_secret"], nil
|
return bodymap["client_id"], bodymap["client_secret"], nil
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
_, err = io.WriteString(f, bodymap["client_id"] + "\n")
|
_, err = io.WriteString(f, bodymap["client_id"]+"\n")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print("Unable to write client_id line: ", err)
|
log.Print("Unable to write client_id line: ", err)
|
||||||
return bodymap["client_id"], bodymap["client_secret"], nil
|
return bodymap["client_id"], bodymap["client_secret"], nil
|
||||||
}
|
}
|
||||||
_, err = io.WriteString(f, bodymap["client_secret"] + "\n")
|
_, err = io.WriteString(f, bodymap["client_secret"]+"\n")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print("Unable to write client_secret line: ", err)
|
log.Print("Unable to write client_secret line: ", err)
|
||||||
return bodymap["client_id"], bodymap["client_secret"], nil
|
return bodymap["client_id"], bodymap["client_secret"], nil
|
||||||
@ -110,13 +110,13 @@ func get_client(endpoint string, http_client *http.Client) (string, string, erro
|
|||||||
|
|
||||||
func oauth_login(endpoint string, username string, password string, client_id string, client_secret string) (OAuth, error) {
|
func oauth_login(endpoint string, username string, password string, client_id string, client_secret string) (OAuth, error) {
|
||||||
authMap, err := json.Marshal(map[string]string{
|
authMap, err := json.Marshal(map[string]string{
|
||||||
"username": username,
|
"username": username,
|
||||||
"password": password,
|
"password": password,
|
||||||
"redirect_uri": "urn:ietf:wg:oauth:2.0:oob",
|
"redirect_uri": "urn:ietf:wg:oauth:2.0:oob",
|
||||||
"grant_type": "password",
|
"grant_type": "password",
|
||||||
"client_name": "Tusky",
|
"client_name": "Tusky",
|
||||||
"scope": "read write follow push",
|
"scope": "read write follow push",
|
||||||
"client_id": client_id,
|
"client_id": client_id,
|
||||||
"client_secret": client_secret,
|
"client_secret": client_secret,
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -127,9 +127,9 @@ func oauth_login(endpoint string, username string, password string, client_id st
|
|||||||
|
|
||||||
authMapbytes := bytes.NewBuffer(authMap)
|
authMapbytes := bytes.NewBuffer(authMap)
|
||||||
|
|
||||||
resp, err := http.Post("https://" + endpoint + "/oauth/token", "application/json", authMapbytes)
|
resp, err := http.Post("https://"+endpoint+"/oauth/token", "application/json", authMapbytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print("Cannot connect to " + endpoint + ": ", err)
|
log.Print("Cannot connect to "+endpoint+": ", err)
|
||||||
return OAuth{}, err
|
return OAuth{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,19 +157,19 @@ func oauth_login(endpoint string, username string, password string, client_id st
|
|||||||
|
|
||||||
func oauth_refresh(endpoint string, client_id string, client_secret string, refresh_token string) (OAuth, error) {
|
func oauth_refresh(endpoint string, client_id string, client_secret string, refresh_token string) (OAuth, error) {
|
||||||
authMap, err := json.Marshal(map[string]string{
|
authMap, err := json.Marshal(map[string]string{
|
||||||
"redirect_uri": "urn:ietf:wg:oauth:2.0:oob",
|
"redirect_uri": "urn:ietf:wg:oauth:2.0:oob",
|
||||||
"grant_type": "refresh_token",
|
"grant_type": "refresh_token",
|
||||||
"scope": "read write follow push",
|
"scope": "read write follow push",
|
||||||
"refresh_token": refresh_token,
|
"refresh_token": refresh_token,
|
||||||
"client_id": client_id,
|
"client_id": client_id,
|
||||||
"client_secret": client_secret,
|
"client_secret": client_secret,
|
||||||
})
|
})
|
||||||
|
|
||||||
authMapbytes := bytes.NewBuffer(authMap)
|
authMapbytes := bytes.NewBuffer(authMap)
|
||||||
|
|
||||||
resp, err := http.Post("https://" + endpoint + "/oauth/token", "application/json", authMapbytes)
|
resp, err := http.Post("https://"+endpoint+"/oauth/token", "application/json", authMapbytes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print("Cannot connect to " + endpoint + ": ", err)
|
log.Print("Cannot connect to "+endpoint+": ", err)
|
||||||
return OAuth{}, err
|
return OAuth{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
74
poll.go
74
poll.go
@ -1,59 +1,58 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"crypto/sha1"
|
"crypto/sha1"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"html"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"html"
|
|
||||||
"time"
|
"time"
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type ImageData struct {
|
type ImageData struct {
|
||||||
Type string `"json:type"`
|
Type string `"json:type"`
|
||||||
Url string `"json:url"`
|
Url string `"json:url"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type PublicKeyData struct {
|
type PublicKeyData struct {
|
||||||
Id string `"json:id"`
|
Id string `"json:id"`
|
||||||
Owner string `"json:owner"`
|
Owner string `"json:owner"`
|
||||||
PublicKeyPem string `"json:publicKeyPem"`
|
PublicKeyPem string `"json:publicKeyPem"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserInfo struct {
|
type UserInfo struct {
|
||||||
Id string `"json:id"`
|
Id string `"json:id"`
|
||||||
Type string `"json:type"`
|
Type string `"json:type"`
|
||||||
Following string `"json:following"`
|
Following string `"json:following"`
|
||||||
Followers string `"json:followers"`
|
Followers string `"json:followers"`
|
||||||
Inbox string `"json:inbox"`
|
Inbox string `"json:inbox"`
|
||||||
Outbox string `"json:outbox"`
|
Outbox string `"json:outbox"`
|
||||||
Featured string `"json:featured"`
|
Featured string `"json:featured"`
|
||||||
PreferredUsername string `"json:preferredUsername"`
|
PreferredUsername string `"json:preferredUsername"`
|
||||||
PublicKey PublicKeyData `"json:publicKeyPem"`
|
PublicKey PublicKeyData `"json:publicKeyPem"`
|
||||||
Name string `"json:name"`
|
Name string `"json:name"`
|
||||||
Summary string `"json:summary"`
|
Summary string `"json:summary"`
|
||||||
Url string `"json:Url"`
|
Url string `"json:Url"`
|
||||||
|
|
||||||
|
// ManuallyApprovesFollowers string `"json:manuallyApprovesFollowers"`
|
||||||
// ManuallyApprovesFollowers string `"json:manuallyApprovesFollowers"`
|
// Discoverable bool `"json:discoverable"`
|
||||||
// Discoverable bool `"json:discoverable"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type PostInfo struct {
|
type PostInfo struct {
|
||||||
Id string `"json:id"`
|
Id string `"json:id"`
|
||||||
Type string `"json:type"`
|
Type string `"json:type"`
|
||||||
Published string `"json:published"`
|
Published string `"json:published"`
|
||||||
Url string `"json:Url"`
|
Url string `"json:Url"`
|
||||||
Content string `"json:content"`
|
Content string `"json:content"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetch_user_info(http_client http.Client, uri string) (UserInfo, error) {
|
func fetch_user_info(http_client http.Client, uri string) (UserInfo, error) {
|
||||||
var userinfo UserInfo
|
var userinfo UserInfo
|
||||||
|
|
||||||
// http_client := http.Client{}
|
// http_client := http.Client{}
|
||||||
req, err := http.NewRequest(http.MethodGet, uri, nil)
|
req, err := http.NewRequest(http.MethodGet, uri, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return UserInfo{}, err
|
return UserInfo{}, err
|
||||||
@ -75,7 +74,6 @@ func fetch_user_info(http_client http.Client, uri string) (UserInfo, error) {
|
|||||||
return userinfo, nil
|
return userinfo, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func fetch_post(http_client http.Client, uri string) (PostInfo, error) {
|
func fetch_post(http_client http.Client, uri string) (PostInfo, error) {
|
||||||
var postinfo PostInfo
|
var postinfo PostInfo
|
||||||
|
|
||||||
@ -118,7 +116,7 @@ func PollMastodonPleroma(endpoint string, reportPostChan chan ReportPost, http_c
|
|||||||
for _, extaccount := range settings.Externalaccounts {
|
for _, extaccount := range settings.Externalaccounts {
|
||||||
if extaccount.Endpoint == endpoint {
|
if extaccount.Endpoint == endpoint {
|
||||||
use_auth = true
|
use_auth = true
|
||||||
client_id, client_secret, err = get_client(endpoint, &http_client);
|
client_id, client_secret, err = get_client(endpoint, &http_client)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Unable to register client: ", err)
|
log.Fatal("Unable to register client: ", err)
|
||||||
}
|
}
|
||||||
@ -146,7 +144,7 @@ func PollMastodonPleroma(endpoint string, reportPostChan chan ReportPost, http_c
|
|||||||
}
|
}
|
||||||
|
|
||||||
if use_auth == true {
|
if use_auth == true {
|
||||||
if time.Now().Unix() > last_refresh + oauthData.Expires_in {
|
if time.Now().Unix() > last_refresh+oauthData.Expires_in {
|
||||||
oauthData, err = oauth_refresh(endpoint, client_id, client_secret, oauthData.Refresh_token)
|
oauthData, err = oauth_refresh(endpoint, client_id, client_secret, oauthData.Refresh_token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print("Unable to refresh: ", err)
|
log.Print("Unable to refresh: ", err)
|
||||||
@ -169,7 +167,7 @@ func PollMastodonPleroma(endpoint string, reportPostChan chan ReportPost, http_c
|
|||||||
}
|
}
|
||||||
|
|
||||||
if resp.StatusCode == TOOMANYREQUESTS { // Short Delay, 30 seconds
|
if resp.StatusCode == TOOMANYREQUESTS { // Short Delay, 30 seconds
|
||||||
log.Print("Delaying " + endpoint + ", gave status ", resp.StatusCode, ", 1 hour delay")
|
log.Print("Delaying "+endpoint+", gave status ", resp.StatusCode, ", 1 hour delay")
|
||||||
_, _ = ioutil.ReadAll(resp.Body)
|
_, _ = ioutil.ReadAll(resp.Body)
|
||||||
resp.Body.Close() // Release as soon as done
|
resp.Body.Close() // Release as soon as done
|
||||||
m.Status = resp.StatusCode
|
m.Status = resp.StatusCode
|
||||||
@ -183,7 +181,7 @@ func PollMastodonPleroma(endpoint string, reportPostChan chan ReportPost, http_c
|
|||||||
time.Sleep(time.Second * 30)
|
time.Sleep(time.Second * 30)
|
||||||
continue
|
continue
|
||||||
} else if resp.StatusCode == INTERNAL_ERROR { // Longer delay, 1 hour
|
} else if resp.StatusCode == INTERNAL_ERROR { // Longer delay, 1 hour
|
||||||
log.Print("Suspending " + endpoint + ", gave status ", resp.StatusCode, ", 1 hour delay")
|
log.Print("Suspending "+endpoint+", gave status ", resp.StatusCode, ", 1 hour delay")
|
||||||
_, _ = ioutil.ReadAll(resp.Body)
|
_, _ = ioutil.ReadAll(resp.Body)
|
||||||
resp.Body.Close() // Release as soon as done
|
resp.Body.Close() // Release as soon as done
|
||||||
m.Status = 765
|
m.Status = 765
|
||||||
@ -193,7 +191,7 @@ func PollMastodonPleroma(endpoint string, reportPostChan chan ReportPost, http_c
|
|||||||
time.Sleep(time.Second * 3600)
|
time.Sleep(time.Second * 3600)
|
||||||
continue
|
continue
|
||||||
} else if resp.StatusCode != 200 { // Crash
|
} else if resp.StatusCode != 200 { // Crash
|
||||||
log.Print("Terminating " + endpoint + ", gave status ", resp.StatusCode)
|
log.Print("Terminating "+endpoint+", gave status ", resp.StatusCode)
|
||||||
_, _ = ioutil.ReadAll(resp.Body)
|
_, _ = ioutil.ReadAll(resp.Body)
|
||||||
resp.Body.Close() // Release as soon as done
|
resp.Body.Close() // Release as soon as done
|
||||||
m.Status = resp.StatusCode
|
m.Status = resp.StatusCode
|
||||||
@ -303,14 +301,14 @@ func PollMastodonPleroma(endpoint string, reportPostChan chan ReportPost, http_c
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Only done if we are crawling
|
// Only done if we are crawling
|
||||||
if settings.Crawl == true && StringExists(endpoint, settings.Banned) == false {
|
if settings.Crawl == true && stringexists(endpoint, settings.Banned) == false {
|
||||||
// Skip over this if its the same as the endpoint
|
// Skip over this if its the same as the endpoint
|
||||||
if newinstance == endpoint {
|
if newinstance == endpoint {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
ri_mutex.Lock()
|
ri_mutex.Lock()
|
||||||
o, exists := runninginstances[newinstance]
|
o, exists := runninginstances[newinstance]
|
||||||
if exists == false || o.Status == KEEPALIVE {
|
if exists == false || o.Status == KEEPALIVE {
|
||||||
m := RunningInstance{}
|
m := RunningInstance{}
|
||||||
runninginstances[newinstance] = m
|
runninginstances[newinstance] = m
|
||||||
go StartInstance(newinstance, reportPostChan)
|
go StartInstance(newinstance, reportPostChan)
|
||||||
|
37
stream.go
37
stream.go
@ -1,15 +1,15 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
|
||||||
"encoding/json"
|
|
||||||
"crypto/sha1"
|
|
||||||
"strings"
|
|
||||||
"bufio"
|
"bufio"
|
||||||
"time"
|
"crypto/sha1"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"html"
|
"html"
|
||||||
"log"
|
"log"
|
||||||
"fmt"
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func StreamMastodon(endpoint string, reportPostChan chan ReportPost) {
|
func StreamMastodon(endpoint string, reportPostChan chan ReportPost) {
|
||||||
@ -29,10 +29,10 @@ func StreamMastodon(endpoint string, reportPostChan chan ReportPost) {
|
|||||||
|
|
||||||
for _, extaccount := range settings.Externalaccounts {
|
for _, extaccount := range settings.Externalaccounts {
|
||||||
if extaccount.Endpoint == endpoint {
|
if extaccount.Endpoint == endpoint {
|
||||||
// use_auth = true
|
// use_auth = true
|
||||||
get_client(endpoint, &http_client)
|
get_client(endpoint, &http_client)
|
||||||
|
|
||||||
client_id, client_secret, err = get_client(endpoint, &http_client);
|
client_id, client_secret, err = get_client(endpoint, &http_client)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("Unable to register client: ", err)
|
log.Fatal("Unable to register client: ", err)
|
||||||
}
|
}
|
||||||
@ -43,10 +43,9 @@ func StreamMastodon(endpoint string, reportPostChan chan ReportPost) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
// This needs to updated with the time
|
// This needs to updated with the time
|
||||||
// last_refresh := time.Now().Unix()
|
// last_refresh := time.Now().Unix()
|
||||||
_ = time.Now().Unix()
|
_ = time.Now().Unix()
|
||||||
|
|
||||||
|
|
||||||
req.Header.Add("Authorization", oauthData.Access_token)
|
req.Header.Add("Authorization", oauthData.Access_token)
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -168,16 +167,16 @@ func StreamMastodon(endpoint string, reportPostChan chan ReportPost) {
|
|||||||
// Reporting post
|
// Reporting post
|
||||||
reportPostChan <- newpost
|
reportPostChan <- newpost
|
||||||
|
|
||||||
if settings.Crawl == true && StringExists(endpoint, settings.Banned) == false {
|
if settings.Crawl == true && stringexists(endpoint, settings.Banned) == false {
|
||||||
ri_mutex.Lock()
|
ri_mutex.Lock()
|
||||||
o, exists := runninginstances[newinstance]
|
o, exists := runninginstances[newinstance]
|
||||||
if exists == false || o.Status == KEEPALIVE {
|
if exists == false || o.Status == KEEPALIVE {
|
||||||
m := RunningInstance{}
|
m := RunningInstance{}
|
||||||
runninginstances[newinstance] = m
|
runninginstances[newinstance] = m
|
||||||
go StartInstance(newinstance, reportPostChan)
|
go StartInstance(newinstance, reportPostChan)
|
||||||
}
|
}
|
||||||
|
|
||||||
ri_mutex.Unlock()
|
ri_mutex.Unlock()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
77
web.go
77
web.go
@ -1,35 +1,37 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/sha1"
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"html"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"encoding/json"
|
|
||||||
"io/ioutil"
|
|
||||||
"html"
|
|
||||||
"time"
|
|
||||||
"strings"
|
|
||||||
"crypto/sha1"
|
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// CreateObject - Used by post web receiver
|
||||||
type CreateObject struct {
|
type CreateObject struct {
|
||||||
Actor string `json:"actor"`
|
Actor string `json:"actor"`
|
||||||
Cc []string `json:"cc"`
|
Cc []string `json:"cc"`
|
||||||
Content string `json:"content"`
|
Content string `json:"content"`
|
||||||
To []string `json:"to"`
|
To []string `json:"to"`
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateObject - Used by post web receiver
|
||||||
type FindType struct {
|
type FindType struct {
|
||||||
Actor string `json:"actor"`
|
Actor string `json:"actor"`
|
||||||
Cc []string `json:"cc"`
|
Cc []string `json:"cc"`
|
||||||
//Object interface{} `json:"Object"`
|
//Object interface{} `json:"Object"`
|
||||||
Object json.RawMessage `json:"Object"`
|
Object json.RawMessage `json:"Object"`
|
||||||
Id string `json:"id"`
|
ID string `json:"id"`
|
||||||
Published string `json:"published"`
|
Published string `json:"published"`
|
||||||
To []string `json:"to"`
|
To []string `json:"to"`
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func hostmeta(w http.ResponseWriter, r *http.Request) {
|
func hostmeta(w http.ResponseWriter, r *http.Request) {
|
||||||
@ -79,7 +81,7 @@ func webfinger(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
if exists {
|
if exists {
|
||||||
resource := resourceRaw[0]
|
resource := resourceRaw[0]
|
||||||
if resource != "acct:fedilogue@" + host {
|
if resource != "acct:fedilogue@"+host {
|
||||||
fmt.Println("Writes properly but wrong acct")
|
fmt.Println("Writes properly but wrong acct")
|
||||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||||
fmt.Fprintf(w, webfingerstr)
|
fmt.Fprintf(w, webfingerstr)
|
||||||
@ -98,7 +100,6 @@ func webfinger(w http.ResponseWriter, r *http.Request) {
|
|||||||
func inboxHandler(reportPostChan chan ReportPost) http.HandlerFunc {
|
func inboxHandler(reportPostChan chan ReportPost) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
|
|
||||||
fmt.Println("PATH --> ", r.URL.Path)
|
fmt.Println("PATH --> ", r.URL.Path)
|
||||||
|
|
||||||
body, err := ioutil.ReadAll(r.Body)
|
body, err := ioutil.ReadAll(r.Body)
|
||||||
@ -122,19 +123,19 @@ func inboxHandler(reportPostChan chan ReportPost) http.HandlerFunc {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
newpost.Uri = findtype.Id
|
newpost.Uri = findtype.ID
|
||||||
|
|
||||||
start_slashes := strings.Index(createobject.Actor, "//") + 2
|
startSlashes := strings.Index(createobject.Actor, "//") + 2
|
||||||
end_slashes := strings.Index(createobject.Actor[start_slashes:], "/")
|
endSlashes := strings.Index(createobject.Actor[startSlashes:], "/")
|
||||||
newinstance := createobject.Actor[start_slashes:start_slashes+end_slashes]
|
newinstance := createobject.Actor[startSlashes : startSlashes+endSlashes]
|
||||||
|
|
||||||
// For now we are just verifying the user
|
// For now we are just verifying the user
|
||||||
ri_mutex.Lock()
|
ri_mutex.Lock()
|
||||||
o, exist := runninginstances[newinstance]
|
o, exist := runninginstances[newinstance]
|
||||||
if exist == false {
|
if exist == false {
|
||||||
o := RunningInstance{}
|
o := RunningInstance{}
|
||||||
new_client := http.Client{}
|
newClient := http.Client{}
|
||||||
o.client = new_client
|
o.client = newClient
|
||||||
o.Status = KEEPALIVE
|
o.Status = KEEPALIVE
|
||||||
runninginstances[newinstance] = o
|
runninginstances[newinstance] = o
|
||||||
}
|
}
|
||||||
@ -176,12 +177,12 @@ func inboxHandler(reportPostChan chan ReportPost) http.HandlerFunc {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func users_fedilogue_followers(w http.ResponseWriter, r *http.Request) {
|
func usersFedilogueFollowers(w http.ResponseWriter, r *http.Request) {
|
||||||
fmt.Println("PATH --> ", r.URL.Path)
|
fmt.Println("PATH --> ", r.URL.Path)
|
||||||
host := r.Host
|
host := r.Host
|
||||||
contextlist := map[string]string {"@language":"und"}
|
contextlist := map[string]string{"@language": "und"}
|
||||||
|
|
||||||
context := []interface{} {"https://www.w3.org/ns/activitystreams", "https://" + host + "/schemas/litepub-0.1.jsonld", contextlist}
|
context := []interface{}{"https://www.w3.org/ns/activitystreams", "https://" + host + "/schemas/litepub-0.1.jsonld", contextlist}
|
||||||
followersmap := make(map[string]interface{})
|
followersmap := make(map[string]interface{})
|
||||||
followersmap["@context"] = context
|
followersmap["@context"] = context
|
||||||
|
|
||||||
@ -192,7 +193,7 @@ func users_fedilogue_followers(w http.ResponseWriter, r *http.Request) {
|
|||||||
fmt.Fprintf(w, staticjson)
|
fmt.Fprintf(w, staticjson)
|
||||||
}
|
}
|
||||||
|
|
||||||
func users_fedilogue_following(w http.ResponseWriter, r *http.Request) {
|
func usersFedilogueFollowing(w http.ResponseWriter, r *http.Request) {
|
||||||
host := r.Host
|
host := r.Host
|
||||||
fmt.Println("PATH --> ", r.URL.Path)
|
fmt.Println("PATH --> ", r.URL.Path)
|
||||||
staticjson := "{\"@context\": [\"https://www.w3.org/ns/activitystreams\", \"https://" + host + "/schemas/litepub-0.1.jsonld\", {\"@language\": \"und\"}], \"first\": {\"id\": \"https://" + host + "/users/fedilogue/following?page=1\", \"orderedItems\": [], \"partOf\": \"https://" + host + "/users/fedilogue/following\", \"totalItems\": 0, \"type\": \"OrderedCollectionPage\"}, \"id\": \"https://" + host + "/users/fedilogue/following\", \"totalItems\": 0, \"type\": \"OrderedCollection\"}"
|
staticjson := "{\"@context\": [\"https://www.w3.org/ns/activitystreams\", \"https://" + host + "/schemas/litepub-0.1.jsonld\", {\"@language\": \"und\"}], \"first\": {\"id\": \"https://" + host + "/users/fedilogue/following?page=1\", \"orderedItems\": [], \"partOf\": \"https://" + host + "/users/fedilogue/following\", \"totalItems\": 0, \"type\": \"OrderedCollectionPage\"}, \"id\": \"https://" + host + "/users/fedilogue/following\", \"totalItems\": 0, \"type\": \"OrderedCollection\"}"
|
||||||
@ -200,7 +201,7 @@ func users_fedilogue_following(w http.ResponseWriter, r *http.Request) {
|
|||||||
fmt.Fprintf(w, staticjson)
|
fmt.Fprintf(w, staticjson)
|
||||||
}
|
}
|
||||||
|
|
||||||
func users_fedilogue(w http.ResponseWriter, r *http.Request) {
|
func usersFedilogue(w http.ResponseWriter, r *http.Request) {
|
||||||
fmt.Println("PATH --> ", r.URL.Path)
|
fmt.Println("PATH --> ", r.URL.Path)
|
||||||
host := r.Host
|
host := r.Host
|
||||||
|
|
||||||
@ -215,15 +216,15 @@ func users_fedilogue(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
publickeypemstr := string(publickeybin)
|
publickeypemstr := string(publickeybin)
|
||||||
|
|
||||||
publicKey := map[string]string {"id":"https://" + host + "/users/fedilogue#main-key", "owner": "https://" + host + "/users/fedilogue", "publicKeyPem": publickeypemstr}
|
publicKey := map[string]string{"id": "https://" + host + "/users/fedilogue#main-key", "owner": "https://" + host + "/users/fedilogue", "publicKeyPem": publickeypemstr}
|
||||||
|
|
||||||
capabilities := map[string]bool{}
|
capabilities := map[string]bool{}
|
||||||
tag := []string{}
|
tag := []string{}
|
||||||
contextlist := map[string]string {"@language":"und"}
|
contextlist := map[string]string{"@language": "und"}
|
||||||
attachment := []string{}
|
attachment := []string{}
|
||||||
endpoints := map[string]string {"oauthAuthorizationEndpoint":"https://" + host+ "/oauth/authorize", "oauthRegistrationEndpoint": "https://" + host + "/api/v1/apps", "oauthTokenEndpoint": "https://" + host + "/oauth/token", "sharedInbox": "https://" + host + "/inbox", "uploadMedia": "https://" + host + "/api/ap/upload_media"}
|
endpoints := map[string]string{"oauthAuthorizationEndpoint": "https://" + host + "/oauth/authorize", "oauthRegistrationEndpoint": "https://" + host + "/api/v1/apps", "oauthTokenEndpoint": "https://" + host + "/oauth/token", "sharedInbox": "https://" + host + "/inbox", "uploadMedia": "https://" + host + "/api/ap/upload_media"}
|
||||||
|
|
||||||
context := []interface{} {"https://www.w3.org/ns/activitystreams", "https://" + host + "/schemas/litepub-0.1.jsonld", contextlist}
|
context := []interface{}{"https://www.w3.org/ns/activitystreams", "https://" + host + "/schemas/litepub-0.1.jsonld", contextlist}
|
||||||
userjsonmap := make(map[string]interface{})
|
userjsonmap := make(map[string]interface{})
|
||||||
userjsonmap["@context"] = context
|
userjsonmap["@context"] = context
|
||||||
userjsonmap["attachment"] = attachment
|
userjsonmap["attachment"] = attachment
|
||||||
@ -263,9 +264,9 @@ func webmain(reportPostChan chan ReportPost) {
|
|||||||
http.HandleFunc("/.well-known/webfinger", webfinger)
|
http.HandleFunc("/.well-known/webfinger", webfinger)
|
||||||
http.HandleFunc("/.well-known/host-meta", hostmeta)
|
http.HandleFunc("/.well-known/host-meta", hostmeta)
|
||||||
http.HandleFunc("/inbox", inboxHandler(reportPostChan))
|
http.HandleFunc("/inbox", inboxHandler(reportPostChan))
|
||||||
http.HandleFunc("/users/fedilogue", users_fedilogue)
|
http.HandleFunc("/users/fedilogue", usersFedilogue)
|
||||||
http.HandleFunc("/users/fedilogue/followers", users_fedilogue_followers)
|
http.HandleFunc("/users/fedilogue/followers", usersFedilogueFollowers)
|
||||||
http.HandleFunc("/users/fedilogue/following", users_fedilogue_following)
|
http.HandleFunc("/users/fedilogue/following", usersFedilogueFollowing)
|
||||||
http.HandleFunc("/", errorHandler)
|
http.HandleFunc("/", errorHandler)
|
||||||
log.Print("Starting HTTP inbox on port 8080")
|
log.Print("Starting HTTP inbox on port 8080")
|
||||||
log.Fatal(http.ListenAndServe(":8080", nil))
|
log.Fatal(http.ListenAndServe(":8080", nil))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user