diff options
Diffstat (limited to 'server.rb')
-rw-r--r-- | server.rb | 76 |
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 |