diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java index 60526bd6a..c3f955d93 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java @@ -26,6 +26,7 @@ public class UserInfoDaoImpl extends DatabaseAccess implements UserInf @Override public QueryableList getWithCriteria(UserInfoCriteria criteria) { QueryableList users = this.getDatabaseService().getQueryable(UserInfo.class); + users.where(((builder, root) -> builder.equal(root.get("userStatus"), 0))); if (criteria.getAppRoles() != null && !criteria.getAppRoles().isEmpty()) users.where((builder, root) -> root.join("userRoles").get("role").in(criteria.getAppRoles())); if (criteria.getLike() != null) diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/UserInfo.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/UserInfo.java index ecd4263a5..c2030985f 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/entities/UserInfo.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/UserInfo.java @@ -35,6 +35,9 @@ public class UserInfo implements DataEntity { @Column(name = "usertype", nullable = false) private Short usertype; // 0 internal, 1 external + @Column(name = "userstatus", nullable = false) + private Short userStatus; // 0 active, 1 inactive + @Column(name = "verified_email", nullable = true) private Boolean verified_email = null; @@ -187,6 +190,14 @@ public class UserInfo implements DataEntity { this.notifications = notifications; } + public Short getUserStatus() { + return userStatus; + } + + public void setUserStatus(Short userStatus) { + this.userStatus = userStatus; + } + @Override public void update(UserInfo entity) { this.name = entity.getName(); @@ -194,6 +205,7 @@ public class UserInfo implements DataEntity { this.additionalinfo = entity.getAdditionalinfo(); this.lastloggedin = entity.getLastloggedin(); this.userRoles = entity.getUserRoles(); + this.userStatus = entity.getUserStatus(); } @Override diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailMergeConfirmation.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailMergeConfirmation.java index aca3817af..d1e89b493 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailMergeConfirmation.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailMergeConfirmation.java @@ -51,7 +51,7 @@ public class EmailMergeConfirmation { public @ResponseBody ResponseEntity sendConfirmatioEmail(@RequestBody UserMergeRequestModel requestModel, Principal principal) { try { - this.emailConfirmationManager.sendConfirmationEmail(requestModel.getEmail(), principal, requestModel.getUserId()); + this.emailConfirmationManager.sendConfirmationEmail(requestModel.getEmail(), principal, requestModel.getUserId(), requestModel.getProvider()); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE)); } catch (Exception ex) { if (ex instanceof HasConfirmedEmailException) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/builders/entity/UserInfoBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/builders/entity/UserInfoBuilder.java index 830262e58..e932d4299 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/builders/entity/UserInfoBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/builders/entity/UserInfoBuilder.java @@ -40,6 +40,8 @@ public class UserInfoBuilder extends Builder { private Set userRoles = new HashSet<>(); + private Short userStatus; + public UserInfoBuilder id(UUID id) { this.id = id; return this; @@ -100,6 +102,11 @@ public class UserInfoBuilder extends Builder { return this; } + public UserInfoBuilder userStatus(Short userStatus) { + this.userStatus = userStatus; + return this; + } + @Override public UserInfo build() { UserInfo userInfo = new UserInfo(); @@ -115,6 +122,7 @@ public class UserInfoBuilder extends Builder { userInfo.setCredentials(credentials); userInfo.setDmps(dmps); userInfo.setVerified_email(verified_email); + userInfo.setUserStatus(userStatus); return userInfo; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java index c31567030..58639f0f7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java @@ -22,10 +22,9 @@ import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; +import javax.transaction.Transactional; import java.io.IOException; -import java.util.Date; -import java.util.List; -import java.util.UUID; +import java.util.*; @Component public class MergeEmailConfirmationManager { @@ -39,6 +38,7 @@ public class MergeEmailConfirmationManager { this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository(); } + @Transactional public void confirmEmail(String token) throws TokenExpiredException, HasConfirmedEmailException { EmailConfirmation loginConfirmationEmail = apiContext.getOperationsContext() .getDatabaseRepository().getLoginConfirmationEmailDao().asQueryable() @@ -51,13 +51,14 @@ public class MergeEmailConfirmationManager { .where((builder, root) -> builder.equal(root.get("id"), loginConfirmationEmail.getUserId())).getSingle(); try { - UUID otherUserId = new ObjectMapper().readValue(loginConfirmationEmail.getData(), UUID.class); + Map map = new ObjectMapper().readValue(loginConfirmationEmail.getData(), HashMap.class); + UUID otherUserId = UUID.fromString((String) map.get("userId")); UserInfo user = databaseRepository.getUserInfoDao().asQueryable() - .where((builder, root) -> builder.equal(root.get("id"), loginConfirmationEmail.getUserId())).getSingle(); + .where((builder, root) -> builder.equal(root.get("id"), otherUserId)).getSingle(); // Checks if mail is used by another user. If it is, merges the new the old. - mergeNewUserToOld(user, userToBeMerged); - expireUserToken(user); + mergeNewUserToOld(user, userToBeMerged, Integer.valueOf((String) map.get("provider"))); + expireUserToken(userToBeMerged); loginConfirmationEmail.setIsConfirmed(true); databaseRepository.getLoginConfirmationEmailDao().createOrUpdate(loginConfirmationEmail); } catch (Exception e) { @@ -65,7 +66,7 @@ public class MergeEmailConfirmationManager { } } - public void sendConfirmationEmail(String email, Principal principal, UUID userId) throws HasConfirmedEmailException { + public void sendConfirmationEmail(String email, Principal principal, UUID userId, Integer provider) throws HasConfirmedEmailException { UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); apiContext.getUtilitiesService().getConfirmationEmailService().createMergeConfirmationEmail( @@ -73,12 +74,14 @@ public class MergeEmailConfirmationManager { apiContext.getUtilitiesService().getMailService(), email, userId, - principal + principal, + provider ); } - private void mergeNewUserToOld(UserInfo newUser, UserInfo oldUser) { - Credential credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.equal(root.get("userInfo"), oldUser)).getSingle(); + @Transactional + private void mergeNewUserToOld(UserInfo newUser, UserInfo oldUser, Integer provider) { + Credential credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.and(builder.equal(root.get("userInfo"), oldUser), builder.equal(root.get("provider"), provider))).getSingle(); credential.setUserInfo(newUser); databaseRepository.getCredentialDao().createOrUpdate(credential); List userDmps = databaseRepository.getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("user"), oldUser)).toList(); @@ -86,14 +89,15 @@ public class MergeEmailConfirmationManager { userDmp.setUser(newUser); databaseRepository.getUserDmpDao().createOrUpdate(userDmp); }); + oldUser.setUserStatus((short)1); + databaseRepository.getUserInfoDao().createOrUpdate(oldUser); } private void expireUserToken(UserInfo user) { UserToken userToken = databaseRepository.getUserTokenDao().asQueryable() .where((builder, root) -> builder.equal(root.get("user"), user)) .orderBy((builder, root) -> builder.desc(root.get("issuedAt"))) - .take(1) - .getSingle(); + .take(1).toList().get(0); userToken.setExpiresAt(new Date()); databaseRepository.getUserTokenDao().createOrUpdate(userToken); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/AbstractAuthenticationService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/AbstractAuthenticationService.java index a43ec4ac7..5d2ac907a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/AbstractAuthenticationService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/authentication/AbstractAuthenticationService.java @@ -54,7 +54,7 @@ public abstract class AbstractAuthenticationService implements AuthenticationSer UserInfo userInfo = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class) .name(username).email(environment.getProperty("autouser.root.email")).created(new Date()) - .lastloggedin(new Date()).authorization_level((short) 1).usertype((short) 1) + .lastloggedin(new Date()).authorization_level((short) 1).usertype((short) 1).userStatus((short)0) .build(); userInfo = this.apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().createOrUpdate(userInfo); @@ -111,14 +111,20 @@ public abstract class AbstractAuthenticationService implements AuthenticationSer public Principal Touch(LoginProviderUser profile) throws NullEmailException { - UserInfo userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().withHint("userInfo").where((builder, root) -> builder.equal(root.get("email"), profile.getEmail())).getSingleOrDefault(); + UserInfo userInfo;// = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().withHint("userInfo").where((builder, root) -> builder.and(builder.equal(root.get("email"), profile.getEmail()), builder.equal(root.get("userStatus"), 0))).getSingleOrDefault(); - if (userInfo == null) { + //if (userInfo == null) { Optional optionalCredential = Optional.ofNullable(apiContext.getOperationsContext().getDatabaseRepository().getCredentialDao() .asQueryable().withHint("credentialUserInfo") .where((builder, root) -> builder.and(builder.equal(root.get("provider"), profile.getProvider().getValue()), builder.equal(root.get("externalId"), profile.getId()))) .getSingleOrDefault()); userInfo = optionalCredential.map(Credential::getUserInfo).orElse(null); + if (userInfo.getUserStatus() == 1) { + userInfo = null; + } + //} + if (userInfo == null) { + userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().withHint("userInfo").where((builder, root) -> builder.and(builder.equal(root.get("email"), profile.getEmail()), builder.equal(root.get("userStatus"), 0))).getSingleOrDefault(); } final Credential credential = this.apiContext.getOperationsContext().getBuilderFactory().getBuilder(CredentialBuilder.class) @@ -140,7 +146,7 @@ public abstract class AbstractAuthenticationService implements AuthenticationSer + "\", \"expirationDate\": \"" + Instant.now().plusSeconds((profile.getZenodoExpire() != null ? profile.getZenodoExpire(): 0)).toEpochMilli() + "\", \"zenodoRefresh\": \"" + profile.getZenodoRefresh() + (profile.getProvider() == TokenValidatorFactoryImpl.LoginProvider.ZENODO ? "\", \"zenodoEmail\": \"" + profile.getEmail() : "") +"\"}}") - .authorization_level((short) 1).usertype((short) 1) + .authorization_level((short) 1).usertype((short) 1).userStatus((short)0) .build(); userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().createOrUpdate(userInfo); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailService.java index 3b9368e64..108550ec5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailService.java @@ -10,7 +10,7 @@ import java.util.concurrent.CompletableFuture; public interface ConfirmationEmailService { public void createConfirmationEmail(EmailConfirmationDao loginConfirmationEmailDao, MailService mailService, String email, UUID userId); - public void createMergeConfirmationEmail(EmailConfirmationDao loginConfirmationEmailDao, MailService mailService, String email, UUID userId, Principal principal); + public void createMergeConfirmationEmail(EmailConfirmationDao loginConfirmationEmailDao, MailService mailService, String email, UUID userId, Principal principal, Integer provider); public CompletableFuture sentConfirmationEmail(EmailConfirmation confirmationEmail, MailService mailService); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailServiceImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailServiceImpl.java index 19bfdf3c9..61ced9d27 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailServiceImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/ConfirmationEmailServiceImpl.java @@ -12,6 +12,8 @@ import org.springframework.core.env.Environment; import org.springframework.stereotype.Service; import java.util.Date; +import java.util.HashMap; +import java.util.Map; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -102,7 +104,7 @@ public class ConfirmationEmailServiceImpl implements ConfirmationEmailService { @Override public void createMergeConfirmationEmail(EmailConfirmationDao loginConfirmationEmailDao, MailService mailService, - String email, UUID userId, Principal principal) { + String email, UUID userId, Principal principal, Integer provider) { EmailConfirmation confirmationEmail = new EmailConfirmation(); confirmationEmail.setEmail(email); confirmationEmail.setExpiresAt(Date @@ -113,7 +115,10 @@ public class ConfirmationEmailServiceImpl implements ConfirmationEmailService { ); confirmationEmail.setUserId(userId); try { - confirmationEmail.setData(new ObjectMapper().writeValueAsString(principal.getId())); + Map map = new HashMap<>(); + map.put("userId", principal.getId()); + map.put("provider", provider.toString()); + confirmationEmail.setData(new ObjectMapper().writeValueAsString(map)); } catch (JsonProcessingException e) { logger.error(e.getMessage(), e); } diff --git a/dmp-backend/web/src/main/resources/templates/email/emailMergeConfirmation.html b/dmp-backend/web/src/main/resources/templates/email/emailMergeConfirmation.html index 0affa4121..6d5fea269 100644 --- a/dmp-backend/web/src/main/resources/templates/email/emailMergeConfirmation.html +++ b/dmp-backend/web/src/main/resources/templates/email/emailMergeConfirmation.html @@ -271,7 +271,7 @@ - +
Confirm Merge Request Confirm Merge Request
diff --git a/dmp-db-scema/main/data-dump.sql b/dmp-db-scema/main/data-dump.sql index 277d2ac09..1bc728982 100644 --- a/dmp-db-scema/main/data-dump.sql +++ b/dmp-db-scema/main/data-dump.sql @@ -1,4 +1,4 @@ -INSERT INTO public."UserInfo"(email, authorization_level, usertype, name, created, additionalinfo) VALUES ('fake@email.org', 1, 1, :'ADMIN_USERNAME', now(), '{}'); +INSERT INTO public."UserInfo"(email, authorization_level, usertype, userstatus, name, created, additionalinfo) VALUES ('fake@email.org', 1, 1, 0, :'ADMIN_USERNAME', now(), '{}'); INSERT INTO public."Credential" VALUES (uuid_generate_v4(), 0, 5, :'ADMIN_USERNAME', :'ADMIN_PASSWORD', now(), now(), (SELECT public."UserInfo"."id" FROM public."UserInfo" WHERE name = :'ADMIN_USERNAME'), 'dmp'); @@ -20,4 +20,4 @@ UPDATE public."DMP" UPDATE public."DatasetProfile" SET "Language"='en'; -INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.00.005', '2020-06-03 11:40:00.000000+03', now(), 'Remove user association table'); \ No newline at end of file +INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.00.006', '2020-10-27 13:40:00.000000+03', now(), 'Add userstatus on UserInfo table'); \ No newline at end of file diff --git a/dmp-db-scema/main/dmp-dump.sql b/dmp-db-scema/main/dmp-dump.sql index 052a0007e..7c0ef0309 100644 --- a/dmp-db-scema/main/dmp-dump.sql +++ b/dmp-db-scema/main/dmp-dump.sql @@ -825,6 +825,7 @@ CREATE TABLE public."UserInfo" ( email character varying(250), authorization_level smallint NOT NULL, usertype smallint NOT NULL, + userstatus smallint NOT NULL, verified_email boolean, name character varying(250), created timestamp(6) with time zone, diff --git a/dmp-db-scema/updates/00.00.007_Add_userstatus_on_UserInfo_table.sql b/dmp-db-scema/updates/00.00.007_Add_userstatus_on_UserInfo_table.sql new file mode 100644 index 000000000..461cd00ae --- /dev/null +++ b/dmp-db-scema/updates/00.00.007_Add_userstatus_on_UserInfo_table.sql @@ -0,0 +1,14 @@ +DO $$DECLARE + this_version CONSTANT varchar := '00.00.007'; +BEGIN + PERFORM * FROM "DBVersion" WHERE version = this_version; + IF FOUND THEN RETURN; END IF; + + ALTER TABLE public."UserInfo" ADD COLUMN userstatus smallint; + + UPDATE public."UserInfo" SET userstatus=0; + + ALTER TABLE public."UserInfo" ALTER COLUMN userstatus SET NOT NULL; + + INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.00.006', '2020-10-27 13:40:00.000000+03', now(), 'Add userstatus on UserInfo table'); +END$$; \ No newline at end of file diff --git a/dmp-frontend/src/app/core/model/merge/user-merge-request.ts b/dmp-frontend/src/app/core/model/merge/user-merge-request.ts index ef5c53d7f..471463abb 100644 --- a/dmp-frontend/src/app/core/model/merge/user-merge-request.ts +++ b/dmp-frontend/src/app/core/model/merge/user-merge-request.ts @@ -1,4 +1,5 @@ export class UserMergeRequestModel { userId: String; email: String; + provider: number; } diff --git a/dmp-frontend/src/app/ui/auth/login/login.component.ts b/dmp-frontend/src/app/ui/auth/login/login.component.ts index b535fe898..87d99fa12 100644 --- a/dmp-frontend/src/app/ui/auth/login/login.component.ts +++ b/dmp-frontend/src/app/ui/auth/login/login.component.ts @@ -412,7 +412,7 @@ export class LoginComponent extends BaseComponent implements OnInit, AfterViewIn this.authService.mergeLogin(loginInfo) .pipe(takeUntil(this._destroyed)) .subscribe( - res => this.mergeLoginService.setRequest({email: res.payload.email, userId: res.payload.id}) + res => this.mergeLoginService.setRequest({email: res.payload.email, userId: res.payload.id, provider: loginInfo.provider}) ); } else { this.authService.login(loginInfo) diff --git a/dmp-frontend/src/app/ui/auth/login/login.module.ts b/dmp-frontend/src/app/ui/auth/login/login.module.ts index 2c3a0550b..1872a0035 100644 --- a/dmp-frontend/src/app/ui/auth/login/login.module.ts +++ b/dmp-frontend/src/app/ui/auth/login/login.module.ts @@ -13,6 +13,7 @@ import { LoginService } from '@app/ui/auth/login/utilities/login.service'; import { Oauth2DialogModule } from '@app/ui/misc/oauth2-dialog/oauth2-dialog.module'; import { CommonFormsModule } from '@common/forms/common-forms.module'; import { CommonUiModule } from '@common/ui/common-ui.module'; +import { MergeEmailConfirmation } from './merge-email-confirmation/merge-email-confirmation.component'; import { MergeLoginService } from './utilities/merge-login.service'; import { ZenodoLoginComponent } from './zenodo-login/zenodo-login.component'; @@ -32,7 +33,8 @@ import { ZenodoLoginComponent } from './zenodo-login/zenodo-login.component'; EmailConfirmation, OpenAireLoginComponent, ConfigurableLoginComponent, - ZenodoLoginComponent + ZenodoLoginComponent, + MergeEmailConfirmation ], exports: [ LoginComponent diff --git a/dmp-frontend/src/app/ui/auth/login/login.routing.ts b/dmp-frontend/src/app/ui/auth/login/login.routing.ts index ea5888efe..f6e8070f6 100644 --- a/dmp-frontend/src/app/ui/auth/login/login.routing.ts +++ b/dmp-frontend/src/app/ui/auth/login/login.routing.ts @@ -10,6 +10,7 @@ import { OpenAireLoginComponent } from "./openaire-login/openaire-login.componen import { ConfigurableLoginComponent } from "./configurable-login/configurable-login.component"; import { ZenodoLoginComponent } from './zenodo-login/zenodo-login.component'; import { Oauth2DialogComponent } from '@app/ui/misc/oauth2-dialog/oauth2-dialog.component'; +import { MergeEmailConfirmation } from './merge-email-confirmation/merge-email-confirmation.component'; const routes: Routes = [ { path: '', component: LoginComponent }, @@ -18,6 +19,7 @@ const routes: Routes = [ { path: 'external/orcid', component: Oauth2DialogComponent }, { path: 'external/b2access', component: Oauth2DialogComponent }, { path: 'confirmation/:token', component: EmailConfirmation }, + { path: 'merge/confirmation/:token', component: MergeEmailConfirmation }, { path: 'confirmation', component: EmailConfirmation }, { path: 'openaire', component: Oauth2DialogComponent}, { path: 'configurable/:id', component: ConfigurableLoginComponent}, diff --git a/dmp-frontend/src/app/ui/auth/login/merge-email-confirmation/merge-email-confirmation.component.html b/dmp-frontend/src/app/ui/auth/login/merge-email-confirmation/merge-email-confirmation.component.html new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/dmp-frontend/src/app/ui/auth/login/merge-email-confirmation/merge-email-confirmation.component.html @@ -0,0 +1 @@ + diff --git a/dmp-frontend/src/app/ui/auth/login/merge-email-confirmation/merge-email-confirmation.component.scss b/dmp-frontend/src/app/ui/auth/login/merge-email-confirmation/merge-email-confirmation.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/dmp-frontend/src/app/ui/auth/login/merge-email-confirmation/merge-email-confirmation.component.ts b/dmp-frontend/src/app/ui/auth/login/merge-email-confirmation/merge-email-confirmation.component.ts new file mode 100644 index 000000000..e11f9b1d9 --- /dev/null +++ b/dmp-frontend/src/app/ui/auth/login/merge-email-confirmation/merge-email-confirmation.component.ts @@ -0,0 +1,61 @@ +import { Component, OnInit } from "@angular/core"; +import { FormControl } from '@angular/forms'; +import { ActivatedRoute, Router } from "@angular/router"; +import { EmailConfirmationService } from '@app/core/services/email-confirmation/email-confirmation.service'; +import { MergeEmailConfirmationService } from '@app/core/services/merge-email-confirmation/merge-email-confirmation.service'; +import { SnackBarNotificationLevel, UiNotificationService } from '@app/core/services/notification/ui-notification-service'; +import { BaseComponent } from '@common/base/base.component'; +import { TranslateService } from '@ngx-translate/core'; +import { takeUntil } from "rxjs/operators"; + +@Component({ + selector: 'app-email-confirmation-component', + templateUrl: './merge-email-confirmation.component.html' +}) +export class MergeEmailConfirmation extends BaseComponent implements OnInit { + + public emailFormControl = new FormControl(''); + public showForm: boolean = false; + public mailSent: boolean = false; + + constructor( + private emailConfirmationService: MergeEmailConfirmationService, + private route: ActivatedRoute, + private router: Router, + private language: TranslateService, + private uiNotificationService: UiNotificationService + ) { super(); } + + ngOnInit() { + this.route.params + .pipe(takeUntil(this._destroyed)) + .subscribe(params => { + const token = params['token'] + if (token != null) { + this.showForm = false; + this.emailConfirmationService.emailConfirmation(token) + .pipe(takeUntil(this._destroyed)) + .subscribe( + result => this.onCallbackEmailConfirmationSuccess(), + error => this.onCallbackError(error) + ) + } else { + this.showForm = true; + } + }); + } + + onCallbackEmailConfirmationSuccess() { + this.router.navigate(['home']); + } + + onCallbackError(error: any) { + if (error.status === 302) { + this.uiNotificationService.snackBarNotification(this.language.instant('EMAIL-CONFIRMATION.EMAIL-FOUND'), SnackBarNotificationLevel.Warning); + this.router.navigate(['home']); + } else { + this.uiNotificationService.snackBarNotification(this.language.instant('EMAIL-CONFIRMATION.EXPIRED-EMAIL'), SnackBarNotificationLevel.Error); + this.router.navigate(['login']); + } + } +}