diff --git a/config/rodauth.rb b/config/rodauth.rb index 322fda2..ee74873 100644 --- a/config/rodauth.rb +++ b/config/rodauth.rb @@ -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 " @@ -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 diff --git a/lib/authorization.rb b/lib/authorization.rb index c0c3083..4e75123 100644 --- a/lib/authorization.rb +++ b/lib/authorization.rb @@ -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, diff --git a/netig.rb b/netig.rb index 746d166..d66c4a2 100644 --- a/netig.rb +++ b/netig.rb @@ -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" diff --git a/routes/account.rb b/routes/account.rb new file mode 100644 index 0000000..065d941 --- /dev/null +++ b/routes/account.rb @@ -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 + diff --git a/routes/noyau.rb b/routes/noyau.rb index 3c500bb..2fc9271 100644 --- a/routes/noyau.rb +++ b/routes/noyau.rb @@ -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]) diff --git a/views/account.erb b/views/account.erb new file mode 100644 index 0000000..8b05b8b --- /dev/null +++ b/views/account.erb @@ -0,0 +1,18 @@ +
+
+

Mon espace

+

Retrouvez vos informations personnelles et gérez votre adhésion.

+ + <% if core_member? %> +
+

Vie de l'association

+ +

+ Accédez aux outils de gestion et de travail collectif du Noyau. +

+ + Espace du Noyau → +
+ <% end %> +
+
diff --git a/views/layout.erb b/views/layout.erb index 93303b7..fdf26e3 100644 --- a/views/layout.erb +++ b/views/layout.erb @@ -30,7 +30,7 @@
-
diff --git a/views/verify-account.erb b/views/verify-account.erb new file mode 100644 index 0000000..bb86d83 --- /dev/null +++ b/views/verify-account.erb @@ -0,0 +1,39 @@ +
+
+

Vérifier votre email

+ +

+ Pour confirmer votre email et activer + votre compte, choisissez un mot de passe. +

+ +
+ <%== 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) %> +
+ + +
+