# 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