summaryrefslogtreecommitdiff
path: root/helpers.rb
diff options
context:
space:
mode:
Diffstat (limited to 'helpers.rb')
-rw-r--r--helpers.rb39
1 files changed, 37 insertions, 2 deletions
diff --git a/helpers.rb b/helpers.rb
index dca18e7..68aabe4 100644
--- a/helpers.rb
+++ b/helpers.rb
@@ -1,7 +1,8 @@
helpers do
def curl ext, url
- response = `/run/current-system/sw/bin/curl -ifsSL #{ext} #{url}`
+ #p "/run/current-system/sw/bin/curl -fsSL #{ext} #{url}"
+ response = `/run/current-system/sw/bin/curl -fsSL #{ext} #{url}`
$?.success? ? response : nil
end
@@ -27,9 +28,43 @@ helpers do
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 + '"'
- 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
+ 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?
end
+ def people
+ File.read('cache/people.tsv').split("\n").collect {|l| l.chomp.split("\t")}
+ end
+
+ def mention actor
+ person = people.select{|p| p[1] == actor}
+ if person.empty?
+ a = fetch(actor)
+ return nil unless a
+ mention = "#{a["preferredUsername"]}@#{URI(actor).host}"
+ File.open('cache/people.tsv','a'){|f| f.puts "#{mention}\t#{actor}"}
+ mention
+ else
+ person[0][0]
+ end
+ end
+
+ def actor mention
+ mention = mention.sub(/^@/, '').chomp
+ actors = people.select{|p| p[0] == mention}
+ if actors.empty?
+ user, server = mention.split("@")
+ a = fetch("https://#{server}/.well-known/webfinger?resource=acct:#{mention}", "application/jrd+json")
+ return nil unless a
+ actor = a["links"].select { |l|
+ l["rel"] == "self"
+ }[0]["href"]
+ File.open('cache/people.tsv','a'){|f| f.puts "#{mention}\t#{actor}"}
+ actor
+ else
+ actors[0][1]
+ end
+ end
+
end