diff options
author | pdp8 <pdp8@pdp8.info> | 2023-06-28 18:55:27 +0200 |
---|---|---|
committer | pdp8 <pdp8@pdp8.info> | 2023-06-28 18:55:27 +0200 |
commit | e328b59ffc2476262dbd076d2478aaade78e649c (patch) | |
tree | 758f134e1b68af8a52fd2559c9fe704a62b9a040 /helpers.rb | |
parent | dfaac96870ac6a86ebb0b5e5c9365e1e0ef6e5bc (diff) |
digest login, refactoring
Diffstat (limited to 'helpers.rb')
-rw-r--r-- | helpers.rb | 39 |
1 files changed, 37 insertions, 2 deletions
@@ -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 |