Skip to content

Commit 71eae6b

Browse files
Fix singleton UI scope for password reset use case (#654)
--------- Co-authored-by: Steffengreiner <[email protected]>
1 parent 475dacd commit 71eae6b

18 files changed

+277
-527
lines changed

identity/src/main/java/life/qbic/identity/application/user/registration/ConfirmEmailInput.java

-18
This file was deleted.

identity/src/main/java/life/qbic/identity/application/user/registration/ConfirmEmailOutput.java

-14
This file was deleted.

identity/src/main/java/life/qbic/identity/application/user/registration/EmailAddressConfirmation.java

-38
This file was deleted.

identity/src/main/java/life/qbic/identity/application/user/registration/RegisterUserInput.java

-30
This file was deleted.

identity/src/main/java/life/qbic/identity/application/user/registration/RegisterUserOutput.java

-27
This file was deleted.

user-interface/src/main/java/life/qbic/datamanager/AppConfig.java

+1-7
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import life.qbic.identity.application.user.policy.directive.WhenUserActivatedSubmitIntegrationEvent;
2020
import life.qbic.identity.application.user.policy.directive.WhenUserRegisteredSendConfirmationEmail;
2121
import life.qbic.identity.application.user.policy.directive.WhenUserRegisteredSubmitIntegrationEvent;
22-
import life.qbic.identity.application.user.registration.EmailAddressConfirmation;
2322
import life.qbic.identity.domain.repository.UserDataStorage;
2423
import life.qbic.identity.domain.repository.UserRepository;
2524
import life.qbic.infrastructure.email.EmailServiceProvider;
@@ -41,11 +40,11 @@
4140
import life.qbic.projectmanagement.application.policy.MeasurementUpdatedPolicy;
4241
import life.qbic.projectmanagement.application.policy.OfferAddedPolicy;
4342
import life.qbic.projectmanagement.application.policy.ProjectAccessGrantedPolicy;
43+
import life.qbic.projectmanagement.application.policy.ProjectChangedPolicy;
4444
import life.qbic.projectmanagement.application.policy.ProjectRegisteredPolicy;
4545
import life.qbic.projectmanagement.application.policy.QCAddedPolicy;
4646
import life.qbic.projectmanagement.application.policy.SampleDeletedPolicy;
4747
import life.qbic.projectmanagement.application.policy.SampleRegisteredPolicy;
48-
import life.qbic.projectmanagement.application.policy.ProjectChangedPolicy;
4948
import life.qbic.projectmanagement.application.policy.directive.AddSampleToBatch;
5049
import life.qbic.projectmanagement.application.policy.directive.CreateNewSampleStatisticsEntry;
5150
import life.qbic.projectmanagement.application.policy.directive.DeleteSampleFromBatch;
@@ -89,11 +88,6 @@ public class AppConfig {
8988
9089
Section starts below
9190
*/
92-
@Bean
93-
public EmailAddressConfirmation confirmEmailInput(
94-
IdentityService identityService) {
95-
return new EmailAddressConfirmation(identityService);
96-
}
9791

9892
@Bean
9993
public IdentityService userRegistrationService(

user-interface/src/main/java/life/qbic/datamanager/Application.java

-23
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,15 @@
66
import com.vaadin.flow.server.PWA;
77
import com.vaadin.flow.theme.Theme;
88
import java.io.Serial;
9-
import life.qbic.datamanager.views.login.LoginHandler;
109
import life.qbic.datamanager.views.login.newpassword.NewPasswordHandler;
11-
import life.qbic.datamanager.views.login.passwordreset.PasswordResetHandler;
1210
import life.qbic.identity.application.user.password.NewPassword;
1311
import life.qbic.identity.application.user.password.NewPasswordOutput;
14-
import life.qbic.identity.application.user.password.PasswordResetOutput;
15-
import life.qbic.identity.application.user.password.PasswordResetRequest;
16-
import life.qbic.identity.application.user.registration.ConfirmEmailOutput;
17-
import life.qbic.identity.application.user.registration.EmailAddressConfirmation;
1812
import life.qbic.identity.domain.registry.DomainRegistry;
1913
import life.qbic.identity.domain.repository.UserRepository;
2014
import life.qbic.identity.domain.service.UserDomainService;
2115
import life.qbic.logging.api.Logger;
2216
import life.qbic.logging.service.LoggerFactory;
2317
import life.qbic.projectmanagement.application.DataRepoConnectionTester;
24-
import org.springframework.beans.BeansException;
2518
import org.springframework.boot.SpringApplication;
2619
import org.springframework.boot.autoconfigure.SpringBootApplication;
2720
import org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration;
@@ -70,21 +63,5 @@ public static void main(String[] args) {
7063
// We need to set up the domain registry and register important services:
7164
var userRepository = appContext.getBean(UserRepository.class);
7265
DomainRegistry.instance().registerService(new UserDomainService(userRepository));
73-
74-
setupUseCases(appContext);
75-
}
76-
77-
private static void setupUseCases(ConfigurableApplicationContext context) {
78-
var emailAddressConfirmation = context.getBean(EmailAddressConfirmation.class);
79-
var loginHandler = (ConfirmEmailOutput) context.getBean(LoginHandler.class);
80-
emailAddressConfirmation.setConfirmEmailOutput(loginHandler);
81-
82-
var passwordReset = context.getBean(PasswordResetRequest.class);
83-
var passwordResetHandler = (PasswordResetOutput) context.getBean(PasswordResetHandler.class);
84-
passwordReset.setUseCaseOutput(passwordResetHandler);
85-
86-
var newPassword = context.getBean(NewPassword.class);
87-
var newPasswordHandler = (NewPasswordOutput) context.getBean(NewPasswordHandler.class);
88-
newPassword.setUseCaseOutput(newPasswordHandler);
8966
}
9067
}
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
11
package life.qbic.datamanager.views.login;
22

3-
import com.vaadin.flow.router.BeforeEvent;
4-
import java.util.List;
5-
import java.util.Map;
3+
import java.util.Objects;
64
import life.qbic.datamanager.Application;
7-
import life.qbic.datamanager.views.AppRoutes;
8-
import life.qbic.datamanager.views.AppRoutes.Projects;
9-
import life.qbic.datamanager.views.notifications.ErrorMessage;
10-
import life.qbic.datamanager.views.notifications.InformationMessage;
11-
import life.qbic.identity.application.user.registration.ConfirmEmailInput;
12-
import life.qbic.identity.application.user.registration.ConfirmEmailOutput;
135
import life.qbic.logging.api.Logger;
146
import life.qbic.logging.service.LoggerFactory;
157
import org.springframework.beans.factory.annotation.Autowired;
@@ -22,102 +14,20 @@
2214
* @since 1.0.0
2315
*/
2416
@Component
25-
public class LoginHandler implements LoginHandlerInterface, ConfirmEmailOutput {
17+
public class LoginHandler {
2618

2719
private static final Logger logger = LoggerFactory.logger(Application.class.getName());
2820

29-
private LoginLayout registeredLoginView;
30-
31-
private final ConfirmEmailInput confirmEmailInput;
3221

3322
private final String emailConfirmationParameter;
3423

3524
@Autowired
36-
LoginHandler(ConfirmEmailInput confirmEmailInput,
37-
@Value("${EMAIL_CONFIRMATION_PARAMETER:confirm-email}") String emailConfirmationParameter) {
38-
this.confirmEmailInput = confirmEmailInput;
39-
this.emailConfirmationParameter = emailConfirmationParameter;
40-
}
41-
42-
@Override
43-
public void handle(LoginLayout loginView) {
44-
if (registeredLoginView != loginView) {
45-
registeredLoginView = loginView;
46-
}
47-
initFields();
48-
addListener();
49-
}
50-
51-
private void initFields() {
52-
clearNotifications();
53-
}
54-
55-
private void showInvalidCredentialsError() {
56-
showError("Incorrect username or password", "Please try again.");
57-
}
58-
59-
private void showEmailConfirmationInformation() {
60-
showInformation("Email address confirmed", "You can now login with your credentials.");
61-
}
62-
63-
private void showEmailConfirmationReminder() {
64-
showInformation("Registration mail sent",
65-
"Please check your mail inbox to confirm your registration");
66-
}
67-
68-
public void clearNotifications() {
69-
registeredLoginView.notificationLayout.removeAll();
70-
}
71-
72-
public void showError(String title, String description) {
73-
clearNotifications();
74-
ErrorMessage errorMessage = new ErrorMessage(title, description);
75-
registeredLoginView.notificationLayout.add(errorMessage);
76-
}
77-
78-
public void showInformation(String title, String description) {
79-
clearNotifications();
80-
InformationMessage informationMessage = new InformationMessage(title, description);
81-
registeredLoginView.notificationLayout.add(informationMessage);
82-
}
83-
84-
private void addListener() {
85-
registeredLoginView.addLoginListener(it ->
86-
onLoginSucceeded());
87-
registeredLoginView.addForgotPasswordListener(
88-
it -> it.getSource().getUI().ifPresent(ui -> ui.navigate(AppRoutes.RESET_PASSWORD)));
89-
}
90-
91-
private void onLoginSucceeded() {
92-
clearNotifications();
93-
registeredLoginView.getUI().ifPresentOrElse(
94-
ui -> ui.navigate(Projects.PROJECTS),
95-
() -> logger.error("No UI found!"));
25+
LoginHandler(@Value("${EMAIL_CONFIRMATION_PARAMETER:confirm-email}") String emailConfirmationParameter) {
26+
this.emailConfirmationParameter = Objects.requireNonNull(emailConfirmationParameter);
9627
}
9728

98-
@Override
99-
public void handle(BeforeEvent beforeEvent) {
100-
Map<String, List<String>> queryParams = beforeEvent.getLocation().getQueryParameters()
101-
.getParameters();
102-
if (queryParams.containsKey("error")) {
103-
showInvalidCredentialsError();
104-
}
105-
if (queryParams.containsKey(emailConfirmationParameter)) {
106-
String userId = queryParams.get(emailConfirmationParameter).iterator().next();
107-
confirmEmailInput.confirmEmailAddress(userId);
108-
}
109-
if (queryParams.containsKey("userRegistered")) {
110-
showEmailConfirmationReminder();
111-
}
29+
public String emailConfirmationParameter() {
30+
return emailConfirmationParameter;
11231
}
11332

114-
@Override
115-
public void onEmailConfirmationSuccess() {
116-
showEmailConfirmationInformation();
117-
}
118-
119-
@Override
120-
public void onEmailConfirmationFailure(String reason) {
121-
showError("Email confirmation failed", reason);
122-
}
12333
}

user-interface/src/main/java/life/qbic/datamanager/views/login/LoginHandlerInterface.java

-28
This file was deleted.

0 commit comments

Comments
 (0)