forked from AkkomaGang/akkoma
Return keys in webfinger.
This commit is contained in:
parent
09f7ed4214
commit
bb1d08a47c
3 changed files with 35 additions and 5 deletions
|
@ -16,7 +16,7 @@ defmodule Pleroma.User do
|
|||
field :ap_id, :string
|
||||
field :avatar, :map
|
||||
field :local, :boolean, default: true
|
||||
field :info, :map
|
||||
field :info, :map, default: %{}
|
||||
|
||||
timestamps()
|
||||
end
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
defmodule Pleroma.Web.WebFinger do
|
||||
alias Pleroma.XmlBuilder
|
||||
alias Pleroma.User
|
||||
alias Pleroma.Web.OStatus
|
||||
alias Pleroma.Web.XML
|
||||
alias Pleroma.{Repo, User}
|
||||
alias Pleroma.Web.{XML, Salmon, OStatus}
|
||||
require Logger
|
||||
|
||||
def host_meta() do
|
||||
|
@ -28,18 +27,33 @@ def webfinger(resource) do
|
|||
end
|
||||
|
||||
def represent_user(user) do
|
||||
{:ok, user} = ensure_keys_present(user)
|
||||
{:ok, _private, public} = Salmon.keys_from_pem(user.info["keys"])
|
||||
magic_key = Salmon.encode_key(public)
|
||||
{
|
||||
:XRD, %{xmlns: "http://docs.oasis-open.org/ns/xri/xrd-1.0"},
|
||||
[
|
||||
{:Subject, "acct:#{user.nickname}@#{Pleroma.Web.host}"},
|
||||
{:Alias, user.ap_id},
|
||||
{:Link, %{rel: "http://schemas.google.com/g/2010#updates-from", type: "application/atom+xml", href: OStatus.feed_path(user)}},
|
||||
{:Link, %{rel: "salmon", href: OStatus.salmon_path(user)}}
|
||||
{:Link, %{rel: "salmon", href: OStatus.salmon_path(user)}},
|
||||
{:Link, %{rel: "magic-public-key", href: "data:application/magic-public-key,#{magic_key}"}}
|
||||
]
|
||||
}
|
||||
|> XmlBuilder.to_doc
|
||||
end
|
||||
|
||||
def ensure_keys_present(user) do
|
||||
info = user.info || %{}
|
||||
if info["keys"] do
|
||||
{:ok, user}
|
||||
else
|
||||
{:ok, pem} = Salmon.generate_rsa_pem
|
||||
info = Map.put(info, "keys", pem)
|
||||
Repo.update(Ecto.Changeset.change(user, info: info))
|
||||
end
|
||||
end
|
||||
|
||||
# FIXME: Make this call the host-meta to find the actual address.
|
||||
defp webfinger_address(domain) do
|
||||
"//#{domain}/.well-known/webfinger"
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
defmodule Pleroma.Web.WebFingerTest do
|
||||
use Pleroma.DataCase
|
||||
alias Pleroma.Web.WebFinger
|
||||
import Pleroma.Factory
|
||||
|
||||
describe "host meta" do
|
||||
test "returns a link to the xml lrdd" do
|
||||
|
@ -26,4 +27,19 @@ test "returns the info for a user" do
|
|||
assert data.salmon == "https://social.heldscal.la/main/salmon/user/29191"
|
||||
end
|
||||
end
|
||||
|
||||
describe "ensure_keys_present" do
|
||||
test "it creates keys for a user and stores them in info" do
|
||||
user = insert(:user)
|
||||
refute is_binary(user.info["keys"])
|
||||
{:ok, user} = WebFinger.ensure_keys_present(user)
|
||||
assert is_binary(user.info["keys"])
|
||||
end
|
||||
|
||||
test "it doesn't create keys if there already are some" do
|
||||
user = insert(:user, %{info: %{"keys" => "xxx"}})
|
||||
{:ok, user} = WebFinger.ensure_keys_present(user)
|
||||
assert user.info["keys"] == "xxx"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue