summaryrefslogtreecommitdiff
path: root/helpers.rb
diff options
context:
space:
mode:
Diffstat (limited to 'helpers.rb')
-rw-r--r--helpers.rb35
1 files changed, 18 insertions, 17 deletions
diff --git a/helpers.rb b/helpers.rb
index 45c58df..0db6566 100644
--- a/helpers.rb
+++ b/helpers.rb
@@ -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
)