From 07a5d104214dd371b05ebdf0e573aa7f867e6b21 Mon Sep 17 00:00:00 2001 From: Thomas Citharel <tcit@tcit.fr> Date: Fri, 9 Oct 2020 12:17:33 +0200 Subject: [PATCH] Introduce support for custom nginx error pages Signed-off-by: Thomas Citharel <tcit@tcit.fr> --- .gitignore | 2 + CHANGELOG.md | 10 +++-- config/config.exs | 1 + lib/mobilizon.ex | 11 ++++- lib/service/error_page.ex | 17 ++++++++ lib/web/gettext.ex | 4 +- lib/web/templates/error/500_page.html.eex | 50 +++++++++++++++++++++++ lib/web/views/error_view.ex | 6 ++- priv/errors/.gitkeep | 0 priv/gettext/ar/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/be/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/ca/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/cs/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/de/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/default.pot | 15 +++++++ priv/gettext/en/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/es/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/fi/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/fr/LC_MESSAGES/default.po | 14 ++++++- priv/gettext/it/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/ja/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/nl/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/oc/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/pl/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/pt/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/pt_BR/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/ru/LC_MESSAGES/default.po | 19 ++++++++- priv/gettext/sv/LC_MESSAGES/default.po | 19 ++++++++- support/nginx/mobilizon.conf | 47 +++++++++++++-------- test/service/error_page_test.exs | 31 ++++++++++++++ test/web/views/error_view_test.exs | 8 +++- 31 files changed, 476 insertions(+), 63 deletions(-) create mode 100644 lib/service/error_page.ex create mode 100644 lib/web/templates/error/500_page.html.eex create mode 100644 priv/errors/.gitkeep create mode 100644 test/service/error_page_test.exs diff --git a/.gitignore b/.gitignore index 803f8eb71..dec9281ff 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,8 @@ priv/static/* !priv/static/.gitkeep priv/data/* !priv/data/.gitkeep +priv/errors/* +!priv/errors/.gitkeep .vscode/ cover/ site/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 24aa810cd..f108cdc50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,10 +8,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Special operations -We added `application/ld+json` as acceptable MIME type for ActivityPub requests, so you'll need to recompile the `mime` library we use before recompiling Mobilizon: -``` -MIX_ENV=prod mix deps.clean mime --build -``` +* We added `application/ld+json` as acceptable MIME type for ActivityPub requests, so you'll need to recompile the `mime` library we use before recompiling Mobilizon: + ``` + MIX_ENV=prod mix deps.clean mime --build + ``` + +* The [nginx configuration](https://framagit.org/framasoft/mobilizon/-/blob/master/support/nginx/mobilizon.conf) has been changed with improvements and support for custom error pages. ### Added diff --git a/config/config.exs b/config/config.exs index d833be2f1..5272fe767 100644 --- a/config/config.exs +++ b/config/config.exs @@ -19,6 +19,7 @@ config :mobilizon, :instance, registrations_open: false, registration_email_allowlist: [], languages: [], + default_language: "en", demo: false, repository: Mix.Project.config()[:source_url], allow_relay: true, diff --git a/lib/mobilizon.ex b/lib/mobilizon.ex index 8ed9f71b5..496deb893 100644 --- a/lib/mobilizon.ex +++ b/lib/mobilizon.ex @@ -16,6 +16,7 @@ defmodule Mobilizon do alias Mobilizon.{Config, Storage, Web} alias Mobilizon.Federation.ActivityPub + alias Mobilizon.Service.ErrorPage alias Mobilizon.Service.Export.{Feed, ICalendar} @name Mix.Project.config()[:name] @@ -104,7 +105,7 @@ defmodule Mobilizon do defp fallback_options(fallback), do: [fallback: fallback(default: fallback)] defp task_children(:test), do: [] - defp task_children(_), do: [relay_actor(), anonymous_actor()] + defp task_children(_), do: [relay_actor(), anonymous_actor(), render_error_page()] defp relay_actor do %{ @@ -121,4 +122,12 @@ defmodule Mobilizon do restart: :temporary } end + + defp render_error_page do + %{ + id: :render_error_page_init, + start: {Task, :start_link, [&ErrorPage.init/0]}, + restart: :temporary + } + end end diff --git a/lib/service/error_page.ex b/lib/service/error_page.ex new file mode 100644 index 000000000..bca368c99 --- /dev/null +++ b/lib/service/error_page.ex @@ -0,0 +1,17 @@ +defmodule Mobilizon.Service.ErrorPage do + @moduledoc """ + Render an error page + """ + + def init do + render_error_page() + end + + defp render_error_page do + content = + Phoenix.View.render_to_string(Mobilizon.Web.ErrorView, "500.html", conn: %Plug.Conn{}) + + path = Path.join(Application.app_dir(:mobilizon, "priv/errors"), "error.html") + File.write(path, content) + end +end diff --git a/lib/web/gettext.ex b/lib/web/gettext.ex index 18a2fd49b..7718ce6e7 100644 --- a/lib/web/gettext.ex +++ b/lib/web/gettext.ex @@ -37,8 +37,8 @@ defmodule Mobilizon.Web.Gettext do locale in locales -> locale # Either the first part matches, "fr_CA" => "fr" split_locale(locale) in locales -> split_locale(locale) - # Otherwise default to english - true -> "en" + # Otherwise set to default + true -> Keyword.get(Mobilizon.Config.instance_config(), :default_language, "en") || "en" end end diff --git a/lib/web/templates/error/500_page.html.eex b/lib/web/templates/error/500_page.html.eex new file mode 100644 index 000000000..4c58c3124 --- /dev/null +++ b/lib/web/templates/error/500_page.html.eex @@ -0,0 +1,50 @@ +<!DOCTYPE html> +<html lang="<%= Gettext.get_locale() %>"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <title><%= gettext "This page is not correct" %></title> + <style> + body.error { + font-family: BlinkMacSystemFont, Roboto, Oxygen, Ubuntu, Cantarell, Segoe UI, Fira Sans, Droid Sans, Helvetica Neue, Helvetica, Arial, sans-serif; + background: #efeef4; + position: absolute; + text-align: center; + color: #3c376e; + width: 100%; + height: 100%; + padding: 0; + display: flex; + justify-content: center; + align-items: center; + } + + body.error .dialog h1 { + font-size: 20px; + line-height: 28px; + font-weight: 400; + } + + body.error .dialog img { + display: block; + max-width: 470px; + width: 100%; + height: auto; + margin: -120px auto auto; + } + </style> + </head> + <body class="error"> + <main role="main" class="dialog"> + <div class="error_illustration"> + <img src="/static/img/mobilizon_logo.png" /> + <!-- <img src="/static/img/error.png" alt="" width="500" /> --> + </div> + <div class="error__message"> + <h1><%= gettext "We're sorry, but something went wrong on our end." %></h1> + <p><%= gettext "The Mobilizon server seems to be temporarily down." %></p> + </div> + </main> + </body> +</html> diff --git a/lib/web/views/error_view.ex b/lib/web/views/error_view.ex index 398c8b954..5c27caf5b 100644 --- a/lib/web/views/error_view.ex +++ b/lib/web/views/error_view.ex @@ -39,7 +39,11 @@ defmodule Mobilizon.Web.ErrorView do end def render("500.html", _assigns) do - "Internal server error" + Mobilizon.Config.instance_config() + |> Keyword.get(:default_language, "en") + |> Gettext.put_locale() + + render("500_page.html", %{}) end # In case no render clause matches or no diff --git a/priv/errors/.gitkeep b/priv/errors/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/priv/gettext/ar/LC_MESSAGES/default.po b/priv/gettext/ar/LC_MESSAGES/default.po index 94c25fcd5..8438fec3c 100644 --- a/priv/gettext/ar/LC_MESSAGES/default.po +++ b/priv/gettext/ar/LC_MESSAGES/default.po @@ -1395,12 +1395,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "الفعالية" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/be/LC_MESSAGES/default.po b/priv/gettext/be/LC_MESSAGES/default.po index 68c0a2c33..b883b99e9 100644 --- a/priv/gettext/be/LC_MESSAGES/default.po +++ b/priv/gettext/be/LC_MESSAGES/default.po @@ -1371,12 +1371,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/ca/LC_MESSAGES/default.po b/priv/gettext/ca/LC_MESSAGES/default.po index 372a1a5b9..26bf766b9 100644 --- a/priv/gettext/ca/LC_MESSAGES/default.po +++ b/priv/gettext/ca/LC_MESSAGES/default.po @@ -1391,12 +1391,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Activitat" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/cs/LC_MESSAGES/default.po b/priv/gettext/cs/LC_MESSAGES/default.po index da2b289c7..26a8692b9 100644 --- a/priv/gettext/cs/LC_MESSAGES/default.po +++ b/priv/gettext/cs/LC_MESSAGES/default.po @@ -1371,12 +1371,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po index 59016be5e..caec2526a 100644 --- a/priv/gettext/de/LC_MESSAGES/default.po +++ b/priv/gettext/de/LC_MESSAGES/default.po @@ -1399,12 +1399,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Veranstaltung" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 3581d4c21..4ae1d1333 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -1359,3 +1359,18 @@ msgstr "" #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index 92c08e70b..5d6512364 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -1403,12 +1403,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Event" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/default.po b/priv/gettext/es/LC_MESSAGES/default.po index 62a94b33b..fbcd9a896 100644 --- a/priv/gettext/es/LC_MESSAGES/default.po +++ b/priv/gettext/es/LC_MESSAGES/default.po @@ -1699,12 +1699,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "Envió una solicitud para asistir a %{title}." -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Evento" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "Ha habido cambios para% {title}, así que pensamos en avisarle." + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/fi/LC_MESSAGES/default.po b/priv/gettext/fi/LC_MESSAGES/default.po index 7158cf112..eb913c332 100644 --- a/priv/gettext/fi/LC_MESSAGES/default.po +++ b/priv/gettext/fi/LC_MESSAGES/default.po @@ -1649,12 +1649,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "Lähetit pyynnön osallistua tapahtumaan %{title}." -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Tapahtuma" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "%{title} on joiltain osin muuttunut, ja ajattelimme ilmoittaa asiasta." + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/fr/LC_MESSAGES/default.po b/priv/gettext/fr/LC_MESSAGES/default.po index 01df84ec2..b6267bcba 100644 --- a/priv/gettext/fr/LC_MESSAGES/default.po +++ b/priv/gettext/fr/LC_MESSAGES/default.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2020-10-08 08:52+0200\n" +"PO-Revision-Date: 2020-10-09 09:46+0200\n" "Last-Translator: Thomas Citharel <thomas.citharel@framasoft.org>\n" "Language-Team: French <https://weblate.framasoft.org/projects/mobilizon/backend/fr/>\n" "Language: fr\n" @@ -1094,3 +1094,15 @@ msgstr "Titre de l'événement" #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "Il y a eu des changements pour <b>%{title}</b> donc nous avons pensé que nous vous le ferions savoir." + +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "Le serveur Mobilizon semble être temporairement hors-service." + +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "Cette page n’est pas correcte" + +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "Nous sommes désolé·e·s, mais quelque chose s’est mal passé de notre côté." diff --git a/priv/gettext/it/LC_MESSAGES/default.po b/priv/gettext/it/LC_MESSAGES/default.po index 80fff4965..3f613515b 100644 --- a/priv/gettext/it/LC_MESSAGES/default.po +++ b/priv/gettext/it/LC_MESSAGES/default.po @@ -1369,12 +1369,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Evento" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/ja/LC_MESSAGES/default.po b/priv/gettext/ja/LC_MESSAGES/default.po index e3c657cae..f2fef6d7b 100644 --- a/priv/gettext/ja/LC_MESSAGES/default.po +++ b/priv/gettext/ja/LC_MESSAGES/default.po @@ -1359,12 +1359,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "イベント" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/nl/LC_MESSAGES/default.po b/priv/gettext/nl/LC_MESSAGES/default.po index 598496e42..7994fcb5b 100644 --- a/priv/gettext/nl/LC_MESSAGES/default.po +++ b/priv/gettext/nl/LC_MESSAGES/default.po @@ -1394,12 +1394,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Evenement" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/oc/LC_MESSAGES/default.po b/priv/gettext/oc/LC_MESSAGES/default.po index 47985aba0..0222116b1 100644 --- a/priv/gettext/oc/LC_MESSAGES/default.po +++ b/priv/gettext/oc/LC_MESSAGES/default.po @@ -1396,12 +1396,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Eveniment" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/pl/LC_MESSAGES/default.po b/priv/gettext/pl/LC_MESSAGES/default.po index 8f5e99314..1ecc0b0c8 100644 --- a/priv/gettext/pl/LC_MESSAGES/default.po +++ b/priv/gettext/pl/LC_MESSAGES/default.po @@ -1407,12 +1407,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Wydarzenie" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/pt/LC_MESSAGES/default.po b/priv/gettext/pt/LC_MESSAGES/default.po index 142941d9b..27a515b8f 100644 --- a/priv/gettext/pt/LC_MESSAGES/default.po +++ b/priv/gettext/pt/LC_MESSAGES/default.po @@ -1364,12 +1364,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/pt_BR/LC_MESSAGES/default.po b/priv/gettext/pt_BR/LC_MESSAGES/default.po index 23f03de48..ad4adc1f2 100644 --- a/priv/gettext/pt_BR/LC_MESSAGES/default.po +++ b/priv/gettext/pt_BR/LC_MESSAGES/default.po @@ -1486,12 +1486,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Evento" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/ru/LC_MESSAGES/default.po b/priv/gettext/ru/LC_MESSAGES/default.po index 8d212a7be..ddba4a896 100644 --- a/priv/gettext/ru/LC_MESSAGES/default.po +++ b/priv/gettext/ru/LC_MESSAGES/default.po @@ -1382,12 +1382,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Событие" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/priv/gettext/sv/LC_MESSAGES/default.po b/priv/gettext/sv/LC_MESSAGES/default.po index dd808ad92..ccb1efab6 100644 --- a/priv/gettext/sv/LC_MESSAGES/default.po +++ b/priv/gettext/sv/LC_MESSAGES/default.po @@ -1387,12 +1387,27 @@ msgstr "" msgid "You issued a request to attend <b>%{title}</b>." msgstr "" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:64 msgid "Event title" msgstr "Evenemang" -#, elixir-format, fuzzy +#, elixir-format #: lib/web/templates/email/event_updated.html.eex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:46 +msgid "The Mobilizon server seems to be temporarily down." +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:7 +msgid "This page is not correct" +msgstr "" + +#, elixir-format +#: lib/web/templates/error/500_page.html.eex:45 +msgid "We're sorry, but something went wrong on our end." +msgstr "" diff --git a/support/nginx/mobilizon.conf b/support/nginx/mobilizon.conf index 7ff6a1690..aff05d8ed 100644 --- a/support/nginx/mobilizon.conf +++ b/support/nginx/mobilizon.conf @@ -35,13 +35,14 @@ server { # ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem; # Add TLSv1.3 if it's supported by your system - ssl_protocols TLSv1.2; + ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA'; ssl_prefer_server_ciphers on; ssl_ecdh_curve prime256v1; # ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1; ssl_stapling on; ssl_stapling_verify on; + add_header Strict-Transport-Security "max-age=31536000"; gzip on; gzip_disable "msie6"; @@ -55,6 +56,18 @@ server { # the nginx default is 1m, not enough for large media uploads client_max_body_size 16m; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + + location / { + try_files $uri @proxy; + } + # Let's Encrypt keeps its files here location ^~ '/.well-known/acme-challenge' { root /var/www/certbot; @@ -62,29 +75,27 @@ server { } location / { - gzip off; - proxy_http_version 1.1; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - - # For Websocket support - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host $http_host; - - proxy_redirect off; - proxy_pass http://localhost:4000; - - client_max_body_size 16m; } - location ~* \.(css|js)$ { + location ~ ^/(js|css) { root /home/mobilizon/live/priv/static; etag off; - expires 1y; access_log off; - add_header Cache-Control public; + add_header Cache-Control "public, max-age=31536000, immutable"; + } + + location ~ ^/(media|proxy) { + etag off; + access_log off; + add_header Cache-Control "public, max-age=31536000, immutable"; + proxy_pass http://localhost:4000; + } + + error_page 500 501 502 503 504 @error; + location @error { + root /home/tcit/dev/frama/mobilizon/priv/errors; + try_files /error.html 502; } } diff --git a/test/service/error_page_test.exs b/test/service/error_page_test.exs new file mode 100644 index 000000000..035353f25 --- /dev/null +++ b/test/service/error_page_test.exs @@ -0,0 +1,31 @@ +defmodule Mobilizon.Service.ErrorPageTest do + @moduledoc """ + Test the error page producer module + """ + + alias Mobilizon.Config + alias Mobilizon.Service.ErrorPage + + use Mobilizon.DataCase + + describe "init/0" do + test "renders an error page in the default language" do + ErrorPage.init() + path = Path.join(Application.app_dir(:mobilizon, "priv/errors"), "error.html") + assert File.exists?(path) + assert {:ok, data} = File.read(path) + assert data =~ "This page is not correct" + end + + test "uses the instance default language if defined" do + Config.put([:instance, :default_language], "fr") + ErrorPage.init() + path = Path.join(Application.app_dir(:mobilizon, "priv/errors"), "error.html") + assert File.exists?(path) + assert {:ok, data} = File.read(path) + refute data =~ "This page is not correct" + assert data =~ "<html lang=\"fr\">" + Config.put([:instance, :default_language], "en") + end + end +end diff --git a/test/web/views/error_view_test.exs b/test/web/views/error_view_test.exs index 8cb250bbb..419c94a2f 100644 --- a/test/web/views/error_view_test.exs +++ b/test/web/views/error_view_test.exs @@ -17,10 +17,14 @@ defmodule Mobilizon.Web.ErrorViewTest do end test "render 500.html" do - assert render_to_string(ErrorView, "500.html", []) == "Internal server error" + assert render_to_string(ErrorView, "500.html", []) =~ + Phoenix.HTML.html_escape("We're sorry, but something went wrong on our end.") + |> Phoenix.HTML.safe_to_string() end test "render any other" do - assert render_to_string(ErrorView, "505.html", []) == "Internal server error" + assert render_to_string(ErrorView, "505.html", []) =~ + Phoenix.HTML.html_escape("We're sorry, but something went wrong on our end.") + |> Phoenix.HTML.safe_to_string() end end