diff --git a/config/config.exs b/config/config.exs index e6c695215..bd714a189 100644 --- a/config/config.exs +++ b/config/config.exs @@ -50,7 +50,8 @@ name: "Pleroma", email: "example@example.com", limit: 5000, - registrations_open: true + registrations_open: true, + federating: true config :pleroma, :media_proxy, enabled: false, diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index c3fce17de..a503a5b3f 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -99,7 +99,7 @@ def update_changeset(struct, params \\ %{}) do |> cast(params, [:bio, :name]) |> unique_constraint(:nickname) |> validate_format(:nickname, ~r/^[a-zA-Z\d]+$/) - |> validate_length(:bio, min: 1, max: 5000) + |> validate_length(:bio, max: 1000) |> validate_length(:name, min: 1, max: 100) end @@ -134,13 +134,13 @@ def reset_password(user, data) do def register_changeset(struct, params \\ %{}) do changeset = struct |> cast(params, [:bio, :email, :name, :nickname, :password, :password_confirmation]) - |> validate_required([:bio, :email, :name, :nickname, :password, :password_confirmation]) + |> validate_required([:email, :name, :nickname, :password, :password_confirmation]) |> validate_confirmation(:password) |> unique_constraint(:email) |> unique_constraint(:nickname) |> validate_format(:nickname, ~r/^[a-zA-Z\d]+$/) |> validate_format(:email, @email_regex) - |> validate_length(:bio, min: 1, max: 1000) + |> validate_length(:bio, max: 1000) |> validate_length(:name, min: 1, max: 100) if changeset.valid? do diff --git a/lib/pleroma/web/federator/federator.ex b/lib/pleroma/web/federator/federator.ex index 0b9808b8f..daf836a40 100644 --- a/lib/pleroma/web/federator/federator.ex +++ b/lib/pleroma/web/federator/federator.ex @@ -10,6 +10,8 @@ defmodule Pleroma.Web.Federator do @websub Application.get_env(:pleroma, :websub) @ostatus Application.get_env(:pleroma, :ostatus) @httpoison Application.get_env(:pleroma, :httpoison) + @instance Application.get_env(:pleroma, :instance) + @federating Keyword.get(@instance, :federating) @max_jobs 10 def start_link do @@ -107,10 +109,12 @@ def handle(type, _) do end def enqueue(type, payload, priority \\ 1) do - if Mix.env == :test do - handle(type, payload) - else - GenServer.cast(__MODULE__, {:enqueue, type, payload, priority}) + if @federating do + if Mix.env == :test do + handle(type, payload) + else + GenServer.cast(__MODULE__, {:enqueue, type, payload, priority}) + end end end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 8d93e1ea6..520ac4a8c 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -3,6 +3,9 @@ defmodule Pleroma.Web.Router do alias Pleroma.{Repo, User, Web.Router} + @instance Application.get_env(:pleroma, :instance) + @federating Keyword.get(@instance, :federating) + def user_fetcher(username) do {:ok, Repo.get_by(User, %{nickname: username})} end @@ -228,13 +231,16 @@ def user_fetcher(username) do get "/objects/:uuid", OStatus.OStatusController, :object get "/activities/:uuid", OStatus.OStatusController, :activity get "/notice/:id", OStatus.OStatusController, :notice - get "/users/:nickname/feed", OStatus.OStatusController, :feed get "/users/:nickname", OStatus.OStatusController, :feed_redirect - post "/users/:nickname/salmon", OStatus.OStatusController, :salmon_incoming - post "/push/hub/:nickname", Websub.WebsubController, :websub_subscription_request - get "/push/subscriptions/:id", Websub.WebsubController, :websub_subscription_confirmation - post "/push/subscriptions/:id", Websub.WebsubController, :websub_incoming + + if @federating do + post "/users/:nickname/salmon", OStatus.OStatusController, :salmon_incoming + post "/push/hub/:nickname", Websub.WebsubController, :websub_subscription_request + get "/push/subscriptions/:id", Websub.WebsubController, :websub_subscription_confirmation + post "/push/subscriptions/:id", Websub.WebsubController, :websub_incoming + end + end pipeline :activitypub do @@ -242,17 +248,19 @@ def user_fetcher(username) do plug Pleroma.Web.Plugs.HTTPSignaturePlug end - scope "/", Pleroma.Web.ActivityPub do - pipe_through :activitypub - post "/users/:nickname/inbox", ActivityPubController, :inbox - post "/inbox", ActivityPubController, :inbox - end + if @federating do + scope "/", Pleroma.Web.ActivityPub do + pipe_through :activitypub + post "/users/:nickname/inbox", ActivityPubController, :inbox + post "/inbox", ActivityPubController, :inbox + end - scope "/.well-known", Pleroma.Web do - pipe_through :well_known + scope "/.well-known", Pleroma.Web do + pipe_through :well_known - get "/host-meta", WebFinger.WebFingerController, :host_meta - get "/webfinger", WebFinger.WebFingerController, :webfinger + get "/host-meta", WebFinger.WebFingerController, :host_meta + get "/webfinger", WebFinger.WebFingerController, :webfinger + end end scope "/", Pleroma.Web.MastodonAPI do diff --git a/test/user_test.exs b/test/user_test.exs index 100b3d0a0..35de0a7ce 100644 --- a/test/user_test.exs +++ b/test/user_test.exs @@ -102,13 +102,14 @@ test "test if a user is following another user" do email: "email@example.com" } - test "it requires a bio, email, name, nickname and password" do + test "it requires an email, name, nickname and password, bio is optional" do @full_user_data |> Map.keys |> Enum.each(fn (key) -> params = Map.delete(@full_user_data, key) changeset = User.register_changeset(%User{}, params) - assert changeset.valid? == false + + assert (if key == :bio, do: changeset.valid?, else: not changeset.valid?) end) end