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
|