From d72d85294af9e7292a0aaaea5aa58b6529d0ebec Mon Sep 17 00:00:00 2001 From: Philippe Pittoli Date: Fri, 3 Feb 2023 10:23:24 +0100 Subject: [PATCH] Crystal bindings: authd: right calls to the mailer. --- .../crystal/some-crystal-app/authd/main.cr | 32 ++++++++------ .../authd/requests/password.cr | 43 +++++++++---------- .../authd/requests/register.cr | 32 ++++++-------- 3 files changed, 50 insertions(+), 57 deletions(-) diff --git a/zig-impl/crystal/some-crystal-app/authd/main.cr b/zig-impl/crystal/some-crystal-app/authd/main.cr index f8e788b..475549d 100644 --- a/zig-impl/crystal/some-crystal-app/authd/main.cr +++ b/zig-impl/crystal/some-crystal-app/authd/main.cr @@ -16,14 +16,14 @@ extend AuthD class Baguette::Configuration class Auth < IPC - property recreate_indexes : Bool = false - property storage : String = "storage" - property registrations : Bool = false - property require_email : Bool = false - property activation_url : String? = nil - property field_subject : String? = nil - property field_from : String? = nil - property read_only_profile_keys : Array(String) = Array(String).new + property recreate_indexes : Bool = false + property storage : String = "storage" + property registrations : Bool = false + property require_email : Bool = false + property activation_template : String = "email-activation" + property recovery_template : String = "email-recovery" + property mailer_exe : String = "mailer" + property read_only_profile_keys : Array(String) = Array(String).new property print_password_recovery_parameters : Bool = false end @@ -135,6 +135,9 @@ class AuthD::Service < IPC def run Baguette::Log.title "Starting authd" + Baguette::Log.info "(mailer) Email activation template: #{@configuration.activation_template}" + Baguette::Log.info "(mailer) Email recovery template: #{@configuration.recovery_template}" + self.loop do |event| case event.type when LibIPC::EventType::Timer @@ -201,18 +204,19 @@ begin configuration.require_email = true end - parser.on "-t subject", "--subject title", "Subject of the email." do |s| - configuration.field_subject = s + parser.on "-t activation-template-name", "--activation-template name", "Email activation template." do |opt| + configuration.activation_template = opt end - parser.on "-f from-email", "--from email", "'From:' field to use in activation email." do |f| - configuration.field_from = f + parser.on "-r recovery-template-name", "--recovery-template name", "Email recovery template." do |opt| + configuration.recovery_template = opt end - parser.on "-u", "--activation-url url", "Activation URL." do |opt| - configuration.activation_url = opt + parser.on "-m mailer-exe", "--mailer mailer-exe", "Application to send registration emails." do |opt| + configuration.mailer_exe = opt end + parser.on "-x key", "--read-only-profile-key key", "Marks a user profile key as being read-only." do |key| configuration.read_only_profile_keys.push key end diff --git a/zig-impl/crystal/some-crystal-app/authd/requests/password.cr b/zig-impl/crystal/some-crystal-app/authd/requests/password.cr index 5b545f6..19602b8 100644 --- a/zig-impl/crystal/some-crystal-app/authd/requests/password.cr +++ b/zig-impl/crystal/some-crystal-app/authd/requests/password.cr @@ -90,32 +90,29 @@ class AuthD::Request authd.users_per_uid.update user.uid.to_s, user - unless (activation_url = authd.configuration.activation_url).nil? + # Once the user is created and stored, we try to contact him + if authd.configuration.print_password_recovery_parameters + pp! user.login, + user.contact.email.not_nil!, + user.password_renew_key.not_nil! + end - field_from = authd.configuration.field_from.not_nil! - activation_url = authd.configuration.activation_url.not_nil! + mailer_exe = authd.configuration.mailer_exe + template_name = authd.configuration.recovery_template - # Once the user is created and stored, we try to contact him + u_login = user.login + u_email = user.contact.email.not_nil! + u_token = user.password_renew_key.not_nil! - if authd.configuration.print_password_recovery_parameters - pp! user.login, - user.contact.email.not_nil!, - field_from, - activation_url, - user.password_renew_key.not_nil! - end - - unless Process.run("password-recovery-mailer", [ - "-l", user.login, - "-e", user.contact.email.not_nil!, - "-t", "Password recovery email", - "-f", field_from, - "-u", activation_url, - "-a", user.password_renew_key.not_nil! - ]).success? - - return Response::Error.new "cannot contact the user for password recovery" - end + # Once the user is created and stored, we try to contact him. + unless Process.run(mailer_exe, + # PARAMETERS + [ "send", template_name, u_email ], + # ENV + { "LOGIN" => u_login, "TOKEN" => u_token }, + true # clear environment + ).success? + raise "cannot contact user #{u_login} address #{u_email}" end Response::PasswordRecoverySent.new user.to_public diff --git a/zig-impl/crystal/some-crystal-app/authd/requests/register.cr b/zig-impl/crystal/some-crystal-app/authd/requests/register.cr index 9c23982..39ec789 100644 --- a/zig-impl/crystal/some-crystal-app/authd/requests/register.cr +++ b/zig-impl/crystal/some-crystal-app/authd/requests/register.cr @@ -22,12 +22,6 @@ class AuthD::Request return Response::Error.new "email required" end - activation_url = authd.configuration.activation_url - if activation_url.nil? - # In this case we should not accept its registration. - return Response::Error.new "No activation URL were entered. Cannot send activation mails." - end - if ! @email.nil? # Test on the email address format. grok = Grok.new [ "%{EMAILADDRESS:email}" ] @@ -58,27 +52,25 @@ class AuthD::Request user.date_registration = Time.local begin - field_subject = authd.configuration.field_subject.not_nil! - field_from = authd.configuration.field_from.not_nil! - activation_url = authd.configuration.activation_url.not_nil! + mailer_exe = authd.configuration.mailer_exe + template_name = authd.configuration.activation_template u_login = user.login u_email = user.contact.email.not_nil! u_activation_key = user.contact.activation_key.not_nil! - # Once the user is created and stored, we try to contact him - unless Process.run("activation-mailer", [ - "-l", u_login, - "-e", u_email, - "-t", field_subject, - "-f", field_from, - "-u", activation_url, - "-a", u_activation_key - ]).success? - raise "cannot contact user #{user.login} address #{user.contact.email}" + # Once the user is created and stored, we try to contact him. + unless Process.run(mailer_exe, + # PARAMETERS + [ "send", template_name, u_email ], + # ENV + { "LOGIN" => u_login, "TOKEN" => u_activation_key }, + true # clear environment + ).success? + raise "cannot contact user #{u_login} address #{u_email}" end rescue e - Baguette::Log.error "activation-mailer: #{e}" + Baguette::Log.error "mailer: #{e}" return Response::Error.new "cannot contact the user (not registered)" end