summaryrefslogtreecommitdiff
path: root/server.rb
diff options
context:
space:
mode:
authorpdp8 <pdp8@pdp8.info>2023-06-21 12:51:05 +0200
committerpdp8 <pdp8@pdp8.info>2023-06-21 12:51:05 +0200
commite1a5a8283ff69eb906d4c93b31d8cec1fae1b6c5 (patch)
tree57fe14ad7ae3e26c17c64133158917163d42db22 /server.rb
parentb837b19b1950c7bc14a38aa5ea917e91b6f081dd (diff)
server, client, helpers separated
Diffstat (limited to 'server.rb')
-rw-r--r--server.rb76
1 files changed, 76 insertions, 0 deletions
diff --git a/server.rb b/server.rb
new file mode 100644
index 0000000..13153b8
--- /dev/null
+++ b/server.rb
@@ -0,0 +1,76 @@
+# server-server
+post "/inbox" do
+ verify!
+ request.body.rewind # in case someone already read it
+ body = request.body.read
+ action = JSON.parse body
+
+ case action["type"]
+
+ when "Create"
+ create action["object"]
+
+ when "Delete"
+ delete action["object"]
+
+ when "Update"
+ delete action["object"]
+ create action["object"]
+
+ when "Follow"
+ File.open(File.join("public", "followers", mention(action["actor"]) + ".json"), "w+") { |f| f.puts body }
+ accept = { "@context" => "https://www.w3.org/ns/activitystreams",
+ "id" => File.join(SOCIAL_URL + "#accepts", SecureRandom.uuid),
+ "type" => "Accept",
+ "actor" => ACTOR,
+ "object" => action }
+ send_signed accept, action["actor"]
+
+ when "Undo"
+ o = action["object"]
+ case o["type"]
+ when "Follow"
+ Dir["public/followers/*.json"].each do |follower|
+ FileUtils.rm follower if JSON.parse(File.read(follower))["actor"] == o["actor"]
+ end
+ end
+
+ when "Accept"
+ o = action["object"]
+ case o["type"]
+ when "Follow"
+ File.open(File.join("public","following",mention(o['object'])+".json"),"w+"){|f| f.puts o.to_json}
+ end
+
+ when "Announce"
+ download action["object"]
+ #when "Move"
+ #when "Add"
+ #when "Remove"
+ #when "Like"
+ #when "Block"
+
+ else
+ p "Unknown action: #{action['type']}"
+ p body
+ end
+end
+
+# public
+get "/.well-known/webfinger" do
+ request["resource"] == "acct:#{ACCOUNT}" ? send_file("./public/webfinger", :type => "application/jrd+json") : halt(404)
+end
+
+get "/pdp8", :provides => 'html' do
+ redirect 'https://pdp8.info'
+end
+
+get "/pdp8" do
+ send_file "pdp8.json", :type => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'
+end
+
+["/outbox","/following","/followers"].each do |path|
+ get path do
+ ordered_collection(path).to_json
+ end
+end