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
|
# client-server
['/inbox/object', '/outbox/object'].each do |path|
get path do
protected!
Dir[File.join(path.sub('/', ''), '*', '*.json')].collect { |f| JSON.load_file(f) }.to_json
end
end
post '/delete' do
protected!
params['id'].each do |id|
file = find_file id
if file.match(%r{outbox/}) # find/delete activity
Dir[File.join 'outbox', 'announce', '*'].each do |announce_file|
announce = JSON.load_file(announce_file)
next unless announce['object']['id'] == id
outbox 'Undo', announce, announce['to']
FileUtils.rm(announce_file)
end
Dir[File.join 'outbox', 'create', '*'].each do |create_file|
create = JSON.load_file(create_file)
next unless create['object']['id'] == id
object = JSON.load_file(file)
outbox 'Delete', object, object['to']
FileUtils.rm(create_file)
end
end
FileUtils.rm(file) if File.exist? file
end
200
end
post '/follow' do
protected!
params['id'] = actor params['mention'] if params['mention']
outbox 'Follow', params['id'], [params['id']]
200
end
post '/unfollow' do
protected!
params['id'] = actor params['mention'] if params['mention']
following = Dir[File.join(OUTBOX[:dir], 'follow', '*.json')].collect { |f| JSON.load_file(f) }
activity = following.find { |a| a['object'] == params['id'] }
outbox 'Undo', activity, [params['id']]
update_collection FOLLOWING, params['id'], true
200
end
post '/share' do # TODO
protected!
src = find_file params['id']
object = JSON.load_file(src)
recipients = ['https://www.w3.org/ns/activitystreams#Public']
recipients += JSON.load_file(FOLLOWERS)['orderedItems']
recipients << object['attributedTo']
outbox 'Announce', object, recipients
dest = src.sub('inbox/', 'outbox/')
FileUtils.mkdir_p File.dirname(dest)
FileUtils.mv src, dest
200
end
post '/login' do
session['client'] = (OpenSSL::Digest::SHA256.base64digest(params['secret']) == File.read('.digest').chomp)
200
end
helpers do
def protected!
halt 403 unless session['client']
end
end
|