From d025936c64d30adddd0fa6013b27d03727cd0ce4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Fri, 23 Sep 2022 18:52:47 +0200 Subject: [PATCH] Please cherry-pick: - cannot copy whole user instance to RequestScoped bean as this is being forgotten on next request, SessionScoped will be a little overdose + it can be solved by taking the user instance already set in beanHelper bean MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- .../AddressbookWebRequestHelperBean.java | 5 + ...AddressbookWebRequestHelperController.java | 40 ++++ .../AddressbookAdminUserWebRequestBean.java | 172 ++++++++---------- web/admin/user/admin_user_lock.xhtml | 19 +- 4 files changed, 138 insertions(+), 98 deletions(-) diff --git a/src/java/org/mxchange/addressbook/beans/helper/AddressbookWebRequestHelperBean.java b/src/java/org/mxchange/addressbook/beans/helper/AddressbookWebRequestHelperBean.java index d36a3629..d349c65a 100644 --- a/src/java/org/mxchange/addressbook/beans/helper/AddressbookWebRequestHelperBean.java +++ b/src/java/org/mxchange/addressbook/beans/helper/AddressbookWebRequestHelperBean.java @@ -161,6 +161,7 @@ public class AddressbookWebRequestHelperBean implements AddressbookWebRequestHel *

* @return Contact instance */ + @Override public Contact getContact () { return this.contact; } @@ -215,6 +216,7 @@ public class AddressbookWebRequestHelperBean implements AddressbookWebRequestHel *

* @return Dialable fax number */ + @Override public DialableFaxNumber getFaxNumber () { return this.faxNumber; } @@ -233,6 +235,7 @@ public class AddressbookWebRequestHelperBean implements AddressbookWebRequestHel *

* @return Dialable land-line number */ + @Override public DialableLandLineNumber getLandLineNumber () { return this.landLineNumber; } @@ -251,6 +254,7 @@ public class AddressbookWebRequestHelperBean implements AddressbookWebRequestHel *

* @return Dialable mobile number */ + @Override public DialableMobileNumber getMobileNumber () { return this.mobileNumber; } @@ -269,6 +273,7 @@ public class AddressbookWebRequestHelperBean implements AddressbookWebRequestHel *

