summaryrefslogtreecommitdiff
path: root/server.rb
blob: 13153b8ddff5a17dce32433aad31ad1285171307 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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