From 9d95a49ecd7e2f3e49b3462a281f2b86b406cf41 Mon Sep 17 00:00:00 2001 From: pdp8 Date: Fri, 30 Jun 2023 15:42:14 +0200 Subject: inbox activities handled by dedicated functions --- helpers.rb | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) (limited to 'helpers.rb') diff --git a/helpers.rb b/helpers.rb index 68aabe4..a51ea3d 100644 --- a/helpers.rb +++ b/helpers.rb @@ -1,8 +1,7 @@ helpers do def curl ext, url - #p "/run/current-system/sw/bin/curl -fsSL #{ext} #{url}" - response = `/run/current-system/sw/bin/curl -fsSL #{ext} #{url}` + response = `/run/current-system/sw/bin/curl --fail-with-body -sSL #{ext} #{url}` $?.success? ? response : nil end @@ -12,24 +11,33 @@ helpers do end # https://github.com/mastodon/mastodon/blob/main/app/lib/request.rb - def send_signed object, url + def send_signed object#, url keypair = OpenSSL::PKey::RSA.new(File.read('private.pem')) date = Time.now.utc.httpdate body = object.to_json sha256 = OpenSSL::Digest::SHA256.new digest = "SHA-256=" + sha256.base64digest(body) - host = URI.parse(url).host - inbox = fetch(url)["inbox"] - return false unless inbox - request_uri = URI(inbox).request_uri + jj object + #(object['to'] + object['cc'] + object['bto'] + object['bcc']).uniq.each do |url| + object['to'].uniq.each do |url| + unless url == 'https://www.w3.org/ns/activitystreams#Public' + host = URI.parse(url).host + inbox = fetch(url)["inbox"] + if inbox + request_uri = URI(inbox).request_uri - signed_string = "(request-target): post #{request_uri}\nhost: #{host}\ndate: #{date}\ndigest: #{digest}\ncontent-type: application/activity+json" - signature = Base64.strict_encode64(keypair.sign(OpenSSL::Digest.new('SHA256'), signed_string)) - signed_header = 'keyId="' + ACTOR + '#main-key",algorithm="rsa-sha256",headers="(request-target) host date digest content-type",signature="' + signature + '"' + signed_string = "(request-target): post #{request_uri}\nhost: #{host}\ndate: #{date}\ndigest: #{digest}\ncontent-type: application/activity+json" + signature = Base64.strict_encode64(keypair.sign(OpenSSL::Digest.new('SHA256'), signed_string)) + signed_header = 'keyId="' + ACTOR + '#main-key",algorithm="rsa-sha256",headers="(request-target) host date digest content-type",signature="' + signature + '"' - p curl("-X POST -H 'Content-Type: application/activity+json' -H 'Host: #{host}' -H 'Date: #{date}' -H 'Digest: #{digest}' -H 'Signature: #{signed_header}' -d '#{body}'", inbox) - $?.success? + p curl("-X POST -H 'Content-Type: application/activity+json' -H 'Host: #{host}' -H 'Date: #{date}' -H 'Digest: #{digest}' -H 'Signature: #{signed_header}' -d '#{body}'", inbox) + #$?.success? + else + p "No inbox for #{url}" + end + end + end end -- cgit v1.2.3