* @return User instance */ + @Override public User getUser () { return this.user; } diff --git a/src/java/org/mxchange/addressbook/beans/helper/AddressbookWebRequestHelperController.java b/src/java/org/mxchange/addressbook/beans/helper/AddressbookWebRequestHelperController.java index 072375ad..a043f84b 100644 --- a/src/java/org/mxchange/addressbook/beans/helper/AddressbookWebRequestHelperController.java +++ b/src/java/org/mxchange/addressbook/beans/helper/AddressbookWebRequestHelperController.java @@ -17,6 +17,11 @@ package org.mxchange.addressbook.beans.helper; import java.io.Serializable; +import org.mxchange.jcontacts.model.contact.Contact; +import org.mxchange.jphone.model.phonenumbers.fax.DialableFaxNumber; +import org.mxchange.jphone.model.phonenumbers.landline.DialableLandLineNumber; +import org.mxchange.jphone.model.phonenumbers.mobile.DialableMobileNumber; +import org.mxchange.jusercore.model.user.User; /** * An interface for general bean helper @@ -25,4 +30,39 @@ import java.io.Serializable; */ public interface AddressbookWebRequestHelperController extends Serializable { + /** + * Getter for contact instance + *

+ * @return Contact instance + */ + Contact getContact (); + + /** + * Getter for dialable fax number + *

+ * @return Dialable fax number + */ + DialableFaxNumber getFaxNumber (); + + /** + * Getter for dialable land-line number + *

+ * @return Dialable land-line number + */ + DialableLandLineNumber getLandLineNumber (); + + /** + * Getter for dialable mobile number + *

+ * @return Dialable mobile number + */ + DialableMobileNumber getMobileNumber (); + + /** + * Getter for user instance + *

+ * @return User instance + */ + User getUser (); + } diff --git a/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebRequestBean.java b/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebRequestBean.java index 00080eb5..ec35e555 100644 --- a/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebRequestBean.java +++ b/src/java/org/mxchange/addressbook/beans/user/AddressbookAdminUserWebRequestBean.java @@ -32,12 +32,12 @@ import javax.inject.Named; import org.mxchange.addressbook.beans.BaseAddressbookBean; import org.mxchange.addressbook.beans.contact.AddressbookAdminContactWebRequestController; import org.mxchange.addressbook.beans.contact.AddressbookContactWebRequestController; +import org.mxchange.addressbook.beans.helper.FinancialsWebViewHelperController; import org.mxchange.addressbook.beans.localization.AddressbookLocalizationSessionController; import org.mxchange.jcontacts.model.contact.Contact; import org.mxchange.jcoreee.utils.FacesUtils; import org.mxchange.jusercore.events.user.add.AdminAddedUserEvent; import org.mxchange.jusercore.events.user.add.ObservableAdminAddedUserEvent; -import org.mxchange.jusercore.events.user.created.ObservableCreatedUserEvent; import org.mxchange.jusercore.events.user.delete.AdminDeletedUserEvent; import org.mxchange.jusercore.events.user.delete.ObservableAdminDeletedUserEvent; import org.mxchange.jusercore.events.user.linked.AdminLinkedUserEvent; @@ -98,6 +98,12 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl @EJB (lookup = "java:global/addressbook-ejb/adminUser!org.mxchange.jusercore.model.user.AdminUserSessionBeanRemote") private AdminUserSessionBeanRemote adminUserBean; + /** + * Bean helper + */ + @Inject + private FinancialsWebViewHelperController beanHelper; + /** * Contact instance */ @@ -129,11 +135,6 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl @Any private Event updatedUserDataEvent; - /** - * User instance - */ - private User user; - /** * General user EJB */ @@ -261,7 +262,7 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl // Is the user name or email address used already? // @TODO Add password length check - if (this.userController.isUserNameRegistered(newUser)) { + if ((this.featureController.isFeatureEnabled("user_login_require_user_name")) && (userListController.isUserNameRegistered(newUser))) { // User name is already used throw new FaceletException(new UserNameAlreadyRegisteredException(newUser)); } else if ((this.getContact() == null) && (this.contactController.isEmailAddressRegistered(newUser.getUserContact()))) { @@ -312,6 +313,15 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl throw new FaceletException(ex); } + // Now, that all is set, call EJB + if (this.getContact() instanceof Contact) { + // Fire event + userLinkedEvent.fire(new AdminLinkedUserEvent(updatedUser)); + } else { + // Fire event + this.addedUserEvent.fire(new AdminAddedUserEvent(updatedUser)); + } + // Clear helper this.setContact(null); @@ -322,33 +332,6 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl return "admin_list_user"; //NOI18N } - /** - * Event observer for when a bean helper has successfully created a user - * instance, means the user exists. If the user does not exist, this event - * should not fire but instead a proper exception must be thrown. - *

