diff options
author | pdp8 <pdp8@pdp8.info> | 2023-07-21 15:34:09 +0200 |
---|---|---|
committer | pdp8 <pdp8@pdp8.info> | 2023-07-21 15:34:09 +0200 |
commit | 5062145de3e3fe600415c8b8718c6a144f8ed939 (patch) | |
tree | 5f96d48955278de4c98ccfb186d66204d4626286 /helpers.rb | |
parent | 711bf7f86daddd0209244f9640d8a3f27d958e3a (diff) |
intermediary commit
Diffstat (limited to 'helpers.rb')
-rw-r--r-- | helpers.rb | 35 |
1 files changed, 18 insertions, 17 deletions
@@ -4,34 +4,36 @@ require 'English' helpers do # add date and id, save - def complete_and_save(activity) - box = activity['id'] ? INBOX : OUTBOX + def save_activity(activity, box) date = Time.now.utc.iso8601 activity['published'] = date if box == OUTBOX basename = "#{activity['published']}_#{mention(activity['actor'])}.json" activity_rel_path = File.join(activity['type'].downcase, basename) activity_path = File.join(box[:dir], activity_rel_path) - activity['id'] = File.join(box[:url], activity_rel_path) if box == OUTBOX - - if activity['object'] && activity['object']['type'] && !activity['object']['id'] - # save object - object = activity['object'] - object['@context'] = 'https://www.w3.org/ns/activitystreams' - object_rel_path = File.join 'object', activity['object']['type'].downcase, basename - if box == OUTBOX - object['id'] = File.join box[:url], object_rel_path - object['published'] = date - end - object_path = File.join box[:dir], object_rel_path - FileUtils.mkdir_p File.dirname(object_path) - File.open(object_path, 'w+') { |f| f.puts object.to_json } + if box == OUTBOX + activity['id'] = File.join(box[:url], activity_rel_path) + activity['object']['published'] = date end + # save object + save_object activity['object'], box if activity['object'] && activity['object']['type'] && !activity['object']['id'] # save activity FileUtils.mkdir_p File.dirname(activity_path) File.open(activity_path, 'w+') { |f| f.puts activity.to_json } activity end + def save_object(object, box) + object = fetch(object) if object.is_a? String and object.match(/^http/) + object['@context'] = 'https://www.w3.org/ns/activitystreams' + basename = "#{object['published']}_#{mention(object['attributedTo'])}.json" + object_rel_path = File.join 'object', object['type'].downcase, basename + object['id'] = File.join box[:url], object_rel_path if box == OUTBOX + object_path = File.join box[:dir], object_rel_path + FileUtils.mkdir_p File.dirname(object_path) + File.open(object_path, 'w+') { |f| f.puts object.to_json } + object + end + def update_collection(path, objects, delete = false) objects = [objects] unless objects.is_a? Array File.open(path, 'r+') do |f| @@ -61,7 +63,6 @@ helpers do string = "(request-target): get #{uri.request_uri}\nhost: #{uri.host}\ndate: #{httpdate}" signature = Base64.strict_encode64(keypair.sign(OpenSSL::Digest.new('SHA256'), string)) signed_header = "keyId=\"#{ACTOR}#main-key\",algorithm=\"rsa-sha256\",headers=\"(request-target) host date\",signature=\"#{signature}\"" - response = curl( "-H 'Accept: #{accept}' -H 'Host: #{uri.host}' -H 'Date: #{httpdate}' -H 'Signature: #{signed_header}' ", url ) |