summaryrefslogtreecommitdiff
path: root/client.rb
diff options
context:
space:
mode:
authorpdp8 <pdp8@pdp8.info>2023-07-24 17:34:43 +0200
committerpdp8 <pdp8@pdp8.info>2023-07-24 17:34:43 +0200
commit0f039c1b813653869033e961810942f479a28685 (patch)
tree3268286b6cc892b1af4bfdf34921f9040600973a /client.rb
parenta509c55faca368709044133199f71fb862b1e605 (diff)
public outbox, inbox/outbox threads
Diffstat (limited to 'client.rb')
-rw-r--r--client.rb28
1 files changed, 13 insertions, 15 deletions
diff --git a/client.rb b/client.rb
index 8d34cf1..b0b6385 100644
--- a/client.rb
+++ b/client.rb
@@ -2,10 +2,10 @@
# client-server
-['/inbox', '/outbox'].each do |path|
+['/inbox/threads', '/outbox/threads'].each do |path|
get path do
protected!
- box = path.sub('/', '')
+ box = path.sub('/', '').sub('/threads', '')
collection = Dir[File.join(box, 'object', '*', '*.json')].collect { |f| JSON.parse(File.read(f)) }
threads = []
collection.collect! do |object|
@@ -42,20 +42,18 @@ end
post '/follow' do
protected!
- actor, = parse_follow params['follow']
- outbox 'Follow', actor, [actor]
+ params['id'] = actor params['mention'] if params['mention']
+ outbox 'Follow', params['id'], [params['id']]
end
post '/unfollow' do
protected!
- actor, mention = parse_follow params['follow']
- Dir[File.join(OUTBOX[:dir], 'follow', '*.json')].each do |f|
- activity = JSON.parse(File.read(f))
- if activity['object'] == actor
- outbox 'Undo', activity, [actor]
- update_collection FOLLOWING, actor, true
- end
- end
+ params['id'] = actor params['mention'] if params['mention']
+ following = Dir[File.join(OUTBOX[:dir], 'follow', '*.json')].collect { |f| JSON.parse(File.read(f)) }
+ activity = following.find { |a| a['object'] == params['id'] }
+ activity ||= save_activity({ 'type' => 'Follow', 'actor' => ACTOR, 'object' => params['id'] }, OUTBOX) # recreate activity for old/deleted follows
+ outbox 'Undo', activity, [params['id']]
+ update_collection FOLLOWING, params['id'], true
end
post '/share' do # TODO
@@ -64,7 +62,7 @@ post '/share' do # TODO
object = JSON.parse(File.read(src))
recipients = public
recipients << object['attributedTo']
- # outbox 'Announce', object, recipients
+ outbox 'Announce', object, recipients
dest = src.sub('/inbox/', '/outbox/')
FileUtils.mkdir_p File.dirname(dest)
FileUtils.mv src, dest
@@ -80,9 +78,9 @@ helpers do
end
def find_file(id)
- Dir[File.join('*', 'object', '*', '*.json')].select do |f|
+ Dir[File.join('*', 'object', '*', '*.json')].find do |f|
JSON.parse(File.read(f))['id'] == id
- end[0]
+ end
end
def public