- * @param event User created event - */ - public void afterCreatedUserEvent (@Observes final ObservableCreatedUserEvent event) { - // Is the instance valid? - if (null == event) { - // Throw NPE - throw new NullPointerException("event is null"); //NOI18N - } else if (event.getCreatedUser() == null) { - // Throw NPE again - throw new NullPointerException("event.createdUser is null"); //NOI18N - } else if (event.getCreatedUser().getUserId() == null) { - // Throw NPE again - throw new NullPointerException("event.createdUser.userId is null"); //NOI18N - } else if (event.getCreatedUser().getUserId() < 1) { - // Throw NPE again - throw new NullPointerException(MessageFormat.format("event.createdUser.userId={0} is not valid", event.getCreatedUser().getUserId())); //NOI18N - } - - // Set whole user - this.setUser(event.getCreatedUser()); - } - /** * Event observer for new user registrations *

@@ -384,21 +367,24 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl * @return Redirect outcome */ public String deleteUserData () { + // Get user instance + final User user = this.beanHelper.getUser(); + // Is the user instance valid and CONFIRMED? - if (this.getUser() == null) { + if (null == user) { // Throw NPE throw new NullPointerException("user is null"); //NOI18N - } else if (this.getUser().getUserId() == null) { + } else if (user.getUserId() == null) { // Throw again throw new NullPointerException("user.userId is null"); //NOI18N - } else if (this.getUser().getUserId() < 1) { + } else if (user.getUserId() < 1) { // Invalid id number - throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is not valid", this.getUser().getUserId())); //NOI18N + throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is not valid", user.getUserId())); //NOI18N } try { // All fine, delete it - this.adminUserBean.deleteUser(this.getUser(), this.getUserDeleteReason()); + this.adminUserBean.deleteUser(user, this.getUserDeleteReason()); } catch (final UserNotFoundException ex) { // Should not happen, so throw again throw new FaceletException(ex); @@ -417,25 +403,28 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl * @return Redirect outcome */ public String editUserData () { + // Get user instance + final User user = this.beanHelper.getUser(); + // Null password means not setting it String encryptedPassword = null; // Check if user instance is in helper and valid - if (this.getUser() == null) { + if (null == user) { // Throw NPE throw new NullPointerException("beanHelper.user is null"); //NOI18N - } else if (this.getUser().getUserId() == null) { + } else if (user.getUserId() == null) { // Throw NPE again throw new NullPointerException("beanHelper.user.userId is null"); //NOI18N - } else if (this.getUser().getUserId() < 1) { + } else if (user.getUserId() < 1) { // Invalid id - throw new IllegalStateException(MessageFormat.format("beanHelper.user.userId={0} is invalid", this.getUser().getUserId())); //NOI18N + throw new IllegalStateException(MessageFormat.format("beanHelper.user.userId={0} is invalid", user.getUserId())); //NOI18N } else if (this.getUserName() == null) { // Not all required fields are set - throw new NullPointerException("this.userName is null"); //NOI18N + throw new NullPointerException("userName is null"); //NOI18N } else if (this.getUserName().isEmpty()) { // Not all required fields are set - throw new IllegalArgumentException("this.userName is empty"); //NOI18N + throw new IllegalArgumentException("userName is empty"); //NOI18N } else if (((!this.getUserPassword().isEmpty()) || (!this.getUserPasswordRepeat().isEmpty())) && (!this.isSamePasswordEntered())) { // Clear password fields this.setUserPassword(null); @@ -453,7 +442,7 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl return ""; //NOI18N } else if (this.isSamePasswordEntered()) { // Same password entered, create container - if ((Objects.equals(this.getUser().getUserMustChangePassword(), this.getUserMustChangePassword())) && (UserLoginUtils.ifPasswordMatches(new UserLoginContainer(this.getUser(), this.getUserPassword())))) { + if ((Objects.equals(user.getUserMustChangePassword(), this.getUserMustChangePassword())) && (UserLoginUtils.ifPasswordMatches(new UserLoginContainer(user, this.getUserPassword())))) { // Clear password fields this.setUserPassword(null); this.setUserPasswordRepeat(null); @@ -468,17 +457,25 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl } // Set user name and flag - this.getUser().setUserName(this.getUserName()); - this.getUser().setUserMustChangePassword(this.getUserMustChangePassword()); + user.setUserName(this.getUserName()); + user.setUserMustChangePassword(this.getUserMustChangePassword()); // Is a password set? if (encryptedPassword != null) { // Set it as well - this.getUser().setUserEncryptedPassword(encryptedPassword); + user.setUserEncryptedPassword(encryptedPassword); } - // Call EJB for updating user data - final User updatedUser = this.userBean.updateUserData(this.getUser()); + // Init updated User instance + final User updatedUser; + + try { + // Call EJB for updating user data + updatedUser = this.userBean.updateUserData(user); + } catch (final UserNotFoundException ex) { + // Throw as cause + throw new FacesException(ex); + } // Fire event this.updatedUserDataEvent.fire(new AdminUpdatedUserDataEvent(updatedUser)); @@ -505,24 +502,6 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl this.contact = contact; } - /** - * Getter for user instance - *

- * @return User instance - */ - public User getUser () { - return this.user; - } - - /** - * Setter for user instance - *

- * @param user User instance - */ - public void setUser (final User user) { - this.user = user; - } - /** * Getter for user delete reason *

@@ -638,28 +617,31 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl * @return Redirect outcome */ public String lockUserAccount () { + // Get user instance + final User user = this.beanHelper.getUser(); + // Is the user instance valid and CONFIRMED? - if (this.getUser() == null) { + if (null == user) { // Throw NPE - throw new NullPointerException("this.user is null"); //NOI18N - } else if (this.getUser().getUserId() == null) { + throw new NullPointerException("user is null"); //NOI18N + } else if (user.getUserId() == null) { // Throw again - throw new NullPointerException("this.user.userId is null"); //NOI18N - } else if (this.getUser().getUserId() < 1) { + throw new NullPointerException("user.userId is null"); //NOI18N + } else if (user.getUserId() < 1) { // Invalid id number - throw new IllegalArgumentException(MessageFormat.format("this.user.userId={0} is not valid", this.getUser().getUserId())); //NOI18N - } else if (this.getUser().getUserAccountStatus() == UserAccountStatus.LOCKED) { + throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is not valid", user.getUserId())); //NOI18N + } else if (user.getUserAccountStatus() == UserAccountStatus.LOCKED) { // User account is locked - throw new FacesException(new UserStatusLockedException(this.getUser())); - } else if (this.getUser().getUserAccountStatus() == UserAccountStatus.UNCONFIRMED) { + throw new FacesException(new UserStatusLockedException(user)); + } else if (user.getUserAccountStatus() == UserAccountStatus.UNCONFIRMED) { // User account is locked - throw new FaceletException(new UserStatusUnconfirmedException(this.getUser())); + throw new FacesException(new UserStatusUnconfirmedException(user)); } else if (this.getUserLockReason() == null) { // Throw NPE again - throw new NullPointerException("this.userLockReason is null"); //NOI18N + throw new NullPointerException("userLockReason is null"); //NOI18N } else if (this.getUserLockReason().isEmpty()) { // Empty lock reason - throw new IllegalArgumentException("this.userLockReason is empty"); //NOI18N + throw new IllegalArgumentException("userLockReason is empty"); //NOI18N } // Init updated user instance @@ -670,7 +652,7 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl final String baseUrl = FacesUtils.generateBaseUrl(); // Call EJB to lock account - updatedUser = this.adminUserBean.lockUserAccount(this.getUser(), this.getUserLockReason(), baseUrl); + updatedUser = this.adminUserBean.lockUserAccount(user, this.getUserLockReason(), baseUrl); } catch (final UserStatusLockedException | UserStatusUnconfirmedException | UserNotFoundException ex) { // Throw again throw new FaceletException(ex); @@ -693,22 +675,25 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl * @return Redirect outcome */ public String unlockUserAccount () { + // Get user instance + final User user = this.beanHelper.getUser(); + // Is the user instance valid and CONFIRMED? - if (this.getUser() == null) { + if (null == user) { // Throw NPE - throw new NullPointerException("this.user is null"); //NOI18N - } else if (this.getUser().getUserId() == null) { + throw new NullPointerException("user is null"); //NOI18N + } else if (user.getUserId() == null) { // Throw again - throw new NullPointerException("this.user.userId is null"); //NOI18N - } else if (this.getUser().getUserId() < 1) { + throw new NullPointerException("user.userId is null"); //NOI18N + } else if (user.getUserId() < 1) { // Invalid id number - throw new IllegalArgumentException(MessageFormat.format("this.user.userId={0} is not valid", this.getUser().getUserId())); //NOI18N - } else if (this.getUser().getUserAccountStatus() == UserAccountStatus.CONFIRMED) { + throw new IllegalArgumentException(MessageFormat.format("user.userId={0} is not valid", user.getUserId())); //NOI18N + } else if (user.getUserAccountStatus() == UserAccountStatus.CONFIRMED) { // User account is locked - throw new FacesException(new UserStatusConfirmedException(this.getUser())); - } else if (this.getUser().getUserAccountStatus() == UserAccountStatus.UNCONFIRMED) { + throw new FacesException(new UserStatusConfirmedException(user)); + } else if (user.getUserAccountStatus() == UserAccountStatus.UNCONFIRMED) { // User account is locked - throw new FaceletException(new UserStatusUnconfirmedException(this.getUser())); + throw new FacesException(new UserStatusUnconfirmedException(user)); } // Init updated user instance @@ -719,7 +704,7 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl final String baseUrl = FacesUtils.generateBaseUrl(); // Call EJB to unlock account - updatedUser = this.adminUserBean.unlockUserAccount(this.getUser(), baseUrl); + updatedUser = this.adminUserBean.unlockUserAccount(user, baseUrl); } catch (final UserStatusConfirmedException | UserStatusUnconfirmedException | UserNotFoundException ex) { // Throw again throw new FaceletException(ex); @@ -741,6 +726,7 @@ public class AddressbookAdminUserWebRequestBean extends BaseAddressbookBean impl private void clear () { // Clear all data this.setContact(null); + this.setUserDeleteReason(null); this.setUserLockReason(null); this.setUserMustChangePassword(null); this.setUserName(null); diff --git a/web/admin/user/admin_user_lock.xhtml b/web/admin/user/admin_user_lock.xhtml index b488e4f7..03bfc251 100644 --- a/web/admin/user/admin_user_lock.xhtml +++ b/web/admin/user/admin_user_lock.xhtml @@ -74,11 +74,20 @@ -

+ + + + + + + -- 2.39.5