84 lines
2.6 KiB
Go
84 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"crypto/rsa"
|
|
"fmt"
|
|
"net/http"
|
|
"net/url"
|
|
"time"
|
|
|
|
"github.com/RichardKnop/machinery/v1"
|
|
"github.com/RichardKnop/machinery/v1/config"
|
|
"github.com/go-redis/redis"
|
|
cache "github.com/patrickmn/go-cache"
|
|
"github.com/spf13/viper"
|
|
activitypub "github.com/yukimochi/Activity-Relay/ActivityPub"
|
|
keyloader "github.com/yukimochi/Activity-Relay/KeyLoader"
|
|
state "github.com/yukimochi/Activity-Relay/State"
|
|
)
|
|
|
|
// Actor : Relay's Actor
|
|
var Actor activitypub.Actor
|
|
|
|
// WebfingerResource : Relay's Webfinger resource
|
|
var WebfingerResource activitypub.WebfingerResource
|
|
|
|
var hostURL *url.URL
|
|
var hostPrivatekey *rsa.PrivateKey
|
|
var actorCache *cache.Cache
|
|
var machineryServer *machinery.Server
|
|
var relayState state.RelayState
|
|
var uaString string
|
|
|
|
func initConfig() {
|
|
viper.BindEnv("actor_pem")
|
|
viper.BindEnv("relay_domain")
|
|
viper.BindEnv("relay_bind")
|
|
viper.BindEnv("redis_url")
|
|
hostURL, _ = url.Parse("https://" + viper.GetString("relay_domain"))
|
|
hostPrivatekey, _ = keyloader.ReadPrivateKeyRSAfromPath(viper.GetString("actor_pem"))
|
|
redisClient := redis.NewClient(&redis.Options{
|
|
Addr: viper.GetString("redis_url"),
|
|
})
|
|
machineryConfig := &config.Config{
|
|
Broker: "redis://" + viper.GetString("redis_url"),
|
|
DefaultQueue: "relay",
|
|
ResultBackend: "redis://" + viper.GetString("redis_url"),
|
|
ResultsExpireIn: 5,
|
|
}
|
|
machineryServer, _ = machinery.NewServer(machineryConfig)
|
|
uaString = viper.GetString("relay_servicename") + " (golang net/http; Activity-Relay v0.2.0; " + hostURL.Host + ")"
|
|
relayState = state.NewState(redisClient)
|
|
actorCache = cache.New(5*time.Minute, 10*time.Minute)
|
|
Actor.GenerateSelfKey(hostURL, &hostPrivatekey.PublicKey)
|
|
WebfingerResource.GenerateFromActor(hostURL, &Actor)
|
|
|
|
fmt.Println("Welcome to YUKIMOCHI Activity-Relay [Server]\n - Configrations")
|
|
fmt.Println("RELAY DOMAIN : ", hostURL.Host)
|
|
fmt.Println("REDIS URL : ", viper.GetString("redis_url"))
|
|
fmt.Println("BIND ADDRESS : ", viper.GetString("relay_bind"))
|
|
fmt.Println(" - Blocked Domain")
|
|
domains, _ := redisClient.HKeys("relay:config:blockedDomain").Result()
|
|
for _, domain := range domains {
|
|
fmt.Println(domain)
|
|
}
|
|
fmt.Println(" - Limited Domain")
|
|
domains, _ = redisClient.HKeys("relay:config:limitedDomain").Result()
|
|
for _, domain := range domains {
|
|
fmt.Println(domain)
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
// Load Config
|
|
initConfig()
|
|
|
|
http.HandleFunc("/.well-known/webfinger", handleWebfinger)
|
|
http.HandleFunc("/actor", handleActor)
|
|
http.HandleFunc("/inbox", func(w http.ResponseWriter, r *http.Request) {
|
|
handleInbox(w, r, decodeActivity)
|
|
})
|
|
|
|
http.ListenAndServe(viper.GetString("relay_bind"), nil)
|
|
}
|