Improve profile registration

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2020-10-06 09:54:07 +02:00
parent d791e1bf61
commit 05e5fc35d5
42 changed files with 1399 additions and 612 deletions

71
lib/web/email/follow.ex Normal file
View File

@@ -0,0 +1,71 @@
defmodule Mobilizon.Web.Email.Follow do
@moduledoc """
Handles emails sent about (instance) follow.
"""
use Bamboo.Phoenix, view: Mobilizon.Web.EmailView
import Bamboo.Phoenix
import Mobilizon.Web.Gettext
alias Mobilizon.Users
alias Mobilizon.Actors.{Actor, Follower}
alias Mobilizon.Federation.ActivityPub.Relay
alias Mobilizon.Users.User
alias Mobilizon.Web.{Email, Gettext}
@doc """
Send follow notification to admins if the followed actor
"""
@spec send_notification_to_admins(Follower.t()) :: :ok
def send_notification_to_admins(
%Follower{
# approved: false,
actor: %Actor{} = follower,
target_actor: %Actor{id: target_actor_id}
} = _follow
) do
relay_actor = Relay.get_actor()
if relay_actor.id == target_actor_id do
Enum.each(Users.list_admins(), fn admin ->
send_notification_to_admin(admin, follower)
end)
end
:ok
end
def send_notification_to_admins(_), do: :ok
defp send_notification_to_admin(
%User{email: email, locale: locale},
%Actor{type: follower_type} = follower
) do
Gettext.put_locale(locale)
subject =
if follower_type == :Application do
gettext(
"Instance %{name} (%{domain}) requests to follow your instance",
name: follower.name,
domain: follower.domain
)
else
gettext(
"%{name} requests to follow your instance",
name: Actor.display_name_and_username(follower)
)
end
Email.base_email(to: email, subject: subject)
|> assign(:locale, locale)
|> assign(:follower, follower)
|> assign(:subject, subject)
|> render(:instance_follow)
|> Email.Mailer.deliver_later()
:ok
end
defp send_notification_to_admin(_, _), do: :ok
end

View File

@@ -0,0 +1,83 @@
<!-- HERO -->
<tr>
<td bgcolor="#474467" align="center" style="padding: 0px 10px 0px 10px;">
<!--[if (gte mso 9)|(IE)]>
<table align="center" border="0" cellspacing="0" cellpadding="0" width="600">
<tr>
<td align="center" valign="top" width="600">
<![endif]-->
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;" >
<tr>
<td bgcolor="#ffffff" align="center" valign="top" style="padding: 40px 20px 20px 20px; border-radius: 4px 4px 0px 0px; color: #3A384C; font-family: 'Roboto', Helvetica, Arial, sans-serif; font-size: 48px; font-weight: 400; line-height: 48px;">
<h1 style="font-size: 48px; font-weight: 400; margin: 0;">
<%= gettext "Want to connect?" %>
</h1>
</td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>
<!-- COPY BLOCK -->
<tr>
<td bgcolor="#E6E4F4" align="center" style="padding: 0px 10px 0px 10px;">
<!--[if (gte mso 9)|(IE)]>
<table align="center" border="0" cellspacing="0" cellpadding="0" width="600">
<tr>
<td align="center" valign="top" width="600">
<![endif]-->
<table border="0" cellpadding="0" cellspacing="0" width="100%" style="max-width: 600px;" >
<!-- COPY -->
<tr>
<td bgcolor="#ffffff" align="left" style="padding: 20px 30px 0px 30px; color: #474467; font-family: 'Roboto', Helvetica, Arial, sans-serif; font-size: 18px; font-weight: 400; line-height: 25px;" >
<p style="margin: 0;">
<%= gettext("<b>%{name} (%{domain})</b> just requested to follow your instance. If you accept, this instance will receive all of your instance's public events.", name: @follower.name, domain: @follower.domain) |> raw %>
</p>
</td>
</tr>
<tr>
<td bgcolor="#ffffff" align="left" style="padding: 20px 30px 0px 30px; color: #474467; font-family: 'Roboto', Helvetica, Arial, sans-serif; font-size: 18px; font-weight: 400; line-height: 25px;" >
<p style="margin: 0;">
<%= gettext("Note: %{name} (%{domain}) following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too.") %>
</p>
</td>
</tr>
<tr>
<td bgcolor="#ffffff" align="left" style="padding: 20px 30px 40px 30px; color: #474467; font-family: 'Roboto', Helvetica, Arial, sans-serif; font-size: 18px; font-weight: 400; line-height: 25px;" >
<p style="margin: 0">
<%= gettext "To accept this invitation, head over to the instance's admin settings." %>
</p>
</td>
</tr>
<!-- BULLETPROOF BUTTON -->
<tr>
<td bgcolor="#ffffff" align="left">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#ffffff" align="center" style="padding: 20px 30px 60px 30px;">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center" style="border-radius: 3px;" bgcolor="#3C376E">
<a href="<%= "#{Mobilizon.Web.Endpoint.url()}/settings/admin/relays/followers" %>" target="_blank" style="font-size: 20px; font-family: Helvetica, Arial, sans-serif; color: #ffffff; text-decoration: none; padding: 15px 25px; border-radius: 2px; border: 1px solid #3C376E; display: inline-block;">
<%= gettext "See the federation settings" %>
</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!--[if (gte mso 9)|(IE)]>
</td>
</tr>
</table>
<![endif]-->
</td>
</tr>

View File

@@ -0,0 +1,7 @@
<%= gettext "Want to connect?" %>
==
<%= gettext "%{name} (%{domain}) just requested to follow your instance.", name: @follower.name, domain: @follower.domain %>
<%= gettext "If you accept, this instance will receive all of your public events." %>
<%= gettext "Note: %{name} (%{domain}) following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too." %>
<%= gettext "To accept this invitation, head over to the instance's admin settings." %>
<%= "#{Mobilizon.Web.Endpoint.url()}/settings/admin/relays/followers" %>