diff --git a/deliver.rb b/deliver.rb new file mode 100644 index 0000000..3a46051 --- /dev/null +++ b/deliver.rb @@ -0,0 +1,14 @@ +# 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) diff --git a/message b/message new file mode 100644 index 0000000..773c43e --- /dev/null +++ b/message @@ -0,0 +1,14 @@ +{ + "@context": "https://www.w3.org/ns/activitystreams", + "type": "Note", + "attributedTo": "https://test.exozy.me/api/v1/activitypub/user/test", + "context": "https://git.exozy.me/Ta180m/Hello-world/issues/2", + "inReplyTo": "https://git.exozy.me/Ta180m/Hello-world/issues/2", + "mediaType": "text/html", + "content": "

Hello from test.exozy.me!

", + "source": { + "mediaType": "text/markdown; variant=Commonmark", + "content": "Hello from test.exozy.me!" + }, + "published": "2019-11-06T20:49:05.604488Z" +} diff --git a/private.pem b/private.pem new file mode 100644 index 0000000..578b7db --- /dev/null +++ b/private.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAsPQH/jssyJryAX9I065SZE69e5OIBW3q2nFjMBDlC+WStN2P +uJqFznsEcEMq9Ge3pTQ3Rqj2SumyqngwYhN63SpFjeplgvL20ygNfd5c4sVwZicn +aLAsjwcWS/7hF6ENW9Vhwk5yBYel7efxPaNY98XhPLVDYeX8ZfB8PKExC6V4h8d1 +iQqMnSw+/twy1/W69x3A4sZlsIisqmiY18haxyR4BblQuB0uwnlR6wpJFHkqX5Ci +Q4/knRnxj0pDvaLL0fscBWnO7dP+9+HrHu2NM7GfZbRMQhjuoC6VQbg7iowbPdA0 +OEHR6rGpSVaBCHd44Y2Tbd06rAArVZinek9hAwIDAQABAoIBADY8ZaLHkl9eFmTd +FX5EBN7Xv3375wn6+avAay1VUE7IK6Ih8qYbPn3d+KtL+wN0MraA/Zw7t1mYrXlQ +Y0v8OoFFLpJj0H9FZt+rfA8jM4cSCvRUdeDBdrbT7kKWuXkblNOb4F3E22/Udsgn +eipxQZiX3wRTbna4HhdEkV+n7DdsGnOis11u9dXXP5w6oN6biazO81chvR9iHd9l +4eUFaPaZLH9PvOwx2kFmwuBRdkV8LNjWWldE21yvXAY4ZNG4zlm2eryuzY6XY54J +ACaggLYn/p7nqHcR51Xy7S3l8TXV2s6hzVHZh83cta3FPu10hVsL2aHYRMjDgZhz +YQtnW+ECgYEAxvOasW0zz1kpp+8uKkV5j3jwhpKo7uwCi+zIXj10iINFgNH0ZnkV +z0IbFtr+EsWy+ktc1vUsaSwACVUUVLbWB7jWIlSWM5cCa3HS5t//HEJkPN7uuEwi +o+/fIGHYWp2cWCfVkvJYFts4UU0AhZq3dwjMgqSUmPWH78eX6OB1PxECgYEA47GZ +oU04SGNIwYHeOCuOBXvzfjcFIZ6k4JP604ar4u9VpErsTjPhUyYSmdfNOJOw6bQK +xGQGvqZTdxytG4q1+lHY3zFV+whz+kCOAELzSuREsiffSrIeOmCnTZxaL9E0HZ30 +qoezzNWH2lS4aYhkqBee1niWH5PgkVoEppsSBtMCgYAHimwulWkFTufZSaOCTqfQ +3FChiSWGCMP/8bWWfNXR5sfXnh2ZVLWS6XqFXz+KDpw+CGU4cIqCYfyOXf8rRtLN +8B+NpY8b3XlmASZxQcQ1mf6aoAiES750YD8gxxSgOqEWZkweCbl1BFIaIsUGS1rw +1BCMUxiew4+ncvU7CmbnQQKBgDnP3jIWaTP4AYEgeEvKw0ShNDHXxnXC0hozeHw8 +tWfpXNVaMKWqhouWHyLwqCq1VTYBgLpcq1m84XRc05cqoQntviLtY+dZPhlMSsHG +Pf/F9atGdGuCzioEYHZUPJHnjFP4xyaFTiG0FcpZuHkTKHuFg87wzy01Xs+JC6VB +ulIBAoGBALwTuLDSeSwU3xXo2xpG5zOygx7Gqzo94j1lvN/EjNPaqD+GKQuFPTOz +CJ/sF0oCYwmT8q0mDIONX/MVvYy7H6SeK6zhogfEUPdIElLvoUoA/Z6tEtx/BHcF +9XP+oR1/6XEzxLoCK8j0RgDXtvJNzctT4iITnzFBmLShnOFv0HQX +-----END RSA PRIVATE KEY-----