diff --git a/lib/clacks/activitypub.ex b/lib/clacks/activitypub.ex index de96d2b..54b6f31 100644 --- a/lib/clacks/activitypub.ex +++ b/lib/clacks/activitypub.ex @@ -113,7 +113,7 @@ defmodule Clacks.ActivityPub do @spec follow( actor :: String.t(), followee :: String.t(), - published :: NaiveDateTime.t(), + published :: DateTime.t(), state :: String.t() ) :: map() diff --git a/lib/clacks_web/controllers/activities_controller.ex b/lib/clacks_web/controllers/activities_controller.ex index f14b5e7..e054a20 100644 --- a/lib/clacks_web/controllers/activities_controller.ex +++ b/lib/clacks_web/controllers/activities_controller.ex @@ -1,6 +1,6 @@ defmodule ClacksWeb.ActivitiesController do use ClacksWeb, :controller - alias Clacks.{ActivityPub, Activity} + alias Clacks.Activity alias ClacksWeb.Router.Helpers, as: Routes alias ClacksWeb.Endpoint diff --git a/lib/clacks_web/controllers/frontend_controller.ex b/lib/clacks_web/controllers/frontend_controller.ex index 00d356e..1eabc9a 100644 --- a/lib/clacks_web/controllers/frontend_controller.ex +++ b/lib/clacks_web/controllers/frontend_controller.ex @@ -40,7 +40,7 @@ defmodule ClacksWeb.FrontendController do _ -> # otherwise show local timeline - index(:local_timeline, conn) + index(:local_timeline, conn, params) end end @@ -251,12 +251,12 @@ defmodule ClacksWeb.FrontendController do }) end - def post_status(conn, %{"content" => content} = params) do + def post_status(conn, %{"content" => _content} = params) do current_user = conn.assigns[:user] |> Repo.preload(:actor) note = note_for_posting(current_user, params) note_changeset = Object.changeset_for_creating(note) - {:ok, object} = Repo.insert(note_changeset) + {:ok, _object} = Repo.insert(note_changeset) create = ActivityPub.create(note) {:ok, activity} = ActivityPub.Helper.save_and_federate(create, current_user.actor) @@ -306,7 +306,8 @@ defmodule ClacksWeb.FrontendController do Repo.one(query) end - @spec following_state(follower :: Actor.t(), followee :: Actor.t()) :: boolean() + @spec following_state(follower :: Actor.t(), followee :: Actor.t()) :: + :following | :not_following | :pending defp following_state(follower, followee) do case follow_activity(follower, followee) do %Activity{data: %{"state" => "pending"}} -> diff --git a/lib/clacks_web/controllers/objects_controller.ex b/lib/clacks_web/controllers/objects_controller.ex index d8bd7fc..5b51baa 100644 --- a/lib/clacks_web/controllers/objects_controller.ex +++ b/lib/clacks_web/controllers/objects_controller.ex @@ -1,9 +1,8 @@ defmodule ClacksWeb.ObjectsController do use ClacksWeb, :controller - alias Clacks.{Repo, Activity, Object, ActivityPub} + alias Clacks.{Activity, Object} alias ClacksWeb.Router.Helpers, as: Routes alias ClacksWeb.Endpoint - import Ecto.Query def get(conn, params) do case conn.assigns[:format] do diff --git a/lib/clacks_web/controllers/outbox_controller.ex b/lib/clacks_web/controllers/outbox_controller.ex index 4a985a8..3b4ba2f 100644 --- a/lib/clacks_web/controllers/outbox_controller.ex +++ b/lib/clacks_web/controllers/outbox_controller.ex @@ -1,7 +1,6 @@ defmodule ClacksWeb.OutboxController do use ClacksWeb, :controller - alias Clacks.{Repo, Actor, Activity, Timeline} - import Ecto.Query + alias Clacks.{Actor, Timeline} @context "https://www.w3.org/ns/activitystreams" @@ -19,10 +18,10 @@ defmodule ClacksWeb.OutboxController do end end - def outbox(conn, params) when params == %{} do + def outbox(conn, %{} = params) do actor = conn.assigns[:actor] - activities = Timeline.actor_timeline(actor, true, params) + activities = Timeline.actor_timeline(actor, params, true) data = %{ "@context" => @context, @@ -39,7 +38,7 @@ defmodule ClacksWeb.OutboxController do def outbox(conn, params) do actor = conn.assigns[:actor] - activities = Timeline.actor_timeline(actor, true, params) + activities = Timeline.actor_timeline(actor, params, true) data = outbox_page(conn, params, activities) diff --git a/lib/clacks_web/plug/web_authenticate.ex b/lib/clacks_web/plug/web_authenticate.ex index 29c0345..d07be42 100644 --- a/lib/clacks_web/plug/web_authenticate.ex +++ b/lib/clacks_web/plug/web_authenticate.ex @@ -8,7 +8,7 @@ defmodule ClacksWeb.Plug.WebAuthenticate do when on_failure_action in [:redirect_to_login, :pass], do: opts - def init(opts) do + def init(_opts) do [on_failure: :redirect_to_login] end diff --git a/lib/clacks_web/templates/frontend/search.html.eex b/lib/clacks_web/templates/frontend/search.html.eex index e4ae6c5..d3e8099 100644 --- a/lib/clacks_web/templates/frontend/search.html.eex +++ b/lib/clacks_web/templates/frontend/search.html.eex @@ -22,7 +22,7 @@ <% end %> <% end %> -<%= if length(@status_results) do %> +<%= if length(@status_results) > 0 do %>
<%= for {status, author} <- @status_results do %> diff --git a/lib/clacks_web/templates/layout/app.html.eex b/lib/clacks_web/templates/layout/app.html.eex index 1fefa6f..bb47bb7 100644 --- a/lib/clacks_web/templates/layout/app.html.eex +++ b/lib/clacks_web/templates/layout/app.html.eex @@ -23,7 +23,7 @@ Logged in as <%= @user.username %>.
  • - <%= form_for @conn, Routes.login_path(@conn, :logout), [method: :post], fn f -> %> + <%= form_tag Routes.login_path(@conn, :logout), [method: :post] do %> <%= submit "Log Out", class: "btn-link" %> <% end %>
  • diff --git a/lib/clacks_web/views/frontend_view.ex b/lib/clacks_web/views/frontend_view.ex index 0444d37..9c39124 100644 --- a/lib/clacks_web/views/frontend_view.ex +++ b/lib/clacks_web/views/frontend_view.ex @@ -20,7 +20,7 @@ defmodule ClacksWeb.FrontendView do def local_actor_link(%Actor{local: false, id: id}), do: Routes.frontend_path(Endpoint, :actor, id) - @spec display_timestamp(str :: String.t()) :: String.t() + @spec display_timestamp(datetime :: String.t() | DateTime.t() | NaiveDateTime.t()) :: String.t() def display_timestamp(str) when is_binary(str) do display_timestamp(Timex.parse!(str, "{ISO:Extended}")) @@ -52,7 +52,7 @@ defmodule ClacksWeb.FrontendView do end @spec prev_page_path(conn :: Plug.Conn.t(), [Activity.t() | {Activity.t(), Actor.t()}]) :: - String.t() + String.t() | nil def prev_page_path(conn, activities) do if Map.has_key?(conn.query_params, "max_id") do @@ -65,7 +65,7 @@ defmodule ClacksWeb.FrontendView do end @spec next_page_path(conn :: Plug.Conn.t(), [Activity.t() | {Activity.t(), Actor.t()}]) :: - String.t() + String.t() | nil def next_page_path(conn, activities) do if length(activities) < 20 do diff --git a/lib/mix/tasks/clacks/user.ex b/lib/mix/tasks/clacks/user.ex index 2a85718..4b9bd14 100644 --- a/lib/mix/tasks/clacks/user.ex +++ b/lib/mix/tasks/clacks/user.ex @@ -1,6 +1,6 @@ defmodule Mix.Tasks.Clacks.User do use Mix.Task - alias Clacks.{Repo, User, Actor, Keys, ActivityPub} + alias Clacks.{Repo, User, Keys, ActivityPub} @shortdoc "Creates a new user" def run(["create"]) do @@ -41,7 +41,7 @@ defmodule Mix.Tasks.Clacks.User do data: ActivityPub.actor(uri, username, username, public_key_pem) }) - {:ok, actor} = Repo.insert(actor) + {:ok, _actor} = Repo.insert(actor) IO.puts("User #{username} successfully created") end @@ -57,7 +57,7 @@ defmodule Mix.Tasks.Clacks.User do changeset = User.change_password_changeset(user, %{password: password}) - {:ok, user} = Repo.update(changeset) + {:ok, _user} = Repo.update(changeset) IO.puts("Password updated") end diff --git a/mix.exs b/mix.exs index 1da63b9..5ea6360 100644 --- a/mix.exs +++ b/mix.exs @@ -51,7 +51,8 @@ defmodule Clacks.MixProject do {:timex, "~> 3.6.1"}, {:bcrypt_elixir, "~> 2.0"}, {:oban, "~> 1.2.0"}, - {:fast_sanitize, "~> 0.1.7"} + {:fast_sanitize, "~> 0.1.7"}, + {:dialyxir, "~> 1.0", only: [:dev], runtime: false} ] end diff --git a/mix.lock b/mix.lock index d4a8547..991c9be 100644 --- a/mix.lock +++ b/mix.lock @@ -10,9 +10,11 @@ "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, "db_connection": {:hex, :db_connection, "2.1.1", "a51e8a2ee54ef2ae6ec41a668c85787ed40cb8944928c191280fe34c15b76ae5", [:mix], [{:connection, "~> 1.0.2", [hex: :connection, repo: "hexpm", optional: false]}], "hexpm", "5a0e8c1c722dbcd31c0cbd1906b1d1074c863d335c295e4b994849b65a1fbe47"}, "decimal": {:hex, :decimal, "1.8.0", "ca462e0d885f09a1c5a342dbd7c1dcf27ea63548c65a65e67334f4b61803822e", [:mix], [], "hexpm", "52694ef56e60108e5012f8af9673874c66ed58ac1c4fae9b5b7ded31786663f5"}, + "dialyxir": {:hex, :dialyxir, "1.0.0", "6a1fa629f7881a9f5aaf3a78f094b2a51a0357c843871b8bc98824e7342d00a5", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "aeb06588145fac14ca08d8061a142d52753dbc2cf7f0d00fc1013f53f8654654"}, "ecto": {:hex, :ecto, "3.2.1", "a0f9af0fb50b19d3bb6237e512ac0ba56ea222c2bbea92e7c6c94897932c76ba", [:mix], [{:decimal, "~> 1.6", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "e1a1a1d72514b880d6bdd9fe9423d13a800ec1fb041c7239d885e5407b1fabce"}, "ecto_sql": {:hex, :ecto_sql, "3.2.0", "751cea597e8deb616084894dd75cbabfdbe7255ff01e8c058ca13f0353a3921b", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.2.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.2.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a2e23cf761668126252418cae07eff7967ad0152fbc5e2d0dc3de487a5ec774c"}, "elixir_make": {:hex, :elixir_make, "0.6.0", "38349f3e29aff4864352084fc736fa7fa0f2995a819a737554f7ebd28b85aaab", [:mix], [], "hexpm", "d522695b93b7f0b4c0fcb2dfe73a6b905b1c301226a5a55cb42e5b14d509e050"}, + "erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"}, "fast_html": {:hex, :fast_html, "1.0.3", "2cc0d4b68496266a1530e0c852cafeaede0bd10cfdee26fda50dc696c203162f", [:make, :mix], [], "hexpm", "ab3d782b639d3c4655fbaec0f9d032c91f8cab8dd791ac7469c2381bc7c32f85"}, "fast_sanitize": {:hex, :fast_sanitize, "0.1.7", "2a7cd8734c88a2de6de55022104f8a3b87f1fdbe8bbf131d9049764b53d50d0d", [:mix], [{:fast_html, "~> 1.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "f39fe8ea08fbac17487c30bf09b7d9f3e12472e51fb07a88ffeb8fd17da8ab67"}, "file_system": {:hex, :file_system, "0.2.7", "e6f7f155970975789f26e77b8b8d8ab084c59844d8ecfaf58cbda31c494d14aa", [:mix], [], "hexpm", "b4cfa2d69c7f0b18fd06db222b2398abeef743a72504e6bd7df9c52f171b047f"},