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
+135 -19

No files matched your search

+37 -7
View File
@@ -11,7 +11,7 @@ class Netig
account_unverified_status_value 1 account_unverified_status_value 1
account_open_status_value 2 account_open_status_value 2
normalize_login(&:downcase) normalize_login { |login| login.to_s.strip.downcase }
email_from "NETig <noreply@netig.net>" email_from "NETig <noreply@netig.net>"
@@ -26,7 +26,11 @@ class Netig
login_notice_flash "Vous êtes maintenant connecté." login_notice_flash "Vous êtes maintenant connecté."
login_error_flash "La connexion a échoué." 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 login_return_to_requested_location? true
# Déconnexion # Déconnexion
@@ -37,6 +41,12 @@ class Netig
create_account_button "Créer mon compte" create_account_button "Créer mon compte"
create_account_link_text "Créer un 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 before_create_account do
first_name = param("first_name").to_s.strip first_name = param("first_name").to_s.strip
last_name = param("last_name").to_s.strip last_name = param("last_name").to_s.strip
@@ -91,12 +101,12 @@ class Netig
end end
# Vérification de l'adresse électronique # Vérification de l'adresse électronique
verify_account_page_title( verify_account_page_title "Vérifier votre email — NETig"
"Vérifier votre email — NETig" verify_account_button "Confirmer mon email"
)
verify_account_button "Confirmer mon adresse électronique"
verify_account_set_password? true verify_account_set_password? true
verify_account_redirect "/account"
verify_account_email_subject( verify_account_email_subject(
"Confirmez votre email — NETig" "Confirmez votre email — NETig"
) )
@@ -124,6 +134,18 @@ class Netig
"Votre email est maintenant vérifié." "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 # Renvoi du courriel de vérification
resend_verify_account_page_title( resend_verify_account_page_title(
"Renvoyer l'email de vérification — NETig" "Renvoyer l'email de vérification — NETig"
@@ -146,9 +168,17 @@ class Netig
"Vérifiez l'email saisi ou réessayez plus tard." "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 # Sessions
already_logged_in do already_logged_in do
request.redirect("/") request.redirect("/account")
end end
end end
end end
+11 -7
View File
@@ -1,21 +1,25 @@
class Netig class Netig
private def core_member?
return false unless rodauth.logged_in?
return @core_member unless @core_member.nil?
def require_core_member!(r) @core_member = DB[:members]
rodauth.require_account
core_member = DB[:members]
.join(:memberships, member_id: :id) .join(:memberships, member_id: :id)
.where( .where(
Sequel[:members][:account_id] => rodauth.account_id, Sequel[:members][:account_id] => rodauth.session_value,
Sequel[:members][:kind] => "individual", Sequel[:members][:kind] => "individual",
Sequel[:members][:core_member] => true, Sequel[:members][:core_member] => true,
Sequel[:memberships][:status] => "accepted" Sequel[:memberships][:status] => "accepted"
) )
.count .count
.positive? .positive?
end
return if core_member private
def require_core_member!(r)
rodauth.require_account
return if core_member?
r.halt [ r.halt [
403, 403,
+1
View File
@@ -28,6 +28,7 @@ require_relative "config/rodauth"
# Autorisations et routes dédiées # Autorisations et routes dédiées
require_relative "lib/authorization" require_relative "lib/authorization"
require_relative "routes/account"
require_relative "routes/noyau" require_relative "routes/noyau"
require_relative "routes/contact" 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.on "members" do
r.is do r.is do
r.get do r.get do
@page_title = "Adhérents — Noyau — NETig" @page_title = "Comptes — Noyau — NETig"
@members = DB[:members] @members = DB[:members]
.join(:accounts, id: :account_id) .join(:accounts, id: :account_id)
.where(Sequel[:accounts][:status_id] => 2)
.select_all(:members) .select_all(:members)
.select_append(Sequel[:accounts][:email].as(:email)) .select_append(Sequel[:accounts][:email].as(:email))
.order(Sequel[:members][:id]) .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>
+11 -4
View File
@@ -30,7 +30,7 @@
<a class="skip-link" href="#main-content">Aller au contenu</a> <a class="skip-link" href="#main-content">Aller au contenu</a>
<header> <header>
<nav class="topbar" aria-label="Accès aux services"> <nav class="topbar" aria-label="Navigation principale">
<% unless request.path == "/" %> <% unless request.path == "/" %>
<a href="/"> <a href="/">
<img src="/images/favicon.svg" alt="Accueil NETig"> <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> <a href="https://git.netig.net" target="_blank" rel="noopener noreferrer">NETgit ↗</a>
<% if rodauth.logged_in? %> <% if rodauth.logged_in? %>
<% if request.path == "/account" %>
<form method="post" action="<%= rodauth.logout_path %>"> <form method="post" action="<%= rodauth.logout_path %>">
<%== rodauth.csrf_tag(rodauth.logout_path) %> <%== rodauth.csrf_tag(rodauth.logout_path) %>
<button class="topbar__account" type="submit"> <button class="topbar__account" type="submit">
Déconnexion Déconnexion
</button> </button>
</form> </form>
<% elsif request.path != rodauth.login_path %> <% else %>
<a class="topbar__account" href="<%= rodauth.login_path %>"> <a class="topbar__account" href="/account">
Connexion ➜ Mon espace →
</a> </a>
<% end %> <% end %>
<% elsif request.path != rodauth.login_path %>
<a class="topbar__account" href="<%= rodauth.login_path %>">
Mon espace →
</a>
<% end %>
</nav> </nav>
</header> </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>