This commit is contained in:
Mirai Kumiko 2025-06-29 14:59:33 +02:00
parent 748baff8f3
commit 1faafeee26
Signed by: miraikumiko
GPG key ID: 3F178B1B5E0CB278
11 changed files with 126 additions and 48 deletions

View file

@ -7,12 +7,11 @@ defmodule Nulla.HTTPSignature do
date = DateTime.utc_now() |> Calendar.strftime("%a, %d %b %Y %H:%M:%S GMT")
uri = URI.parse(inbox_url)
signature_string = """
(request-target): post #{uri.path}
host: #{uri.host}
date: #{date}
digest: #{digest}
"""
signature_string =
"(request-target): post #{uri.path}\n" <>
"host: #{uri.host}\n" <>
"date: #{date}\n" <>
"digest: #{digest}"
user = User.get_user(id: actor.id)
@ -56,13 +55,16 @@ defmodule Nulla.HTTPSignature do
end
defp parse_signature_header(header) do
header =
header
|> String.split(",")
|> Enum.map(fn pair ->
[k, v] = String.split(pair, "=", parts: 2)
{String.trim(k), String.trim(v, ~s("))}
end)
|> Enum.into(%{})
header
|> String.split(",")
|> Enum.map(fn pair ->
[k, v] = String.split(pair, "=", parts: 2)
{String.trim(k), String.trim(v, ~s("))}
end)
|> Enum.into(%{})
end
defp build_signature_string(nil, _conn), do: {:error, :missing_headers}
@ -83,6 +85,9 @@ defmodule Nulla.HTTPSignature do
"(request-target): #{method} #{path}"
"host" ->
"host: #{conn.host}"
_ ->
value = get_req_header(conn, header) |> List.first()
if value, do: "#{header}: #{value}", else: nil