Better activities in ostatus.
This commit is contained in:
parent
d23f3e3cf3
commit
cc330421fd
20
lib/pleroma/web/ostatus/activity_representer.ex
Normal file
20
lib/pleroma/web/ostatus/activity_representer.ex
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
defmodule Pleroma.Web.OStatus.ActivityRepresenter do
|
||||||
|
def to_simple_form(activity, user) do
|
||||||
|
h = fn(str) -> [to_charlist(str)] end
|
||||||
|
|
||||||
|
updated_at = activity.updated_at
|
||||||
|
|> NaiveDateTime.to_iso8601
|
||||||
|
inserted_at = activity.inserted_at
|
||||||
|
|> NaiveDateTime.to_iso8601
|
||||||
|
|
||||||
|
[
|
||||||
|
{:"activity:object-type", ['http://activitystrea.ms/schema/1.0/note']},
|
||||||
|
{:"activity:verb", ['http://activitystrea.ms/schema/1.0/post']},
|
||||||
|
{:id, h.(activity.data["id"])},
|
||||||
|
{:title, ['New note by #{user.nickname}']},
|
||||||
|
{:content, [type: 'html'], h.(activity.data["object"]["content"])},
|
||||||
|
{:published, h.(inserted_at)},
|
||||||
|
{:updated, h.(updated_at)}
|
||||||
|
]
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,6 +1,6 @@
|
||||||
defmodule Pleroma.Web.OStatus.FeedRepresenter do
|
defmodule Pleroma.Web.OStatus.FeedRepresenter do
|
||||||
alias Pleroma.Web.OStatus
|
alias Pleroma.Web.OStatus
|
||||||
alias Pleroma.Web.OStatus.UserRepresenter
|
alias Pleroma.Web.OStatus.{UserRepresenter, ActivityRepresenter}
|
||||||
|
|
||||||
def to_simple_form(user, activities, users) do
|
def to_simple_form(user, activities, users) do
|
||||||
most_recent_update = List.first(activities).updated_at
|
most_recent_update = List.first(activities).updated_at
|
||||||
|
@ -8,7 +8,10 @@ def to_simple_form(user, activities, users) do
|
||||||
|
|
||||||
h = fn(str) -> [to_charlist(str)] end
|
h = fn(str) -> [to_charlist(str)] end
|
||||||
|
|
||||||
entries = []
|
entries = Enum.map(activities, fn(activity) ->
|
||||||
|
{:entry, ActivityRepresenter.to_simple_form(activity, user)}
|
||||||
|
end)
|
||||||
|
|
||||||
[{
|
[{
|
||||||
:feed, [
|
:feed, [
|
||||||
xmlns: 'http://www.w3.org/2005/Atom',
|
xmlns: 'http://www.w3.org/2005/Atom',
|
||||||
|
@ -17,10 +20,9 @@ def to_simple_form(user, activities, users) do
|
||||||
{:id, h.(OStatus.feed_path(user))},
|
{:id, h.(OStatus.feed_path(user))},
|
||||||
{:title, ['#{user.nickname}\'s timeline']},
|
{:title, ['#{user.nickname}\'s timeline']},
|
||||||
{:updated, h.(most_recent_update)},
|
{:updated, h.(most_recent_update)},
|
||||||
{:entries, []},
|
|
||||||
{:link, [rel: 'hub', href: h.(OStatus.pubsub_path)], []},
|
{:link, [rel: 'hub', href: h.(OStatus.pubsub_path)], []},
|
||||||
{:author, UserRepresenter.to_simple_form(user)}
|
{:author, UserRepresenter.to_simple_form(user)}
|
||||||
]
|
] ++ entries
|
||||||
}]
|
}]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -23,4 +23,8 @@ def feed(conn, %{"nickname" => nickname}) do
|
||||||
|> put_resp_content_type("application/atom+xml")
|
|> put_resp_content_type("application/atom+xml")
|
||||||
|> send_resp(200, response)
|
|> send_resp(200, response)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def temp(conn, params) do
|
||||||
|
IO.inspect(params)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -58,10 +58,11 @@ def user_fetcher(username) do
|
||||||
plug :accepts, ["xml", "atom"]
|
plug :accepts, ["xml", "atom"]
|
||||||
end
|
end
|
||||||
|
|
||||||
scope "/users", Pleroma.Web do
|
scope "/", Pleroma.Web do
|
||||||
pipe_through :ostatus
|
pipe_through :ostatus
|
||||||
|
|
||||||
get "/:nickname/feed", OStatus.OStatusController, :feed
|
get "/users/:nickname/feed", OStatus.OStatusController, :feed
|
||||||
|
post "/push/hub", OStatus.OStatusController, :temp
|
||||||
end
|
end
|
||||||
|
|
||||||
scope "/.well-known", Pleroma.Web do
|
scope "/.well-known", Pleroma.Web do
|
||||||
|
|
11
lib/pleroma/web/websub/websub_server_subscription.ex
Normal file
11
lib/pleroma/web/websub/websub_server_subscription.ex
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
defmodule Pleroma.Web.Websub.WebsubServerSubscription do
|
||||||
|
use Ecto.Schema
|
||||||
|
|
||||||
|
schema "websub_server_subscriptions" do
|
||||||
|
field :topic, :string
|
||||||
|
field :callback, :string
|
||||||
|
field :secret, :string
|
||||||
|
field :valid_until, :naive_datetime
|
||||||
|
field :state, :string
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,15 @@
|
||||||
|
defmodule Pleroma.Repo.Migrations.CreateWebsubServerSubscription do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def change do
|
||||||
|
create table(:websub_server_subscriptions) do
|
||||||
|
add :topic, :string
|
||||||
|
add :callback, :string
|
||||||
|
add :secret, :string
|
||||||
|
add :valid_until, :naive_datetime
|
||||||
|
add :state, :string
|
||||||
|
|
||||||
|
timestamps()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
38
test/web/ostatus/activity_representer_test.exs
Normal file
38
test/web/ostatus/activity_representer_test.exs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
defmodule Pleroma.Web.OStatus.ActivityRepresenterTest do
|
||||||
|
use Pleroma.DataCase
|
||||||
|
|
||||||
|
alias Pleroma.Web.OStatus.ActivityRepresenter
|
||||||
|
alias Pleroma.User
|
||||||
|
|
||||||
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
test "a note activity" do
|
||||||
|
note_activity = insert(:note_activity)
|
||||||
|
updated_at = note_activity.updated_at
|
||||||
|
|> NaiveDateTime.to_iso8601
|
||||||
|
inserted_at = note_activity.inserted_at
|
||||||
|
|> NaiveDateTime.to_iso8601
|
||||||
|
|
||||||
|
user = User.get_cached_by_ap_id(note_activity.data["actor"])
|
||||||
|
|
||||||
|
expected = """
|
||||||
|
<activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
|
||||||
|
<activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
|
||||||
|
<id>#{note_activity.data["id"]}</id>
|
||||||
|
<title>New note by #{user.nickname}</title>
|
||||||
|
<content type="html">#{note_activity.data["object"]["content"]}</content>
|
||||||
|
<published>#{inserted_at}</published>
|
||||||
|
<updated>#{updated_at}</updated>
|
||||||
|
"""
|
||||||
|
|
||||||
|
tuple = ActivityRepresenter.to_simple_form(note_activity, user)
|
||||||
|
|
||||||
|
res = :xmerl.export_simple_content(tuple, :xmerl_xml) |> IO.iodata_to_binary
|
||||||
|
|
||||||
|
assert clean(res) == clean(expected)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp clean(string) do
|
||||||
|
String.replace(string, ~r/\s/, "")
|
||||||
|
end
|
||||||
|
end
|
|
@ -2,7 +2,7 @@ defmodule Pleroma.Web.OStatus.FeedRepresenterTest do
|
||||||
use Pleroma.DataCase
|
use Pleroma.DataCase
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
alias Pleroma.User
|
alias Pleroma.User
|
||||||
alias Pleroma.Web.OStatus.{FeedRepresenter, UserRepresenter}
|
alias Pleroma.Web.OStatus.{FeedRepresenter, UserRepresenter, ActivityRepresenter}
|
||||||
alias Pleroma.Web.OStatus
|
alias Pleroma.Web.OStatus
|
||||||
|
|
||||||
test "returns a feed of the last 20 items of the user" do
|
test "returns a feed of the last 20 items of the user" do
|
||||||
|
@ -18,16 +18,21 @@ test "returns a feed of the last 20 items of the user" do
|
||||||
user_xml = UserRepresenter.to_simple_form(user)
|
user_xml = UserRepresenter.to_simple_form(user)
|
||||||
|> :xmerl.export_simple_content(:xmerl_xml)
|
|> :xmerl.export_simple_content(:xmerl_xml)
|
||||||
|
|
||||||
|
entry_xml = ActivityRepresenter.to_simple_form(note_activity, user)
|
||||||
|
|> :xmerl.export_simple_content(:xmerl_xml)
|
||||||
|
|
||||||
expected = """
|
expected = """
|
||||||
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:activity="http://activitystrea.ms/spec/1.0/">
|
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:activity="http://activitystrea.ms/spec/1.0/">
|
||||||
<id>#{OStatus.feed_path(user)}</id>
|
<id>#{OStatus.feed_path(user)}</id>
|
||||||
<title>#{user.nickname}'s timeline</title>
|
<title>#{user.nickname}'s timeline</title>
|
||||||
<updated>#{most_recent_update}</updated>
|
<updated>#{most_recent_update}</updated>
|
||||||
<entries />
|
|
||||||
<link rel="hub" href="#{OStatus.pubsub_path}" />
|
<link rel="hub" href="#{OStatus.pubsub_path}" />
|
||||||
<author>
|
<author>
|
||||||
#{user_xml}
|
#{user_xml}
|
||||||
</author>
|
</author>
|
||||||
|
<entry>
|
||||||
|
#{entry_xml}
|
||||||
|
</entry>
|
||||||
</feed>
|
</feed>
|
||||||
"""
|
"""
|
||||||
assert clean(res) == clean(expected)
|
assert clean(res) == clean(expected)
|
||||||
|
|
Loading…
Reference in a new issue