# https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-server/ require 'http' require 'openssl' document = File.read('message') date = Time.now.utc.httpdate keypair = OpenSSL::PKey::RSA.new(File.read('private.pem')) signed_string = "(request-target): post /inbox\nhost: git.exozy.me\ndate: #{date}" signature = Base64.strict_encode64(keypair.sign(OpenSSL::Digest::SHA256.new, signed_string)) header = 'keyId="https://test.exozy.me/api/v1/activitypub/user/test#main-key",headers="(request-target) host date",signature="' + signature + '"' HTTP.headers({ 'Host': 'mastodon.social', 'Date': date, 'Signature': header }) .post('https://git.exozy.me/api/v1/activitypub/user/Ta180m/inbox', body: document)