summaryrefslogtreecommitdiff
path: root/client.rb
diff options
context:
space:
mode:
authorpdp8 <pdp8@pdp8.info>2023-05-19 14:18:03 +0200
committerpdp8 <pdp8@pdp8.info>2023-05-19 14:18:03 +0200
commitd523ce8d4fe4e852944331eb0c300d309641c057 (patch)
tree1d59b80cbf4216310b3ef08ab772c6383d4297c4 /client.rb
parentfb5068619adfd715e2e1e72bede45ed83b28ee1c (diff)
input parsing @ server, deliver to followers, simple content formatting
Diffstat (limited to 'client.rb')
-rwxr-xr-xclient.rb72
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)