12
lib/web/cache/cache.ex
vendored
12
lib/web/cache/cache.ex
vendored
@@ -10,21 +10,9 @@ defmodule Mobilizon.Web.Cache do
|
||||
alias Mobilizon.Resources.Resource
|
||||
alias Mobilizon.Todos.{Todo, TodoList}
|
||||
alias Mobilizon.Web.Cache.ActivityPub
|
||||
import Mobilizon.Service.Guards, only: [is_valid_string: 1]
|
||||
|
||||
@caches [:activity_pub, :feed, :ics]
|
||||
|
||||
@type local_actor :: %Actor{domain: nil}
|
||||
|
||||
@doc """
|
||||
Clears all caches for a local actor.
|
||||
"""
|
||||
@spec clear_cache(%Actor{domain: nil, preferred_username: String.t()}) :: :ok
|
||||
def clear_cache(%Actor{preferred_username: preferred_username, domain: nil})
|
||||
when is_valid_string(preferred_username) do
|
||||
Enum.each(@caches, &Cachex.del(&1, "actor_" <> preferred_username))
|
||||
end
|
||||
|
||||
@spec get_actor_by_name(binary) :: {:commit, Actor.t()} | {:ignore, nil}
|
||||
defdelegate get_actor_by_name(name), to: ActivityPub
|
||||
@spec get_local_actor_by_name(binary) :: {:commit, Actor.t()} | {:ignore, nil}
|
||||
|
||||
@@ -15,9 +15,9 @@ defmodule Mobilizon.Web.Email.Admin do
|
||||
|
||||
alias Mobilizon.Web.Email
|
||||
|
||||
@spec report(User.t(), Report.t(), String.t()) :: Bamboo.Email.t()
|
||||
def report(%User{email: email} = user, %Report{} = report, default_locale \\ "en") do
|
||||
locale = Map.get(user, :locale, default_locale)
|
||||
@spec report(User.t(), Report.t()) :: Bamboo.Email.t()
|
||||
def report(%User{email: email} = user, %Report{} = report) do
|
||||
locale = Map.get(user, :locale, "en")
|
||||
Gettext.put_locale(locale)
|
||||
|
||||
subject =
|
||||
|
||||
@@ -11,11 +11,11 @@ defmodule Mobilizon.Web.Email.Checker do
|
||||
@spec valid?(String.t()) :: boolean
|
||||
def valid?(email), do: email =~ @email_regex
|
||||
|
||||
@spec validate_changeset(Ecto.Changeset.t(), atom()) :: Ecto.Changeset.t()
|
||||
def validate_changeset(%Ecto.Changeset{} = changeset, key \\ :email) do
|
||||
@spec validate_changeset(Ecto.Changeset.t()) :: Ecto.Changeset.t()
|
||||
def validate_changeset(%Ecto.Changeset{} = changeset) do
|
||||
changeset = Ecto.Changeset.validate_length(changeset, :email, min: 3, max: 250)
|
||||
|
||||
case Ecto.Changeset.fetch_change(changeset, key) do
|
||||
case Ecto.Changeset.fetch_change(changeset, :email) do
|
||||
{:ok, email} ->
|
||||
if valid?(email),
|
||||
do: changeset,
|
||||
|
||||
@@ -15,17 +15,15 @@ defmodule Mobilizon.Web.Email.Group do
|
||||
@doc """
|
||||
Send emails to local user
|
||||
"""
|
||||
@spec send_invite_to_user(Member.t(), String.t()) :: :ok
|
||||
def send_invite_to_user(member, locale \\ "en")
|
||||
def send_invite_to_user(%Member{actor: %Actor{user_id: nil}}, _locale), do: :ok
|
||||
@spec send_invite_to_user(Member.t()) :: :ok
|
||||
def send_invite_to_user(%Member{actor: %Actor{user_id: nil}}), do: :ok
|
||||
|
||||
def send_invite_to_user(
|
||||
%Member{actor: %Actor{user_id: user_id}, parent: %Actor{} = group, role: :invited} =
|
||||
member,
|
||||
locale
|
||||
member
|
||||
) do
|
||||
with %User{email: email} = user <- Users.get_user!(user_id) do
|
||||
locale = Map.get(user, :locale, locale)
|
||||
locale = Map.get(user, :locale, "en")
|
||||
Gettext.put_locale(locale)
|
||||
%Actor{name: invited_by_name} = inviter = Actors.get_actor(member.invited_by_id)
|
||||
|
||||
|
||||
@@ -144,10 +144,11 @@ defmodule Mobilizon.Web.Email.User do
|
||||
end
|
||||
end
|
||||
|
||||
def send_email_reset_old_email(
|
||||
%User{locale: user_locale, email: email, unconfirmed_email: unconfirmed_email} = _user,
|
||||
_locale \\ "en"
|
||||
) do
|
||||
def send_email_reset_old_email(%User{
|
||||
locale: user_locale,
|
||||
email: email,
|
||||
unconfirmed_email: unconfirmed_email
|
||||
}) do
|
||||
Gettext.put_locale(user_locale)
|
||||
|
||||
subject =
|
||||
@@ -163,14 +164,11 @@ defmodule Mobilizon.Web.Email.User do
|
||||
|> render(:email_changed_old)
|
||||
end
|
||||
|
||||
def send_email_reset_new_email(
|
||||
%User{
|
||||
locale: user_locale,
|
||||
unconfirmed_email: unconfirmed_email,
|
||||
confirmation_token: confirmation_token
|
||||
} = _user,
|
||||
_locale \\ "en"
|
||||
) do
|
||||
def send_email_reset_new_email(%User{
|
||||
locale: user_locale,
|
||||
unconfirmed_email: unconfirmed_email,
|
||||
confirmation_token: confirmation_token
|
||||
}) do
|
||||
Gettext.put_locale(user_locale)
|
||||
|
||||
subject =
|
||||
|
||||
@@ -17,9 +17,6 @@ defmodule Mobilizon.Web.ReverseProxy do
|
||||
@max_body_length :infinity
|
||||
@methods ~w(GET HEAD)
|
||||
|
||||
def max_read_duration_default, do: @max_read_duration
|
||||
def default_cache_control_header, do: @default_cache_control_header
|
||||
|
||||
@moduledoc """
|
||||
A reverse proxy.
|
||||
|
||||
|
||||
@@ -36,22 +36,6 @@ defmodule Mobilizon.Web.Upload.MIME do
|
||||
end)
|
||||
end
|
||||
|
||||
def bin_mime_type(binary, filename) do
|
||||
with {:ok, content_type} <- bin_mime_type(binary),
|
||||
filename <- fix_extension(filename, content_type) do
|
||||
{:ok, content_type, filename}
|
||||
end
|
||||
end
|
||||
|
||||
@spec bin_mime_type(binary()) :: {:ok, String.t()} | {:error, :unknown_mime}
|
||||
def bin_mime_type(<<head::binary-size(@read_bytes), _::binary>>) do
|
||||
{:ok, check_mime_type(head)}
|
||||
end
|
||||
|
||||
def bin_mime_type(_), do: {:error, :unknown_mime}
|
||||
|
||||
def mime_type(<<_::binary>>), do: {:ok, @default}
|
||||
|
||||
defp fix_extension(filename, content_type)
|
||||
when is_binary(filename) and is_binary(content_type) do
|
||||
parts = String.split(filename, ".")
|
||||
|
||||
@@ -94,19 +94,21 @@ defmodule Mobilizon.Web.Upload do
|
||||
end
|
||||
end
|
||||
|
||||
@spec remove(String.t(), Keyword.t()) ::
|
||||
{:ok, String.t()} | {:error, atom} | {:error, String.t()}
|
||||
def remove(url, opts \\ []) do
|
||||
with opts <- get_opts(opts),
|
||||
%URI{path: "/media/" <> path, host: host} <- URI.parse(url),
|
||||
{:same_host, true} <- {:same_host, host == Endpoint.host()} do
|
||||
Uploader.remove_file(opts.uploader, path)
|
||||
else
|
||||
%URI{} = _uri ->
|
||||
{:error, "URL doesn't match pattern"}
|
||||
@spec remove(String.t()) :: {:ok, String.t()} | {:error, atom}
|
||||
def remove(url) do
|
||||
%{uploader: uploader} = get_opts([])
|
||||
|
||||
{:same_host, _} ->
|
||||
Logger.error("Media can't be deleted because its URL doesn't match current host")
|
||||
case URI.parse(url) do
|
||||
%URI{path: "/media/" <> path, host: host} ->
|
||||
if host == Endpoint.host() do
|
||||
Uploader.remove_file(uploader, path)
|
||||
else
|
||||
Logger.error("Media can't be deleted because its URL doesn't match current host")
|
||||
{:error, :not_same_host}
|
||||
end
|
||||
|
||||
%URI{} = _uri ->
|
||||
{:error, :url_invalid}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user