mirror of
https://github.com/ClaperCo/Claper.git
synced 2026-09-02 03:59:46 +02:00
feat: add legal notice links for terms and privacy policy on registration page
This commit is contained in:
@@ -75,6 +75,10 @@ MAIL_FROM_NAME=Claper
|
||||
# GS_JPG_RESOLUTION=300x300
|
||||
# LANGUAGES=en,fr,es,it,nl,de
|
||||
|
||||
# == Legal links shown on the registration page (both must be set to display the notice)
|
||||
# TERMS_URL=https://example.com/terms
|
||||
# PRIVACY_URL=https://example.com/privacy
|
||||
|
||||
# == Reverse proxy / IP forwarding (set these if Claper runs behind a load balancer or reverse proxy)
|
||||
|
||||
# Comma-separated list of trusted proxy IPs or CIDR ranges whose forwarding headers will be trusted
|
||||
|
||||
@@ -164,6 +164,31 @@ allow_unlink_external_provider =
|
||||
|
||||
logout_redirect_url = get_var_from_path_or_env(config_dir, "LOGOUT_REDIRECT_URL", nil)
|
||||
|
||||
normalize_url = fn
|
||||
nil ->
|
||||
nil
|
||||
|
||||
value ->
|
||||
case String.trim(value) do
|
||||
"" -> nil
|
||||
trimmed -> trimmed
|
||||
end
|
||||
end
|
||||
|
||||
terms_url = normalize_url.(get_var_from_path_or_env(config_dir, "TERMS_URL", nil))
|
||||
privacy_url = normalize_url.(get_var_from_path_or_env(config_dir, "PRIVACY_URL", nil))
|
||||
|
||||
for {name, value} <- [{"TERMS_URL", terms_url}, {"PRIVACY_URL", privacy_url}],
|
||||
not is_nil(value) do
|
||||
case URI.parse(value) do
|
||||
%URI{scheme: scheme} when scheme in ["http", "https"] ->
|
||||
:ok
|
||||
|
||||
_ ->
|
||||
raise "#{name} must start with `http` or `https`. Got `#{value}`"
|
||||
end
|
||||
end
|
||||
|
||||
languages =
|
||||
get_var_from_path_or_env(config_dir, "LANGUAGES", "en,fr,es,it,de")
|
||||
|> String.split(",")
|
||||
@@ -210,7 +235,9 @@ config :claper,
|
||||
logout_redirect_url: logout_redirect_url,
|
||||
languages: languages,
|
||||
remote_ip_proxies: remote_ip_proxies,
|
||||
remote_ip_headers: remote_ip_headers
|
||||
remote_ip_headers: remote_ip_headers,
|
||||
terms_url: terms_url,
|
||||
privacy_url: privacy_url
|
||||
|
||||
config :claper, :presentations,
|
||||
max_file_size: max_file_size,
|
||||
|
||||
@@ -111,23 +111,31 @@
|
||||
)}
|
||||
</p>
|
||||
|
||||
<p class="text-xs leading-6 text-gray-500">
|
||||
{gettext("By creating an account, you agree to our")}
|
||||
{" "}
|
||||
{link(gettext("Terms of Service"),
|
||||
to: ~p"/tos",
|
||||
class:
|
||||
"text-gray-300 underline decoration-gray-500 underline-offset-2 hover:text-white"
|
||||
)}
|
||||
{" "}
|
||||
{gettext("and")}
|
||||
{" "}
|
||||
{link(gettext("Privacy Policy"),
|
||||
to: ~p"/privacy",
|
||||
class:
|
||||
"text-gray-300 underline decoration-gray-500 underline-offset-2 hover:text-white"
|
||||
)} .
|
||||
</p>
|
||||
<% terms_url = Application.get_env(:claper, :terms_url) %>
|
||||
<% privacy_url = Application.get_env(:claper, :privacy_url) %>
|
||||
<%= if terms_url && privacy_url do %>
|
||||
<p class="text-xs leading-6 text-gray-500">
|
||||
{gettext("By creating an account, you agree to our")}
|
||||
{" "}
|
||||
{link(gettext("Terms of Service"),
|
||||
to: terms_url,
|
||||
target: "_blank",
|
||||
rel: "noopener noreferrer",
|
||||
class:
|
||||
"text-gray-300 underline decoration-gray-500 underline-offset-2 hover:text-white"
|
||||
)}
|
||||
{" "}
|
||||
{gettext("and")}
|
||||
{" "}
|
||||
{link(gettext("Privacy Policy"),
|
||||
to: privacy_url,
|
||||
target: "_blank",
|
||||
rel: "noopener noreferrer",
|
||||
class:
|
||||
"text-gray-300 underline decoration-gray-500 underline-offset-2 hover:text-white"
|
||||
)} .
|
||||
</p>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -18,9 +18,7 @@
|
||||
{gettext("Pick a new password and get back to presenting.")}
|
||||
</h1>
|
||||
<p class="max-w-xl text-lg leading-8 text-gray-100/90 lg:text-xl">
|
||||
{gettext(
|
||||
"Choose something secure that you'll remember, then you're all set."
|
||||
)}
|
||||
{gettext("Choose something secure that you'll remember, then you're all set.")}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -8,10 +8,14 @@ defmodule ClaperWeb.UserRegistrationControllerTest do
|
||||
setup do
|
||||
enable_account_creation = Application.get_env(:claper, :enable_account_creation)
|
||||
email_confirmation = Application.get_env(:claper, :email_confirmation)
|
||||
terms_url = Application.get_env(:claper, :terms_url)
|
||||
privacy_url = Application.get_env(:claper, :privacy_url)
|
||||
|
||||
on_exit(fn ->
|
||||
Application.put_env(:claper, :enable_account_creation, enable_account_creation)
|
||||
Application.put_env(:claper, :email_confirmation, email_confirmation)
|
||||
Application.put_env(:claper, :terms_url, terms_url)
|
||||
Application.put_env(:claper, :privacy_url, privacy_url)
|
||||
end)
|
||||
|
||||
:ok
|
||||
@@ -48,6 +52,56 @@ defmodule ClaperWeb.UserRegistrationControllerTest do
|
||||
|
||||
assert redirected_to(conn) == "/events"
|
||||
end
|
||||
|
||||
test "shows the legal notice when both TERMS_URL and PRIVACY_URL are configured", %{
|
||||
conn: conn
|
||||
} do
|
||||
Application.put_env(:claper, :enable_account_creation, true)
|
||||
Application.put_env(:claper, :terms_url, "https://example.com/terms")
|
||||
Application.put_env(:claper, :privacy_url, "https://example.com/privacy")
|
||||
|
||||
conn = get(conn, ~p"/users/register")
|
||||
response = html_response(conn, 200)
|
||||
|
||||
assert response =~ "By creating an account"
|
||||
assert response =~ "https://example.com/terms"
|
||||
assert response =~ "https://example.com/privacy"
|
||||
end
|
||||
|
||||
test "hides the legal notice when only TERMS_URL is configured", %{conn: conn} do
|
||||
Application.put_env(:claper, :enable_account_creation, true)
|
||||
Application.put_env(:claper, :terms_url, "https://example.com/terms")
|
||||
Application.put_env(:claper, :privacy_url, nil)
|
||||
|
||||
conn = get(conn, ~p"/users/register")
|
||||
response = html_response(conn, 200)
|
||||
|
||||
refute response =~ "By creating an account"
|
||||
refute response =~ "https://example.com/terms"
|
||||
end
|
||||
|
||||
test "hides the legal notice when only PRIVACY_URL is configured", %{conn: conn} do
|
||||
Application.put_env(:claper, :enable_account_creation, true)
|
||||
Application.put_env(:claper, :terms_url, nil)
|
||||
Application.put_env(:claper, :privacy_url, "https://example.com/privacy")
|
||||
|
||||
conn = get(conn, ~p"/users/register")
|
||||
response = html_response(conn, 200)
|
||||
|
||||
refute response =~ "By creating an account"
|
||||
refute response =~ "https://example.com/privacy"
|
||||
end
|
||||
|
||||
test "hides the legal notice when neither URL is configured", %{conn: conn} do
|
||||
Application.put_env(:claper, :enable_account_creation, true)
|
||||
Application.put_env(:claper, :terms_url, nil)
|
||||
Application.put_env(:claper, :privacy_url, nil)
|
||||
|
||||
conn = get(conn, ~p"/users/register")
|
||||
response = html_response(conn, 200)
|
||||
|
||||
refute response =~ "By creating an account"
|
||||
end
|
||||
end
|
||||
|
||||
describe "POST /users/register" do
|
||||
|
||||
Reference in New Issue
Block a user