Add member account

This commit is contained in:
julien committed 2026-11-03 20:21:21 +01:00
1 parent bf633b7060
commit 9ea0bee39d
8 files changed
+139 -23

No files matched your search

+37 -7
View File
@@ -11,7 +11,7 @@ class Netig
account_unverified_status_value 1
account_open_status_value 2
normalize_login(&:downcase)
normalize_login { |login| login.to_s.strip.downcase }
email_from "NETig <noreply@netig.net>"
@@ -26,7 +26,11 @@ class Netig
login_notice_flash "Vous êtes maintenant connecté."
login_error_flash "La connexion a échoué."
login_redirect "/temporary_page"
attempt_to_login_to_unverified_account_error_flash(
"Votre adresse électronique n'a pas encore été vérifiée."
)
login_redirect "/account"
login_return_to_requested_location? true
# Déconnexion
@@ -37,6 +41,12 @@ class Netig
create_account_button "Créer mon compte"
create_account_link_text "Créer un compte"
create_account_redirect "/create-account"
create_account_error_flash(
"Impossible de créer votre compte. Vérifiez les informations saisies."
)
before_create_account do
first_name = param("first_name").to_s.strip
last_name = param("last_name").to_s.strip
@@ -91,12 +101,12 @@ class Netig
end
# Vérification de l'adresse électronique
verify_account_page_title(
"Vérifier votre email — NETig"
)
verify_account_button "Confirmer mon adresse électronique"
verify_account_page_title "Vérifier votre email — NETig"
verify_account_button "Confirmer mon email"
verify_account_set_password? true
verify_account_redirect "/account"
verify_account_email_subject(
"Confirmez votre email — NETig"
)
@@ -124,6 +134,18 @@ class Netig
"Votre email est maintenant vérifié."
)
verify_account_error_flash(
"Impossible de vérifier votre adresse électronique."
)
no_matching_verify_account_key_error_flash(
"Le lien de vérification est invalide ou a expiré."
)
attempt_to_create_unverified_account_error_flash(
"Un compte utilisant cette adresse attend déjà sa vérification."
)
# Renvoi du courriel de vérification
resend_verify_account_page_title(
"Renvoyer l'email de vérification — NETig"
@@ -146,9 +168,17 @@ class Netig
"Vérifiez l'email saisi ou réessayez plus tard."
)
verify_account_email_recently_sent_error_flash(
"Un email de vérification vient de vous être envoyé. " \
"Veuillez patienter avant d'en demander un autre."
)
verify_account_email_sent_redirect "/verify-account-resend"
verify_account_email_recently_sent_redirect "/verify-account-resend"
# Sessions
already_logged_in do
request.redirect("/")
request.redirect("/account")
end
end
end
+11 -7
View File
@@ -1,21 +1,25 @@
class Netig
private
def core_member?
return false unless rodauth.logged_in?
return @core_member unless @core_member.nil?
def require_core_member!(r)
rodauth.require_account
core_member = DB[:members]
@core_member = DB[:members]
.join(:memberships, member_id: :id)
.where(
Sequel[:members][:account_id] => rodauth.account_id,
Sequel[:members][:account_id] => rodauth.session_value,
Sequel[:members][:kind] => "individual",
Sequel[:members][:core_member] => true,
Sequel[:memberships][:status] => "accepted"
)
.count
.positive?
end
return if core_member
private
def require_core_member!(r)
rodauth.require_account
return if core_member?
r.halt [
403,
+1
View File
@@ -28,6 +28,7 @@ require_relative "config/rodauth"
# Autorisations et routes dédiées
require_relative "lib/authorization"
require_relative "routes/account"
require_relative "routes/noyau"
require_relative "routes/contact"
+16
View File
@@ -0,0 +1,16 @@
class Netig
hash_branch "account" do |r|
require_core_member!(r)
@page_title = "Mon espace — NETig"
@page_description = "Gérez vos informations personnelles, suivez votre adhésion et retrouvez les services NETig accessibles."
@canonical_url = "https://netig.net/account"
r.is do
r.get do
view "account"
end
end
end
end
+2 -1
View File
@@ -15,10 +15,11 @@ class Netig
r.on "members" do
r.is do
r.get do
@page_title = "Adhérents — Noyau — NETig"
@page_title = "Comptes — Noyau — NETig"
@members = DB[:members]
.join(:accounts, id: :account_id)
.where(Sequel[:accounts][:status_id] => 2)
.select_all(:members)
.select_append(Sequel[:accounts][:email].as(:email))
.order(Sequel[:members][:id])
+18
View File
@@ -0,0 +1,18 @@
<section class="page-section">
<div class="content">
<h1>Mon espace</h1>
<p>Retrouvez vos informations personnelles et gérez votre adhésion.</p>
<% if core_member? %>
<section aria-labelledby="core-heading">
<h2 id="core-heading">Vie de l'association</h2>
<p>
Accédez aux outils de gestion et de travail collectif du Noyau.
</p>
<a href="/noyau">Espace du Noyau →</a>
</section>
<% end %>
</div>
</section>
+15 -8
View File
@@ -30,7 +30,7 @@
<a class="skip-link" href="#main-content">Aller au contenu</a>
<header>
<nav class="topbar" aria-label="Accès aux services">
<nav class="topbar" aria-label="Navigation principale">
<% unless request.path == "/" %>
<a href="/">
<img src="/images/favicon.svg" alt="Accueil NETig">
@@ -42,17 +42,24 @@
<a href="https://git.netig.net" target="_blank" rel="noopener noreferrer">NETgit ↗</a>
<% if rodauth.logged_in? %>
<form method="post" action="<%= rodauth.logout_path %>">
<%== rodauth.csrf_tag(rodauth.logout_path) %>
<button class="topbar__account" type="submit">
Déconnexion
</button>
</form>
<% if request.path == "/account" %>
<form method="post" action="<%= rodauth.logout_path %>">
<%== rodauth.csrf_tag(rodauth.logout_path) %>
<button class="topbar__account" type="submit">
Déconnexion
</button>
</form>
<% else %>
<a class="topbar__account" href="/account">
Mon espace →
</a>
<% end %>
<% elsif request.path != rodauth.login_path %>
<a class="topbar__account" href="<%= rodauth.login_path %>">
Connexion ➜
Mon espace →
</a>
<% end %>
</nav>
</header>
+39
View File
@@ -0,0 +1,39 @@
<section class="page-section">
<div class="content page-panel auth-panel">
<h1>Vérifier votre email</h1>
<p>
Pour confirmer votre email et activer
votre compte, choisissez un mot de passe.
</p>
<form
action="<%= rodauth.verify_account_path %>"
method="post"
class="rodauth"
role="form"
id="verify-account-form"
>
<%== rodauth.verify_account_additional_form_tags %>
<%== rodauth.csrf_tag %>
<%== rodauth.render("password-field") if rodauth.verify_account_set_password? %>
<% if rodauth.verify_account_set_password? && rodauth.require_password_confirmation? %>
<%== rodauth.render("password-confirm-field") %>
<% end %>
<%== rodauth.button(rodauth.verify_account_button) %>
</form>
<nav class="auth-links" aria-label="Autres possibilités">
<ul>
<li>
<a href="<%= rodauth.verify_account_resend_path %>">
Renvoyer l'email de vérification
</a>
</li>
</ul>
</nav>
</div>
</section>