diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 1f0a05568..2b3e8cc2f 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -15,7 +15,7 @@ defmodule Pleroma.Application do # Start your own worker by calling: Pleroma.Worker.start_link(arg1, arg2, arg3) # worker(Pleroma.Worker, [arg1, arg2, arg3]), worker(Cachex, [:user_cache, [ - default_ttl: 25000, + default_ttl: 25_000, ttl_interval: 1000, limit: 2500 ]]), diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 696adb45b..e2a6875fe 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -123,10 +123,10 @@ defmodule Pleroma.User do following = follower.following |> List.delete(ap_followers) - { :ok, follower } = follower + {:ok, follower} = follower |> follow_changeset(%{following: following}) |> Repo.update - { :ok, follower, ActivityPub.fetch_latest_follow(follower, followed)} + {:ok, follower, ActivityPub.fetch_latest_follow(follower, followed)} else {:error, "Not subscribed!"} end diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index f4f04b1b6..bf04ffd05 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -101,7 +101,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do end) end - def unlike(%User{ap_id: ap_id}, %Object{data: %{ "id" => id}} = object) do + def unlike(%User{ap_id: ap_id}, %Object{data: %{"id" => id}} = object) do query = from activity in Activity, where: fragment("? @> ?", activity.data, ^%{actor: ap_id, object: id, type: "Like"}) @@ -157,7 +157,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do order_by: [desc: :inserted_at] query = Enum.reduce(recipients, query, fn (recipient, q) -> - map = %{ to: [recipient] } + map = %{to: [recipient]} from activity in q, or_where: fragment(~s(? @> ?), activity.data, ^map) end) @@ -258,7 +258,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do def fetch_activities_for_context(context) do query = from activity in Activity, - where: fragment("? @> ?", activity.data, ^%{ context: context }) + where: fragment("? @> ?", activity.data, ^%{context: context}) Repo.all(query) end diff --git a/lib/pleroma/web/ostatus/ostatus.ex b/lib/pleroma/web/ostatus/ostatus.ex index da0407aeb..f646b3049 100644 --- a/lib/pleroma/web/ostatus/ostatus.ex +++ b/lib/pleroma/web/ostatus/ostatus.ex @@ -99,7 +99,8 @@ defmodule Pleroma.Web.OStatus do end def get_attachments(entry) do - :xmerl_xpath.string('/entry/link[@rel="enclosure"]', entry) + xpath = :xmerl_xpath.string('/entry/link[@rel="enclosure"]', entry) + xpath |> Enum.map(fn (enclosure) -> with href when not is_nil(href) <- string_from_xpath("/link/@href", enclosure), type when not is_nil(type) <- string_from_xpath("/link/@type", enclosure) do @@ -121,12 +122,12 @@ defmodule Pleroma.Web.OStatus do [author] = :xmerl_xpath.string('//author[1]', doc) {:ok, actor} = find_make_or_update_user(author) - inReplyTo = string_from_xpath("//thr:in-reply-to[1]/@ref", entry) + in_reply_to = string_from_xpath("//thr:in-reply-to[1]/@ref", entry) - if !Object.get_cached_by_ap_id(inReplyTo) do - inReplyToHref = string_from_xpath("//thr:in-reply-to[1]/@href", entry) - if inReplyToHref do - fetch_activity_from_html_url(inReplyToHref) + if !Object.get_cached_by_ap_id(in_reply_to) do + in_reply_to_href = string_from_xpath("//thr:in-reply-to[1]/@href", entry) + if in_reply_to_href do + fetch_activity_from_html_url(in_reply_to_href) end end @@ -134,7 +135,7 @@ defmodule Pleroma.Web.OStatus do attachments = get_attachments(entry) - context = with %{data: %{"context" => context}} <- Object.get_cached_by_ap_id(inReplyTo) do + context = with %{data: %{"context" => context}} <- Object.get_cached_by_ap_id(in_reply_to) do context else _e -> if String.length(context) > 0 do @@ -148,8 +149,8 @@ defmodule Pleroma.Web.OStatus do "https://www.w3.org/ns/activitystreams#Public", User.ap_followers(actor) ] - - mentions = :xmerl_xpath.string('//link[@rel="mentioned" and @ostatus:object-type="http://activitystrea.ms/schema/1.0/person"]', entry) + xpath = :xmerl_xpath.string('//link[@rel="mentioned" and @ostatus:object-type="http://activitystrea.ms/schema/1.0/person"]', entry) + mentions = xpath |> Enum.map(fn(person) -> string_from_xpath("@href", person) end) to = to ++ mentions @@ -168,8 +169,8 @@ defmodule Pleroma.Web.OStatus do "attachment" => attachments } - object = if inReplyTo do - Map.put(object, "inReplyTo", inReplyTo) + object = if in_reply_to do + Map.put(object, "inReplyTo", in_reply_to) else object end @@ -245,7 +246,7 @@ defmodule Pleroma.Web.OStatus do def gather_user_info(username) do with {:ok, webfinger_data} <- WebFinger.finger(username), {:ok, feed_data} <- Websub.gather_feed_data(webfinger_data["topic"]) do - {:ok, Map.merge(webfinger_data, feed_data) |> Map.put("fqn", username)} + {:ok, webfinger_data |> Map.merge(feed_data) |> Map.put("fqn", username)} else e -> Logger.debug(fn -> "Couldn't gather info for #{username}" end) {:error, e} diff --git a/lib/pleroma/web/salmon/salmon.ex b/lib/pleroma/web/salmon/salmon.ex index b4f81b4ed..58b29462d 100644 --- a/lib/pleroma/web/salmon/salmon.ex +++ b/lib/pleroma/web/salmon/salmon.ex @@ -67,8 +67,8 @@ defmodule Pleroma.Web.Salmon do end def encode_key({:RSAPublicKey, modulus, exponent}) do - modulus_enc = :binary.encode_unsigned(modulus) |> Base.url_encode64 - exponent_enc = :binary.encode_unsigned(exponent) |> Base.url_encode64 + modulus_enc = modulus |> :binary.encode_unsigned |> Base.url_encode64 + exponent_enc = exponent |> :binary.encode_unsigned |> Base.url_encode64 "RSA.#{modulus_enc}.#{exponent_enc}" end @@ -139,7 +139,8 @@ defmodule Pleroma.Web.Salmon do def publish(user, activity, poster \\ &@httpoison.post/3) def publish(%{info: %{"keys" => keys}} = user, activity, poster) do - feed = ActivityRepresenter.to_simple_form(activity, user, true) + feed = activity + |> ActivityRepresenter.to_simple_form(user, true) |> ActivityRepresenter.wrap_with_entry |> :xmerl.export_simple(:xmerl_xml) |> to_string @@ -148,7 +149,8 @@ defmodule Pleroma.Web.Salmon do {:ok, private, _} = keys_from_pem(keys) {:ok, feed} = encode(private, feed) - remote_users(activity) + activity + |> remote_users |> Enum.each(fn(remote_user) -> Task.start(fn -> Logger.debug(fn -> "sending salmon to #{remote_user.ap_id}" end) diff --git a/lib/pleroma/web/twitter_api/controllers/status_controller.ex b/lib/pleroma/web/twitter_api/controllers/status_controller.ex index 2e44f24f0..f36b07550 100644 --- a/lib/pleroma/web/twitter_api/controllers/status_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/status_controller.ex @@ -84,6 +84,8 @@ defmodule Pleroma.Web.TwitterAPI.StatusController do end end + #TODO: DRY the code + def favorite(%{assigns: %{user: user}} = conn, %{"id" => id}) do case find_activity(conn, id) do {:not_found, response} -> response diff --git a/lib/pleroma/web/twitter_api/controllers/user_controller.ex b/lib/pleroma/web/twitter_api/controllers/user_controller.ex index 6a675208b..17be61698 100644 --- a/lib/pleroma/web/twitter_api/controllers/user_controller.ex +++ b/lib/pleroma/web/twitter_api/controllers/user_controller.ex @@ -9,6 +9,8 @@ defmodule Pleroma.Web.TwitterAPI.UserController do render conn, "show.json", %{user: user, for: user} end + #TODO: DRY the code + def follow(%{assigns: %{user: follower}} = conn, params) do case find_user(conn, params) do {:ok, followed = %User{}} -> diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 0ef40d2f8..6fe8c0ee7 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -12,7 +12,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do end def format_input(text, mentions) do - HtmlSanitizeEx.strip_tags(text) + text + |> HtmlSanitizeEx.strip_tags |> String.replace("\n", "
") |> add_user_links(mentions) end @@ -49,13 +50,13 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do to = to_for_user_and_mentions(user, mentions) date = Misc.make_date() - inReplyTo = get_replied_to_activity(data["in_reply_to_status_id"]) + in_reply_to = get_replied_to_activity(data["in_reply_to_status_id"]) # Wire up reply info. [to, context, object, additional] = - if inReplyTo do - context = inReplyTo.data["context"] - to = to ++ [inReplyTo.data["actor"]] + if in_reply_to do + context = in_reply_to.data["context"] + to = to ++ [in_reply_to.data["actor"]] object = %{ "type" => "Note", @@ -65,8 +66,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do "context" => context, "attachment" => attachments, "actor" => user.ap_id, - "inReplyTo" => inReplyTo.data["object"]["id"], - "inReplyToStatusId" => inReplyTo.id, + "inReplyTo" => in_reply_to.data["object"]["id"], + "inReplyToStatusId" => in_reply_to.id, } additional = %{} @@ -91,7 +92,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do # Modified from https://www.w3.org/TR/html5/forms.html#valid-e-mail-address regex = ~r/@[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*/ - Regex.scan(regex, text) + regex + |> Regex.scan(text) |> List.flatten |> Enum.uniq |> Enum.map(fn ("@" <> match = full_match) -> {full_match, User.get_cached_by_nickname(match)} end) diff --git a/lib/pleroma/web/twitter_api/views/status_view.ex b/lib/pleroma/web/twitter_api/views/status_view.ex index 751c5eaaf..9b1c661a3 100644 --- a/lib/pleroma/web/twitter_api/views/status_view.ex +++ b/lib/pleroma/web/twitter_api/views/status_view.ex @@ -6,11 +6,11 @@ defmodule Pleroma.Web.TwitterAPI.StatusView do def render( "show.json", - assigns = %{ + %{ activity: %Activity{ data: %{"type" => "Announce", "id" => id, "object" => ap_id} }, - }) do + } = assigns) do {activity, user} = render_activity(assigns) [announced_activity = %Activity{}] = Activity.all_by_object_ap_id(ap_id) @@ -29,10 +29,10 @@ defmodule Pleroma.Web.TwitterAPI.StatusView do def render( "show.json", - assigns = %{activity: %Activity{ + %{activity: %Activity{ data: %{"type" => "Like", "id" => id, "object" => liked_id} }, - }) do + } = assigns) do {activity, %User{nickname: nickname}} = render_activity(assigns) text = "#{nickname} favorited a status." [%Activity{id: liked_activity_id}] = Activity.all_by_object_ap_id(liked_id) @@ -47,11 +47,11 @@ defmodule Pleroma.Web.TwitterAPI.StatusView do def render( "show.json", - assigns = %{ + %{ activity: %Activity{ data: %{"type" => "Follow", "object" => followed_id} } - } + } = assigns ) do {activity, %User{nickname: follower_name}} = render_activity(assigns) %User{nickname: followed_name} = User.get_cached_by_ap_id(followed_id) @@ -65,16 +65,16 @@ defmodule Pleroma.Web.TwitterAPI.StatusView do def render( "show.json", - assigns = %{ + %{ activity: %Activity{ data: %{ "type" => "Create", "to" => to, - "object" => object = %{ + "object" => %{ "content" => content - } + } = object } } - } + } = assigns ) do announcement_count = object["announcement_count"] || 0 repeated = Misc.to_boolean(assigns[:for] && assigns[:for].ap_id in (object["announcements"] || [])) @@ -107,7 +107,7 @@ defmodule Pleroma.Web.TwitterAPI.StatusView do }) end - def render("timeline.json", assigns = %{activities: activities}) do + def render("timeline.json", %{activities: activities} = assigns) do render_many(activities, Pleroma.Web.TwitterAPI.StatusView, "show.json", Map.merge(assigns, %{as: :activity})) end diff --git a/lib/pleroma/web/twitter_api/views/user_view.ex b/lib/pleroma/web/twitter_api/views/user_view.ex index 60d802b01..e4c34eebd 100644 --- a/lib/pleroma/web/twitter_api/views/user_view.ex +++ b/lib/pleroma/web/twitter_api/views/user_view.ex @@ -2,7 +2,7 @@ defmodule Pleroma.Web.TwitterAPI.UserView do use Pleroma.Web, :view alias Pleroma.User - def render("show.json", assigns = %{user: user = %User{}}) do + def render("show.json", %{user: user = %User{}} = assigns) do image = User.avatar_url(user) following = if assigns[:for] do User.following?(assigns[:for], user) diff --git a/lib/pleroma/web/websub/websub.ex b/lib/pleroma/web/websub/websub.ex index 7c8efa917..e2939ac84 100644 --- a/lib/pleroma/web/websub/websub.ex +++ b/lib/pleroma/web/websub/websub.ex @@ -61,7 +61,8 @@ defmodule Pleroma.Web.Websub do end def sign(secret, doc) do - :crypto.hmac(:sha, secret, to_string(doc)) |> Base.encode16 |> String.downcase + encrypted_secret = :crypto.hmac(:sha, secret, to_string(doc)) + encrypted_secret |> Base.encode16 |> String.downcase end def incoming_subscription_request(user, %{"hub.mode" => "subscribe"} = params) do @@ -135,7 +136,7 @@ defmodule Pleroma.Web.Websub do hub: subscribed.info["hub"], subscribers: [subscriber.ap_id], state: "requested", - secret: :crypto.strong_rand_bytes(8) |> Base.url_encode64, + secret: Base.url_encode64(:crypto.strong_rand_bytes(8)), user: subscribed } Repo.insert(subscription) @@ -152,15 +153,15 @@ defmodule Pleroma.Web.Websub do hub when not is_nil(hub) <- XML.string_from_xpath(~S{/feed/link[@rel="hub"]/@href}, doc) do name = XML.string_from_xpath("/feed/author[1]/name", doc) - preferredUsername = XML.string_from_xpath("/feed/author[1]/poco:preferredUsername", doc) - displayName = XML.string_from_xpath("/feed/author[1]/poco:displayName", doc) + preferred_username = XML.string_from_xpath("/feed/author[1]/poco:preferredUsername", doc) + display_name = XML.string_from_xpath("/feed/author[1]/poco:displayName", doc) avatar = OStatus.make_avatar_object(doc) {:ok, %{ "uri" => uri, "hub" => hub, - "nickname" => preferredUsername || name, - "name" => displayName || name, + "nickname" => preferred_username || name, + "name" => display_name || name, "host" => URI.parse(uri).host, "avatar" => avatar }} diff --git a/test/object_test.exs b/test/object_test.exs index ae9515c26..5eb9b7530 100644 --- a/test/object_test.exs +++ b/test/object_test.exs @@ -16,7 +16,7 @@ defmodule Pleroma.ObjectTest do cs = Object.change(%Object{}, %{data: %{id: object.data["id"]}}) assert cs.valid? - {:error, result} = Repo.insert(cs) + {:error, _result} = Repo.insert(cs) end end end diff --git a/test/user_test.exs b/test/user_test.exs index b87d31862..56f22ec07 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -9,11 +9,6 @@ defmodule Pleroma.UserTest do import Ecto.Query test "ap_id returns the activity pub id for the user" do - host = - Application.get_env(:pleroma, Pleroma.Web.Endpoint) - |> Keyword.fetch!(:url) - |> Keyword.fetch!(:host) - user = UserBuilder.build expected_ap_id = "#{Pleroma.Web.base_url}/users/#{user.nickname}" diff --git a/test/web/ostatus/activity_representer_test.exs b/test/web/ostatus/activity_representer_test.exs index 969b2a854..91a9c194b 100644 --- a/test/web/ostatus/activity_representer_test.exs +++ b/test/web/ostatus/activity_representer_test.exs @@ -80,7 +80,7 @@ defmodule Pleroma.Web.OStatus.ActivityRepresenterTest do user = insert(:user) object = Object.get_cached_by_ap_id(note.data["object"]["id"]) - {:ok, announce, object} = ActivityPub.announce(user, object) + {:ok, announce, _object} = ActivityPub.announce(user, object) announce = Repo.get(Activity, announce.id) diff --git a/test/web/salmon/salmon_test.exs b/test/web/salmon/salmon_test.exs index 326bcf525..97287a32e 100644 --- a/test/web/salmon/salmon_test.exs +++ b/test/web/salmon/salmon_test.exs @@ -84,7 +84,7 @@ defmodule Pleroma.Web.Salmon.SalmonTest do user = Repo.get_by(User, ap_id: activity.data["actor"]) {:ok, user} = Pleroma.Web.WebFinger.ensure_keys_present(user) - poster = fn (url, data, headers) -> + poster = fn (url, _data, _headers) -> assert url == "http://example.org/salmon" end Salmon.publish(user, activity, poster) diff --git a/test/web/twitter_api/twitter_api_controller_test.exs b/test/web/twitter_api/twitter_api_controller_test.exs index a3d236d9f..48e559c66 100644 --- a/test/web/twitter_api/twitter_api_controller_test.exs +++ b/test/web/twitter_api/twitter_api_controller_test.exs @@ -7,6 +7,8 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do import Pleroma.Factory + # TODO: separate into individual controller tests + describe "POST /api/account/verify_credentials" do setup [:valid_user] test "without valid credentials", %{conn: conn} do diff --git a/test/web/twitter_api/views/status_view_test.exs b/test/web/twitter_api/views/status_view_test.exs index 647b003f4..ac01f06c9 100644 --- a/test/web/twitter_api/views/status_view_test.exs +++ b/test/web/twitter_api/views/status_view_test.exs @@ -3,7 +3,6 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenterTest do alias Pleroma.{User, Activity, Object} alias Pleroma.Web.TwitterAPI.{AttachmentView, UserView, StatusView} alias Pleroma.Web.ActivityPub.ActivityPub - alias Pleroma.Builders.UserBuilder import Pleroma.Factory test "an announce activity" do @@ -45,7 +44,7 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenterTest do end test "an activity" do - {:ok, user} = UserBuilder.insert + user = insert(:user, %{nickname: "dtluna"}) # {:ok, mentioned_user } = UserBuilder.insert(%{nickname: "shp", ap_id: "shp"}) mentioned_user = insert(:user, %{nickname: "shp"}) @@ -105,7 +104,6 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenterTest do "id" => activity.id, "user" => UserView.render("show.json", %{user: user, for: follower}), "is_local" => true, - "attentions" => [], "statusnet_html" => content_html, "text" => content, "is_post_verb" => true, diff --git a/test/web/websub/websub_test.exs b/test/web/websub/websub_test.exs index 48774dc69..17ebd004c 100644 --- a/test/web/websub/websub_test.exs +++ b/test/web/websub/websub_test.exs @@ -172,6 +172,6 @@ defmodule Pleroma.Web.WebsubTest do signed = Websub.sign("secret", "text") assert signed == "B8392C23690CCF871F37EC270BE1582DEC57A503" |> String.downcase - signed = Websub.sign("secret", [["て"], ['す']]) + Websub.sign("secret", [["て"], ['す']]) end end