From 54e6a110106ca6ac0e868f16a204626ebadcba0c Mon Sep 17 00:00:00 2001
From: Naoki Kosaka <n.k@mail.yukimochi.net>
Date: Wed, 7 Nov 2018 10:39:17 +0900
Subject: [PATCH] Support config mechanism, service block feature.

---
 handle.go |  3 +++
 main.go   | 20 ++++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/handle.go b/handle.go
index 699abb5..f69252b 100644
--- a/handle.go
+++ b/handle.go
@@ -152,6 +152,9 @@ func suitableRelay(activity *activitypub.Activity, actor *activitypub.Actor) boo
 	if receivers != 0 {
 		return false
 	}
+	if relConfig.blockService && actor.Type == "Service" {
+		return false
+	}
 	return true
 }
 
diff --git a/main.go b/main.go
index 751642d..648ffbb 100644
--- a/main.go
+++ b/main.go
@@ -25,6 +25,23 @@ var Actor activitypub.Actor
 // WebfingerResource : Relay's Webfinger resource
 var WebfingerResource activitypub.WebfingerResource
 
+type relayConfig struct {
+	blockService bool
+}
+
+var relConfig relayConfig
+
+func loadConfig() relayConfig {
+	blockService, err := RedClient.HGet("relay:config", "block_service").Result()
+	if err != nil {
+		RedClient.HSet("relay:config", "block_service", 0)
+		blockService = "0"
+	}
+	return relayConfig{
+		blockService: blockService == "1",
+	}
+}
+
 func main() {
 	pemPath := os.Getenv("ACTOR_PEM")
 	if pemPath == "" {
@@ -71,6 +88,9 @@ func main() {
 	Actor = activitypub.GenerateActor(Hostname, &Hostkey.PublicKey)
 	WebfingerResource = activitypub.GenerateWebfingerResource(Hostname, &Actor)
 
+	// Load Config
+	relConfig = loadConfig()
+
 	http.HandleFunc("/.well-known/webfinger", handleWebfinger)
 	http.HandleFunc("/actor", handleActor)
 	http.HandleFunc("/inbox", handleInbox)