Imrpove style
This commit is contained in:
1 parent
5cf45c2084
commit
a57fa574eb
6 files changed
+294
-113
No files matched your search
@@ -0,0 +1,148 @@
|
|||||||
|
class Netig
|
||||||
|
plugin :rodauth do
|
||||||
|
db DB
|
||||||
|
|
||||||
|
enable :login, :logout, :create_account, :verify_account
|
||||||
|
|
||||||
|
domain ENV.fetch("RODAUTH_DOMAIN")
|
||||||
|
base_url ENV.fetch("BASE_URL")
|
||||||
|
hmac_secret ENV.fetch("RODAUTH_HMAC_SECRET")
|
||||||
|
|
||||||
|
account_unverified_status_value 1
|
||||||
|
account_open_status_value 2
|
||||||
|
|
||||||
|
email_from "NETig <noreply@netig.net>"
|
||||||
|
|
||||||
|
title_instance_variable :@page_title
|
||||||
|
|
||||||
|
# Connexion
|
||||||
|
login_page_title "Connexion — NETig"
|
||||||
|
login_label "Adresse électronique"
|
||||||
|
password_label "Mot de passe"
|
||||||
|
login_button "Se connecter"
|
||||||
|
|
||||||
|
login_notice_flash "Vous êtes maintenant connecté."
|
||||||
|
login_error_flash "La connexion a échoué."
|
||||||
|
|
||||||
|
login_redirect "/temporary_page"
|
||||||
|
login_return_to_requested_location? true
|
||||||
|
|
||||||
|
# Déconnexion
|
||||||
|
logout_notice_flash "Vous êtes maintenant déconnecté."
|
||||||
|
logout_redirect "/"
|
||||||
|
|
||||||
|
# Création de compte
|
||||||
|
create_account_page_title "Créer un compte — NETig"
|
||||||
|
create_account_button "Créer mon compte"
|
||||||
|
create_account_link_text "Créer un compte"
|
||||||
|
|
||||||
|
before_create_account do
|
||||||
|
case param("kind")
|
||||||
|
when "individual"
|
||||||
|
throw_error_status(
|
||||||
|
422, "first_name", "doit être renseigné"
|
||||||
|
) if param("first_name").to_s.strip.empty?
|
||||||
|
|
||||||
|
throw_error_status(
|
||||||
|
422, "last_name", "doit être renseigné"
|
||||||
|
) if param("last_name").to_s.strip.empty?
|
||||||
|
|
||||||
|
when "organization"
|
||||||
|
throw_error_status(
|
||||||
|
422, "organization_name", "doit être renseignée"
|
||||||
|
) if param("organization_name").to_s.strip.empty?
|
||||||
|
|
||||||
|
else
|
||||||
|
throw_error_status(
|
||||||
|
422, "kind", "choisissez un type de compte"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
after_create_account do
|
||||||
|
member = if param("kind") == "individual"
|
||||||
|
{
|
||||||
|
kind: "individual",
|
||||||
|
first_name: param("first_name").to_s.strip,
|
||||||
|
last_name: param("last_name").to_s.strip,
|
||||||
|
organization_name: nil
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
kind: "organization",
|
||||||
|
first_name: nil,
|
||||||
|
last_name: nil,
|
||||||
|
organization_name: param("organization_name").to_s.strip
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
db[:members].insert(
|
||||||
|
member.merge(
|
||||||
|
account_id: account[:id],
|
||||||
|
core_member: false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Vérification de l'adresse électronique
|
||||||
|
verify_account_page_title(
|
||||||
|
"Vérifier votre adresse électronique — NETig"
|
||||||
|
)
|
||||||
|
verify_account_button "Confirmer mon adresse électronique"
|
||||||
|
verify_account_set_password? true
|
||||||
|
|
||||||
|
verify_account_email_subject(
|
||||||
|
"Confirmez votre adresse électronique — NETig"
|
||||||
|
)
|
||||||
|
|
||||||
|
verify_account_email_body do
|
||||||
|
<<~EMAIL
|
||||||
|
Bonjour,
|
||||||
|
|
||||||
|
Pour vérifier votre adresse électronique et activer votre compte
|
||||||
|
NETig, ouvrez le lien suivant :
|
||||||
|
|
||||||
|
#{verify_account_email_link}
|
||||||
|
|
||||||
|
Si vous n'êtes pas à l'origine de cette demande, ignorez ce message.
|
||||||
|
|
||||||
|
L'équipe NETig
|
||||||
|
EMAIL
|
||||||
|
end
|
||||||
|
|
||||||
|
verify_account_email_sent_notice_flash(
|
||||||
|
"Un courriel de vérification vient de vous être envoyé."
|
||||||
|
)
|
||||||
|
|
||||||
|
verify_account_notice_flash(
|
||||||
|
"Votre adresse électronique est maintenant vérifiée."
|
||||||
|
)
|
||||||
|
|
||||||
|
# Renvoi du courriel de vérification
|
||||||
|
resend_verify_account_page_title(
|
||||||
|
"Renvoyer le courriel de vérification — NETig"
|
||||||
|
)
|
||||||
|
|
||||||
|
verify_account_resend_explanatory_text(
|
||||||
|
"Si vous n'avez pas reçu le courriel de vérification, indiquez " \
|
||||||
|
"l'adresse électronique associée à votre compte pour demander " \
|
||||||
|
"un nouvel envoi."
|
||||||
|
)
|
||||||
|
|
||||||
|
verify_account_resend_button "Renvoyer le courriel"
|
||||||
|
|
||||||
|
verify_account_resend_link_text(
|
||||||
|
"Renvoyer le courriel de vérification"
|
||||||
|
)
|
||||||
|
|
||||||
|
verify_account_resend_error_flash(
|
||||||
|
"Impossible de renvoyer le courriel de vérification. " \
|
||||||
|
"Vérifiez l'adresse saisie ou réessayez plus tard."
|
||||||
|
)
|
||||||
|
|
||||||
|
# Sessions
|
||||||
|
already_logged_in do
|
||||||
|
request.redirect("/")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -7,6 +7,7 @@ require_relative "lib/contact_form"
|
|||||||
require_relative "lib/contact_mailer"
|
require_relative "lib/contact_mailer"
|
||||||
require_relative "lib/document_renderer"
|
require_relative "lib/document_renderer"
|
||||||
|
|
||||||
|
# Application et plugins Roda
|
||||||
class Netig < Roda
|
class Netig < Roda
|
||||||
plugin :render, escape: true
|
plugin :render, escape: true
|
||||||
plugin :public
|
plugin :public
|
||||||
@@ -15,125 +16,18 @@ class Netig < Roda
|
|||||||
plugin :route_csrf, csrf_failure: :empty_403
|
plugin :route_csrf, csrf_failure: :empty_403
|
||||||
plugin :hash_branches
|
plugin :hash_branches
|
||||||
plugin :flash
|
plugin :flash
|
||||||
|
|
||||||
plugin :rodauth do
|
|
||||||
db DB
|
|
||||||
|
|
||||||
enable :login, :logout, :create_account, :verify_account
|
|
||||||
|
|
||||||
domain ENV.fetch("RODAUTH_DOMAIN")
|
|
||||||
|
|
||||||
account_unverified_status_value 1
|
|
||||||
account_open_status_value 2
|
|
||||||
|
|
||||||
base_url ENV.fetch("BASE_URL")
|
|
||||||
hmac_secret ENV.fetch("RODAUTH_HMAC_SECRET")
|
|
||||||
|
|
||||||
email_from "NETig <noreply@netig.net>"
|
|
||||||
|
|
||||||
login_label "Adresse électronique"
|
|
||||||
password_label "Mot de passe"
|
|
||||||
login_button "Se connecter"
|
|
||||||
|
|
||||||
login_notice_flash "Vous êtes maintenant connecté."
|
|
||||||
login_error_flash "La connexion a échoué."
|
|
||||||
logout_notice_flash "Vous êtes maintenant déconnecté."
|
|
||||||
|
|
||||||
login_redirect "/temporary_page"
|
|
||||||
login_return_to_requested_location? true
|
|
||||||
|
|
||||||
create_account_page_title "Créer un compte — NETig"
|
|
||||||
create_account_button "Créer mon compte"
|
|
||||||
create_account_link_text "Créer un compte"
|
|
||||||
|
|
||||||
verify_account_page_title "Vérifier votre adresse électronique — NETig"
|
|
||||||
verify_account_button "Confirmer mon adresse électronique"
|
|
||||||
verify_account_set_password? true
|
|
||||||
|
|
||||||
verify_account_email_subject "Confirmez votre adresse électronique — NETig"
|
|
||||||
|
|
||||||
verify_account_email_body do
|
|
||||||
<<~EMAIL
|
|
||||||
Bonjour,
|
|
||||||
|
|
||||||
Pour vérifier votre adresse électronique et activer votre compte
|
|
||||||
NETig, ouvrez le lien suivant :
|
|
||||||
|
|
||||||
#{verify_account_email_link}
|
|
||||||
|
|
||||||
Si vous n'êtes pas à l'origine de cette demande, ignorez ce message.
|
|
||||||
|
|
||||||
L'équipe NETig
|
|
||||||
EMAIL
|
|
||||||
end
|
end
|
||||||
|
|
||||||
verify_account_email_sent_notice_flash(
|
# Authentification
|
||||||
"Un courriel de vérification vient de vous être envoyé."
|
require_relative "config/rodauth"
|
||||||
)
|
|
||||||
|
|
||||||
verify_account_notice_flash(
|
|
||||||
"Votre adresse électronique est maintenant vérifiée."
|
|
||||||
)
|
|
||||||
|
|
||||||
before_create_account do
|
|
||||||
case param("kind")
|
|
||||||
when "individual"
|
|
||||||
throw_error_status(
|
|
||||||
422, "first_name", "doit être renseigné"
|
|
||||||
) if param("first_name").to_s.strip.empty?
|
|
||||||
|
|
||||||
throw_error_status(
|
|
||||||
422, "last_name", "doit être renseigné"
|
|
||||||
) if param("last_name").to_s.strip.empty?
|
|
||||||
|
|
||||||
when "organization"
|
|
||||||
throw_error_status(
|
|
||||||
422, "organization_name", "doit être renseignée"
|
|
||||||
) if param("organization_name").to_s.strip.empty?
|
|
||||||
|
|
||||||
else
|
|
||||||
throw_error_status(
|
|
||||||
422, "kind", "choisissez un type de compte"
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
after_create_account do
|
|
||||||
member = if param("kind") == "individual"
|
|
||||||
{
|
|
||||||
kind: "individual",
|
|
||||||
first_name: param("first_name").to_s.strip,
|
|
||||||
last_name: param("last_name").to_s.strip,
|
|
||||||
organization_name: nil
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
kind: "organization",
|
|
||||||
first_name: nil,
|
|
||||||
last_name: nil,
|
|
||||||
organization_name: param("organization_name").to_s.strip
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
db[:members].insert(
|
|
||||||
member.merge(
|
|
||||||
account_id: account[:id],
|
|
||||||
core_member: false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
already_logged_in do
|
|
||||||
request.redirect("/")
|
|
||||||
end
|
|
||||||
|
|
||||||
logout_redirect "/"
|
|
||||||
end
|
|
||||||
|
|
||||||
|
# Autorisations et routes secondaires
|
||||||
require_relative "lib/authorization"
|
require_relative "lib/authorization"
|
||||||
require_relative "routes/noyau"
|
require_relative "routes/noyau"
|
||||||
require_relative "routes/contact"
|
require_relative "routes/contact"
|
||||||
|
|
||||||
|
# Routes principales
|
||||||
|
class Netig
|
||||||
route do |r|
|
route do |r|
|
||||||
r.rodauth
|
r.rodauth
|
||||||
|
|
||||||
@@ -141,11 +35,13 @@ class Netig < Roda
|
|||||||
check_csrf!
|
check_csrf!
|
||||||
r.hash_branches
|
r.hash_branches
|
||||||
|
|
||||||
|
# Accueil
|
||||||
r.root do
|
r.root do
|
||||||
@canonical_url = "https://netig.net/"
|
@canonical_url = "https://netig.net/"
|
||||||
view "index"
|
view "index"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Statuts
|
||||||
r.get "statutes" do
|
r.get "statutes" do
|
||||||
@page_title = "Statuts — NETig"
|
@page_title = "Statuts — NETig"
|
||||||
@page_description = "Statuts de l'association NETig."
|
@page_description = "Statuts de l'association NETig."
|
||||||
@@ -156,6 +52,7 @@ class Netig < Roda
|
|||||||
view "document"
|
view "document"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Mentions légales
|
||||||
r.get "legal" do
|
r.get "legal" do
|
||||||
@page_title = "Mentions légales — NETig"
|
@page_title = "Mentions légales — NETig"
|
||||||
@page_description = "Mentions légales de l'association NETig."
|
@page_description = "Mentions légales de l'association NETig."
|
||||||
@@ -166,6 +63,7 @@ class Netig < Roda
|
|||||||
view "document"
|
view "document"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Page temporaire
|
||||||
r.get "temporary_page" do
|
r.get "temporary_page" do
|
||||||
@page_title = "Page temporaire — NETig"
|
@page_title = "Page temporaire — NETig"
|
||||||
@page_description = "Cette page n'existe pas encore."
|
@page_description = "Cette page n'existe pas encore."
|
||||||
|
|||||||
@@ -428,6 +428,85 @@ summary:focus-visible {
|
|||||||
flex: 0 0 20px;
|
flex: 0 0 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Authentification
|
||||||
|
------------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
.auth-panel {
|
||||||
|
max-width: 520px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-panel h1 {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rodauth {
|
||||||
|
display: grid;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rodauth > p {
|
||||||
|
margin: 0;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rodauth .form-group {
|
||||||
|
display: grid;
|
||||||
|
gap: 8px;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rodauth .form-label {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rodauth .form-control {
|
||||||
|
width: 100%;
|
||||||
|
padding: 10px;
|
||||||
|
border: 1px solid var(--color-text);
|
||||||
|
border-radius: 0;
|
||||||
|
background: var(--color-text);
|
||||||
|
color: var(--color-background);
|
||||||
|
font: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rodauth .btn-primary {
|
||||||
|
width: 100%;
|
||||||
|
padding: 10px 16px;
|
||||||
|
border: 2px solid var(--color-accent);
|
||||||
|
border-radius: 0;
|
||||||
|
background: var(--color-accent);
|
||||||
|
color: var(--color-background);
|
||||||
|
font: inherit;
|
||||||
|
font-weight: 700;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rodauth .btn-primary:hover {
|
||||||
|
filter: brightness(1.12);
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-links {
|
||||||
|
margin-top: 28px;
|
||||||
|
padding-top: 20px;
|
||||||
|
border-top: 1px solid var(--color-shadow-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-links h2 {
|
||||||
|
margin: 0 0 14px;
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
color: var(--color-highlight);
|
||||||
|
font-size: 1.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-links ul {
|
||||||
|
display: grid;
|
||||||
|
gap: 10px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
/* Formulaires
|
/* Formulaires
|
||||||
------------------------------------------------------------------------ */
|
------------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -46,7 +46,7 @@
|
|||||||
Déconnexion
|
Déconnexion
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
<% else %>
|
<% elsif request.path != rodauth.login_path %>
|
||||||
<a class="topbar__account" href="<%= rodauth.login_path %>">
|
<a class="topbar__account" href="<%= rodauth.login_path %>">
|
||||||
Connexion ➜
|
Connexion ➜
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<section class="page-section">
|
||||||
|
<div class="content page-panel auth-panel">
|
||||||
|
<h1>Connexion</h1>
|
||||||
|
|
||||||
|
<%== rodauth.login_form_header %>
|
||||||
|
<%== rodauth.render("login-form") %>
|
||||||
|
|
||||||
|
<% links = rodauth.login_form_footer_links %>
|
||||||
|
|
||||||
|
<% unless links.empty? %>
|
||||||
|
<nav class="auth-links" aria-label="Autres possibilités">
|
||||||
|
<h2>Autres possibilités</h2>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<% links.each do |_, url, text| %>
|
||||||
|
<li><a href="<%= url %>"><%= text %></a></li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
<% end %>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
<section class="page-section">
|
||||||
|
<div class="content page-panel auth-panel">
|
||||||
|
<h1>Renvoyer le courriel de vérification</h1>
|
||||||
|
|
||||||
|
<form
|
||||||
|
action="<%= rodauth.verify_account_resend_path %>"
|
||||||
|
method="post"
|
||||||
|
class="rodauth"
|
||||||
|
role="form"
|
||||||
|
id="verify-account-resend-form"
|
||||||
|
>
|
||||||
|
<%== rodauth.verify_account_resend_additional_form_tags %>
|
||||||
|
<%== rodauth.csrf_tag(rodauth.verify_account_resend_path) %>
|
||||||
|
|
||||||
|
<p><%= rodauth.verify_account_resend_explanatory_text %></p>
|
||||||
|
|
||||||
|
<%== rodauth.param_or_nil(rodauth.login_param) ?
|
||||||
|
rodauth.login_hidden_field :
|
||||||
|
rodauth.render("login-field") %>
|
||||||
|
|
||||||
|
<%== rodauth.button(rodauth.verify_account_resend_button) %>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<nav class="auth-links" aria-label="Autres possibilités">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="<%= rodauth.login_path %>">
|
||||||
|
Retour à la connexion
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
Reference in new issue
Block a user