Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F85711356
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
10 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/lib/pleroma/web/ostatus/activity_representer.ex b/lib/pleroma/web/ostatus/activity_representer.ex
new file mode 100644
index 000000000..558c85df4
--- /dev/null
+++ b/lib/pleroma/web/ostatus/activity_representer.ex
@@ -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
diff --git a/lib/pleroma/web/ostatus/feed_representer.ex b/lib/pleroma/web/ostatus/feed_representer.ex
index cb76022fe..def684405 100644
--- a/lib/pleroma/web/ostatus/feed_representer.ex
+++ b/lib/pleroma/web/ostatus/feed_representer.ex
@@ -1,26 +1,28 @@
defmodule Pleroma.Web.OStatus.FeedRepresenter do
alias Pleroma.Web.OStatus
- alias Pleroma.Web.OStatus.UserRepresenter
+ alias Pleroma.Web.OStatus.{UserRepresenter, ActivityRepresenter}
def to_simple_form(user, activities, users) do
most_recent_update = List.first(activities).updated_at
|> NaiveDateTime.to_iso8601
h = fn(str) -> [to_charlist(str)] end
- entries = []
+ entries = Enum.map(activities, fn(activity) ->
+ {:entry, ActivityRepresenter.to_simple_form(activity, user)}
+ end)
+
[{
:feed, [
xmlns: 'http://www.w3.org/2005/Atom',
"xmlns:activity": 'http://activitystrea.ms/spec/1.0/'
], [
{:id, h.(OStatus.feed_path(user))},
{:title, ['#{user.nickname}\'s timeline']},
{:updated, h.(most_recent_update)},
- {:entries, []},
{:link, [rel: 'hub', href: h.(OStatus.pubsub_path)], []},
{:author, UserRepresenter.to_simple_form(user)}
- ]
+ ] ++ entries
}]
end
end
diff --git a/lib/pleroma/web/ostatus/ostatus_controller.ex b/lib/pleroma/web/ostatus/ostatus_controller.ex
index ff6d7301a..4db4a55e6 100644
--- a/lib/pleroma/web/ostatus/ostatus_controller.ex
+++ b/lib/pleroma/web/ostatus/ostatus_controller.ex
@@ -1,26 +1,30 @@
defmodule Pleroma.Web.OStatus.OStatusController do
use Pleroma.Web, :controller
alias Pleroma.{User, Activity}
alias Pleroma.Web.OStatus.FeedRepresenter
alias Pleroma.Repo
import Ecto.Query
def feed(conn, %{"nickname" => nickname}) do
user = User.get_cached_by_nickname(nickname)
query = from activity in Activity,
where: fragment("? @> ?", activity.data, ^%{actor: user.ap_id}),
limit: 20,
order_by: [desc: :inserted_at]
activities = query
|> Repo.all
response = FeedRepresenter.to_simple_form(user, activities, [user])
|> :xmerl.export_simple(:xmerl_xml)
conn
|> put_resp_content_type("application/atom+xml")
|> send_resp(200, response)
end
+
+ def temp(conn, params) do
+ IO.inspect(params)
+ end
end
diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex
index cc1f0e165..e6d000881 100644
--- a/lib/pleroma/web/router.ex
+++ b/lib/pleroma/web/router.ex
@@ -1,73 +1,74 @@
defmodule Pleroma.Web.Router do
use Pleroma.Web, :router
alias Pleroma.{Repo, User}
def user_fetcher(username) do
{:ok, Repo.get_by(User, %{nickname: username})}
end
pipeline :api do
plug :accepts, ["json"]
plug :fetch_session
plug Pleroma.Plugs.AuthenticationPlug, %{fetcher: &Pleroma.Web.Router.user_fetcher/1, optional: true}
end
pipeline :authenticated_api do
plug :accepts, ["json"]
plug :fetch_session
plug Pleroma.Plugs.AuthenticationPlug, %{fetcher: &Pleroma.Web.Router.user_fetcher/1}
end
pipeline :well_known do
plug :accepts, ["xml", "xrd+xml"]
end
scope "/api", Pleroma.Web do
pipe_through :api
get "/help/test", TwitterAPI.Controller, :help_test
get "/statuses/public_timeline", TwitterAPI.Controller, :public_timeline
get "/statuses/public_and_external_timeline", TwitterAPI.Controller, :public_timeline
get "/statuses/show/:id", TwitterAPI.Controller, :fetch_status
get "/statusnet/conversation/:id", TwitterAPI.Controller, :fetch_conversation
get "/statusnet/config", TwitterAPI.Controller, :config
post "/account/register", TwitterAPI.Controller, :register
end
scope "/api", Pleroma.Web do
pipe_through :authenticated_api
get "/account/verify_credentials", TwitterAPI.Controller, :verify_credentials
post "/account/verify_credentials", TwitterAPI.Controller, :verify_credentials
post "/statuses/update", TwitterAPI.Controller, :status_update
get "/statuses/home_timeline", TwitterAPI.Controller, :friends_timeline
get "/statuses/friends_timeline", TwitterAPI.Controller, :friends_timeline
post "/friendships/create", TwitterAPI.Controller, :follow
post "/friendships/destroy", TwitterAPI.Controller, :unfollow
post "/statusnet/media/upload", TwitterAPI.Controller, :upload
post "/media/upload", TwitterAPI.Controller, :upload_json
post "/favorites/create/:id", TwitterAPI.Controller, :favorite
post "/favorites/create", TwitterAPI.Controller, :favorite
post "/favorites/destroy/:id", TwitterAPI.Controller, :unfavorite
post "/statuses/retweet/:id", TwitterAPI.Controller, :retweet
post "/qvitter/update_avatar", TwitterAPI.Controller, :update_avatar
end
pipeline :ostatus do
plug :accepts, ["xml", "atom"]
end
- scope "/users", Pleroma.Web do
+ scope "/", Pleroma.Web do
pipe_through :ostatus
- get "/:nickname/feed", OStatus.OStatusController, :feed
+ get "/users/:nickname/feed", OStatus.OStatusController, :feed
+ post "/push/hub", OStatus.OStatusController, :temp
end
scope "/.well-known", Pleroma.Web do
pipe_through :well_known
get "/host-meta", WebFinger.WebFingerController, :host_meta
get "/webfinger", WebFinger.WebFingerController, :webfinger
end
end
diff --git a/lib/pleroma/web/websub/websub_server_subscription.ex b/lib/pleroma/web/websub/websub_server_subscription.ex
new file mode 100644
index 000000000..2562239ad
--- /dev/null
+++ b/lib/pleroma/web/websub/websub_server_subscription.ex
@@ -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
diff --git a/priv/repo/migrations/20170418200143_create_webssub_server_subscription.exs b/priv/repo/migrations/20170418200143_create_webssub_server_subscription.exs
new file mode 100644
index 000000000..fe2fa2304
--- /dev/null
+++ b/priv/repo/migrations/20170418200143_create_webssub_server_subscription.exs
@@ -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
diff --git a/test/web/ostatus/activity_representer_test.exs b/test/web/ostatus/activity_representer_test.exs
new file mode 100644
index 000000000..16a9d3b00
--- /dev/null
+++ b/test/web/ostatus/activity_representer_test.exs
@@ -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
diff --git a/test/web/ostatus/feed_representer_test.exs b/test/web/ostatus/feed_representer_test.exs
index e252eca9f..dddc63ebf 100644
--- a/test/web/ostatus/feed_representer_test.exs
+++ b/test/web/ostatus/feed_representer_test.exs
@@ -1,39 +1,44 @@
defmodule Pleroma.Web.OStatus.FeedRepresenterTest do
use Pleroma.DataCase
import Pleroma.Factory
alias Pleroma.User
- alias Pleroma.Web.OStatus.{FeedRepresenter, UserRepresenter}
+ alias Pleroma.Web.OStatus.{FeedRepresenter, UserRepresenter, ActivityRepresenter}
alias Pleroma.Web.OStatus
test "returns a feed of the last 20 items of the user" do
note_activity = insert(:note_activity)
user = User.get_cached_by_ap_id(note_activity.data["actor"])
tuple = FeedRepresenter.to_simple_form(user, [note_activity], [user])
most_recent_update = note_activity.updated_at
|> NaiveDateTime.to_iso8601
res = :xmerl.export_simple_content(tuple, :xmerl_xml) |> IO.iodata_to_binary
user_xml = UserRepresenter.to_simple_form(user)
|> :xmerl.export_simple_content(:xmerl_xml)
+ entry_xml = ActivityRepresenter.to_simple_form(note_activity, user)
+ |> :xmerl.export_simple_content(:xmerl_xml)
+
expected = """
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:activity="http://activitystrea.ms/spec/1.0/">
<id>#{OStatus.feed_path(user)}</id>
<title>#{user.nickname}'s timeline</title>
<updated>#{most_recent_update}</updated>
- <entries />
<link rel="hub" href="#{OStatus.pubsub_path}" />
<author>
#{user_xml}
</author>
+ <entry>
+ #{entry_xml}
+ </entry>
</feed>
"""
assert clean(res) == clean(expected)
end
defp clean(string) do
String.replace(string, ~r/\s/, "")
end
end
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sat, Sep 19, 5:10 AM (1 d, 10 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1768903
Default Alt Text
(10 KB)
Attached To
Mode
rPUBE pleroma-upstream
Attached
Detach File
Event Timeline
Log In to Comment