From 7b321577dba5e47b914e29a7949981260fa01250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A2u=20Cao?= Date: Thu, 25 May 2023 16:55:27 +0200 Subject: [PATCH] Update LDAP mail attribute when re-confirming email --- app/models/user.rb | 16 +++++++++++----- app/services/ldap_manager/update_email.rb | 12 ++++++++++++ app/services/ldap_manager_service.rb | 2 ++ 3 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 app/services/ldap_manager/update_email.rb create mode 100644 app/services/ldap_manager_service.rb diff --git a/app/models/user.rb b/app/models/user.rb index 4945d6e..93b7a5d 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -58,13 +58,19 @@ class User < ApplicationRecord end def devise_after_confirmation - enable_service %w[ discourse gitea mediawiki xmpp ] + if ldap_entry[:mail] != self.email + # E-Mail update confirmed + LdapManager::UpdateEmail.call(self.dn, self.email) + else + # E-Mail from signup confirmed (i.e. account activation) + enable_service %w[ discourse gitea mediawiki xmpp ] - #TODO enable in development when we have easy setup of ejabberd etc. - return if Rails.env.development? || !Setting.ejabberd_enabled? + #TODO enable in development when we have easy setup of ejabberd etc. + return if Rails.env.development? || !Setting.ejabberd_enabled? - XmppExchangeContactsJob.perform_later(inviter, self) if inviter.present? - XmppSetDefaultBookmarksJob.perform_later(self) + XmppExchangeContactsJob.perform_later(inviter, self) if inviter.present? + XmppSetDefaultBookmarksJob.perform_later(self) + end end def send_devise_notification(notification, *args) diff --git a/app/services/ldap_manager/update_email.rb b/app/services/ldap_manager/update_email.rb new file mode 100644 index 0000000..5acd77f --- /dev/null +++ b/app/services/ldap_manager/update_email.rb @@ -0,0 +1,12 @@ +module LdapManager + class UpdateEmail < LdapManagerService + def initialize(dn, address) + @dn = dn + @address = address + end + + def call + replace_attribute @dn, :mail, [ @address ] + end + end +end diff --git a/app/services/ldap_manager_service.rb b/app/services/ldap_manager_service.rb new file mode 100644 index 0000000..0f43e32 --- /dev/null +++ b/app/services/ldap_manager_service.rb @@ -0,0 +1,2 @@ +class LdapManagerService < LdapService +end