Browse Source

Return keys in webfinger.

tags/v0.9.9
Roger Braun 7 years ago
parent
commit
bb1d08a47c
3 changed files with 35 additions and 5 deletions
  1. +1
    -1
      lib/pleroma/user.ex
  2. +18
    -4
      lib/pleroma/web/web_finger/web_finger.ex
  3. +16
    -0
      test/web/web_finger/web_finger_test.exs

+ 1
- 1
lib/pleroma/user.ex View File

@@ -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


+ 18
- 4
lib/pleroma/web/web_finger/web_finger.ex View File

@@ -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 @@ defmodule Pleroma.Web.WebFinger 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"


+ 16
- 0
test/web/web_finger/web_finger_test.exs View File

@@ -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 @@ defmodule Pleroma.Web.WebFingerTest 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…
Cancel
Save