aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRoger Braun <roger@rogerbraun.net>2017-04-30 15:00:04 +0200
committerRoger Braun <roger@rogerbraun.net>2017-04-30 15:00:04 +0200
commitbb1d08a47c34c70d42f6c3afa08232765a24884d (patch)
treea04bef8afb0ea6117859f3a302fa9e0da973dd48 /lib
parent09f7ed421497e12797f30ae34e0f2346f1b6a428 (diff)
downloadpleroma-bb1d08a47c34c70d42f6c3afa08232765a24884d.tar.gz
Return keys in webfinger.
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/user.ex2
-rw-r--r--lib/pleroma/web/web_finger/web_finger.ex22
2 files changed, 19 insertions, 5 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index cd6104680..49ba9b22e 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -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
diff --git a/lib/pleroma/web/web_finger/web_finger.ex b/lib/pleroma/web/web_finger/web_finger.ex
index 49796dab8..13e3baad6 100644
--- a/lib/pleroma/web/web_finger/web_finger.ex
+++ b/lib/pleroma/web/web_finger/web_finger.ex
@@ -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"