summaryrefslogtreecommitdiff
path: root/helpers.rb
diff options
context:
space:
mode:
authorpdp8 <pdp8@pdp8.info>2023-06-21 18:56:21 +0200
committerpdp8 <pdp8@pdp8.info>2023-06-21 18:56:21 +0200
commit457a0bfdc74ed90b77d09d285281abca8a1396de (patch)
tree7a2391e1bf174eba780e1e989739aa5fb14526d2 /helpers.rb
parenta501b19ae87592da8e55ec28525b487be1eba92f (diff)
reply form, server helpers moved to server.rb
Diffstat (limited to 'helpers.rb')
-rw-r--r--helpers.rb77
1 files changed, 3 insertions, 74 deletions
diff --git a/helpers.rb b/helpers.rb
index 8774f74..50a2b24 100644
--- a/helpers.rb
+++ b/helpers.rb
@@ -1,43 +1,5 @@
helpers do
- def protected!
- redirect("/login.html") unless session['client']
- end
-
- # https://github.com/mastodon/mastodon/blob/main/app/controllers/concerns/signature_verification.rb
- def verify!
- # TODO verify digest
- begin
- signature_params = {}
- request.env["HTTP_SIGNATURE"].split(',').each do |pair|
- k, v = pair.split('=')
- signature_params[k] = v.gsub('"', '')
- end
-
- key_id = signature_params['keyId']
- headers = signature_params['headers']
- signature = Base64.decode64(signature_params['signature'])
-
- actor = fetch key_id
- key = OpenSSL::PKey::RSA.new(actor['publicKey']['publicKeyPem'])
-
- comparison = headers.split(' ').map do |signed_params_name|
- if signed_params_name == '(request-target)'
- '(request-target): post /inbox'
- elsif signed_params_name == 'content-type'
- "#{signed_params_name}: #{request.env["CONTENT_TYPE"]}"
- else
- "#{signed_params_name}: #{request.env["HTTP_" + signed_params_name.upcase]}"
- end
- end.join("\n")
-
- halt 400 unless key.verify(OpenSSL::Digest.new('SHA256'), signature, comparison)
- rescue => e
- p request.env["HTTP_SIGNATURE"], e
- halt 400
- end
- end
-
def items
nr = 0
@items = Dir[File.join(@dir, '*.json')].sort.collect do |file|
@@ -82,30 +44,6 @@ helpers do
erb :item
end
- def delete object
- Dir["inbox/*.json"].each do |doc|
- FileUtils.rm doc if JSON.parse(File.read(doc))["id"] == object["id"]
- end
- end
-
- def create object
- unless object['type'] == 'Person'
- doc = File.join("inbox", "#{Time.now.strftime('%Y-%m-%dT%H:%M:%S.%N')}.json")
- File.open(doc, "w+") { |f| f.puts object.to_json }
- if object['inReplyTo']
- @dir = 'inbox'
- items
- if @items.select{|it| it[:id] == object['inReplyTo'] }.empty?
- download object['inReplyTo']
- end
- end
- end
- end
-
- def download object_url
- create fetch(object_url)
- end
-
def people
File.read('cache/people.tsv').split("\n").collect {|l| l.chomp.split("\t")}
end
@@ -144,17 +82,6 @@ helpers do
JSON.parse(response)
end
- def ordered_collection dir
- posts = Dir[File.join("public",dir, "*.json")].collect { |f| JSON.parse(File.read f) }.sort_by { |o| o["published"] }
- {
- "@context" => "https://www.w3.org/ns/activitystreams",
- "summary" => "#{USER} #{dir}",
- "type" => "OrderedCollection",
- "totalItems" => posts.size,
- "orderedItems" => posts,
- }
- end
-
# https://github.com/mastodon/mastodon/blob/main/app/lib/request.rb
def send_signed object, url
@@ -171,7 +98,9 @@ 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 + '"'
- puts `/run/current-system/sw/bin/curl --fail-with-body -sSL -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 url
+ #puts `/run/current-system/sw/bin/curl --fail-with-body -sSL -X POST -H 'Content-Type: application/activity+json' -H 'Host: #{host}' -H 'Date: #{date}' -H 'Digest: #{digest}' -H 'Signature: #{signed_header}' -d '#{body}' #{inbox}`
+ puts `/run/current-system/sw/bin/curl -iL -X POST -H 'Content-Type: application/activity+json' -H 'Host: #{host}' -H 'Date: #{date}' -H 'Digest: #{digest}' -H 'Signature: #{signed_header}' -d '#{body}' #{inbox}`
end
end