diff options
author | pdp8 <pdp8@pdp8.info> | 2023-05-19 14:18:03 +0200 |
---|---|---|
committer | pdp8 <pdp8@pdp8.info> | 2023-05-19 14:18:03 +0200 |
commit | d523ce8d4fe4e852944331eb0c300d309641c057 (patch) | |
tree | 1d59b80cbf4216310b3ef08ab772c6383d4297c4 /client.rb | |
parent | fb5068619adfd715e2e1e72bede45ed83b28ee1c (diff) |
input parsing @ server, deliver to followers, simple content formatting
Diffstat (limited to 'client.rb')
-rwxr-xr-x | client.rb | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/client.rb b/client.rb new file mode 100755 index 0000000..0ef2896 --- /dev/null +++ b/client.rb @@ -0,0 +1,72 @@ +#!/usr/bin/env ruby +# TODO +# run as service +# client post md +# direct from client (key) +# via server (auth) +require 'json' +require 'net/http' +require 'uri' +require 'base64' +require 'securerandom' +require 'fileutils' +require 'digest/sha2' + +USER = "pdp8" +WWW_DOMAIN = "pdp8.info" +WWW_URL = "https://#{WWW_DOMAIN}" +SOCIAL_DOMAIN = "social.#{WWW_DOMAIN}" + +ACCOUNT = "#{USER}@#{SOCIAL_DOMAIN}" +SOCIAL_URL = "https://#{SOCIAL_DOMAIN}" +ACTOR = File.join(SOCIAL_URL, USER) + +=begin +MATRIX = "@#{USER}:matrix.#{WWW_DOMAIN}" + +post = { + "@context" => "https://www.w3.org/ns/activitystreams", + "type" => "Note", + "content" => "" +} + +def webfinger account + account = account.sub(/^@/, '').chomp + user, server = account.split("@") + header = { 'Accept' => "application/jrd+json" } + uri = URI("https://" + server + "/.well-known/webfinger?resource=acct:#{account}") + http = Net::HTTP.new(uri.host, uri.port) + http.use_ssl = true + request = Net::HTTP::Get.new(uri.request_uri, header) + response = http.request(request) + JSON.parse(response.body)["links"].select { |l| l["rel"] == "self" }[0]["href"] +end + +ARGF.each do |line| + if /^(To|Cc|Bcc):/.match line + dest, addresses = line.split(/: */) + dest = dest.downcase + post[dest] ||= [] + addresses.split(/, */).each do |add| + post[dest] << webfinger(add.chomp) + end + else + post["content"] << line + end +end +=end + +uri = URI.parse(File.join SOCIAL_URL, "outbox") +http = Net::HTTP.new(uri.host, uri.port) +http.use_ssl = true +header = { 'Content-Type' => 'text/plain' } +# header = { 'Content-Type' => 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"' } +request = Net::HTTP::Post.new(uri.request_uri, header) +usr = File.read(".usr").chomp +pwd = File.read(".pwd").chomp +request.basic_auth(usr, pwd) +request.body = File.read ARGV[0] + +response = http.request(request) +# TODO return error if response.code > 400 +puts(response.body, response.code) |