From a6e2dd60b473331dc22618530b94cd80dad37306 Mon Sep 17 00:00:00 2001 From: annabakouli Date: Mon, 8 Jan 2018 13:44:48 +0200 Subject: [PATCH] no message --- .../main/java/eu/eudat/controllers/DMPs.java | 8 ++--- .../controllers/DatasetWizardController.java | 4 +-- .../java/eu/eudat/controllers/Datasets.java | 3 +- .../java/eu/eudat/controllers/Projects.java | 12 +++---- .../controllers/UserInvitationController.java | 13 +++++++ .../src/main/java/eu/eudat/entities/DMP.java | 1 + .../managers/DataManagementPlanManager.java | 8 +++-- .../eu/eudat/managers/InvitationsManager.java | 21 +++++++++--- .../validators/GoogleTokenValidator.java | 13 ++++--- .../eu/eudat/services/InvitationService.java | 4 +-- .../eudat/services/InvitationServiceImpl.java | 30 +++++++++++++--- .../java/eu/eudat/services/MailService.java | 2 ++ .../eu/eudat/services/MailServiceImpl.java | 19 ++++++++++- .../src/main/resources/application.properties | 19 ++++++++--- dmp-frontend/src/app/app-routing.module.ts | 3 +- dmp-frontend/src/app/app.module.ts | 2 ++ .../invitation-accepted.component.html | 0 .../invitation-accepted.component.ts | 34 +++++++++++++++++++ .../services/invitation/invitation.service.ts | 4 +++ .../base-http.service.ts | 7 ++-- 20 files changed, 167 insertions(+), 40 deletions(-) create mode 100644 dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.html create mode 100644 dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.ts diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java b/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java index 7fad2657d..b7f327caf 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/DMPs.java @@ -49,7 +49,7 @@ public class DMPs extends BaseController { } @RequestMapping(method = RequestMethod.POST, value = { "/dmps/getPaged" }, consumes = "application/json", produces="application/json") - public @ResponseBody ResponseItem> getPaged(@Valid @RequestBody DataManagementPlanTableRequest dataManagementPlanTableRequest) { + public @ResponseBody ResponseItem> getPaged(@Valid @RequestBody DataManagementPlanTableRequest dataManagementPlanTableRequest,Principal principal) { try { DataTableData dataTable = new DataManagementPlanManager().getPaged(this.getApiContext().getDatabaseRepository().getDmpDao(), dataManagementPlanTableRequest); return new ResponseItem>().status(HttpStatus.OK).payload(dataTable); @@ -61,9 +61,9 @@ public class DMPs extends BaseController { } @RequestMapping(method = RequestMethod.GET, value = { "/dmps/getSingle/{id}" }, produces="application/json") - public @ResponseBody ResponseItem getSingle(@PathVariable String id) { + public @ResponseBody ResponseItem getSingle(@PathVariable String id,Principal principal) { try { - eu.eudat.models.dmp.DataManagementPlan project = new DataManagementPlanManager().getSingle(this.getApiContext().getDatabaseRepository().getDmpDao(), id); + eu.eudat.models.dmp.DataManagementPlan project = new DataManagementPlanManager().getSingle(this.getApiContext().getDatabaseRepository().getDmpDao(), id,principal); return new ResponseItem().status(HttpStatus.OK).payload(project); } catch (Exception ex) { @@ -88,7 +88,7 @@ public class DMPs extends BaseController { @RequestMapping(method = RequestMethod.POST, value = { "/dmps/get" }, consumes = "application/json", produces="application/json") - public @ResponseBody ResponseItem> getWithCriteria(@RequestBody DataManagementPlanCriteriaRequest dataManagementPlanCriteria) { + public @ResponseBody ResponseItem> getWithCriteria(@RequestBody DataManagementPlanCriteriaRequest dataManagementPlanCriteria,Principal principal) { try { List dataTable = new DataManagementPlanManager().getWithCriteria(this.getApiContext().getDatabaseRepository().getDmpDao(), dataManagementPlanCriteria); diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java b/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java index 49aa0d820..6be212d14 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/DatasetWizardController.java @@ -65,7 +65,7 @@ public class DatasetWizardController extends BaseController{ } @RequestMapping(method = RequestMethod.GET, value = { "/getSingle/{id}" }, produces="application/json") - public @ResponseBody ResponseItem getPaged(@PathVariable String id) { + public @ResponseBody ResponseItem getPaged(@PathVariable String id,Principal principal) { try { DatasetWizardModel dataset = new DatasetManager().getSingle(this.getApiContext().getDatabaseRepository().getDatasetDao(), id); @@ -78,7 +78,7 @@ public class DatasetWizardController extends BaseController{ @Transactional @RequestMapping(method = RequestMethod.POST, value = { "/createOrUpdate" }, produces="application/json") - public @ResponseBody ResponseItem createOrUpdate(@RequestBody DatasetWizardModel profile) { + public @ResponseBody ResponseItem createOrUpdate(@RequestBody DatasetWizardModel profile,Principal principal) { try { eu.eudat.entities.Dataset dataset= DatasetManager.createOrUpdate(this.getApiContext(),profile); return new ResponseItem().status(HttpStatus.OK).payload(dataset); diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Datasets.java b/dmp-backend/src/main/java/eu/eudat/controllers/Datasets.java index 38d39b86b..2225edf79 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Datasets.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Datasets.java @@ -13,6 +13,7 @@ import eu.eudat.models.dataset.DatasetTableRequest; import eu.eudat.models.helpers.DataTableData; import eu.eudat.models.helpers.responses.*; import eu.eudat.models.listingmodels.DatasetListingModel; +import eu.eudat.models.security.Principal; import eu.eudat.services.ApiContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -57,7 +58,7 @@ public class Datasets extends BaseController{ } @RequestMapping(method = RequestMethod.POST, value = { "/datasets/getPaged" }, consumes = "application/json", produces="application/json") - public @ResponseBody ResponseItem> getPaged(@RequestBody DatasetTableRequest datasetTableRequest) { + public @ResponseBody ResponseItem> getPaged(@RequestBody DatasetTableRequest datasetTableRequest,Principal principal) { try { DataTableData dataTable = new DatasetManager().getPaged(this.getApiContext().getDatabaseRepository().getDatasetDao(), datasetTableRequest); return new ResponseItem>().status(HttpStatus.OK).payload(dataTable); diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/Projects.java b/dmp-backend/src/main/java/eu/eudat/controllers/Projects.java index e4ccbf5df..98dfbcfcd 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/Projects.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/Projects.java @@ -67,7 +67,7 @@ public class Projects extends BaseController{ } @RequestMapping(method = RequestMethod.POST, value = { "/projects/getPaged" }, consumes = "application/json", produces="application/json") - public @ResponseBody ResponseItem> getPaged(@Valid @RequestBody ProjectTableRequest projectTableRequest) { + public @ResponseBody ResponseItem> getPaged(@Valid @RequestBody ProjectTableRequest projectTableRequest,Principal principal) { try { DataTableData dataTable = new ProjectManager().getPaged(this.getApiContext().getDatabaseRepository().getProjectDao(), projectTableRequest); return new ResponseItem>().payload(dataTable).status(HttpStatus.OK); @@ -79,7 +79,7 @@ public class Projects extends BaseController{ } @RequestMapping(method = RequestMethod.GET, value = { "/projects/getSingle/{id}" }, produces="application/json") - public @ResponseBody ResponseItem getPaged(@PathVariable String id) { + public @ResponseBody ResponseItem getPaged(@PathVariable String id,Principal principal) { try { eu.eudat.models.project.Project project = new ProjectManager().getSingle(this.getApiContext().getDatabaseRepository().getProjectDao(), id); return new ResponseItem().payload(project).status(HttpStatus.OK); @@ -104,7 +104,7 @@ public class Projects extends BaseController{ @Transactional @RequestMapping(method = RequestMethod.DELETE, value = { "/projects/inactivate/{id}" }, consumes = "application/json", produces="application/json") - public @ResponseBody ResponseItem inactivate(@PathVariable String id) { + public @ResponseBody ResponseItem inactivate(@PathVariable String id,Principal principal) { try { Project project = new ProjectManager().inactivate(this.getApiContext().getDatabaseRepository().getProjectDao(),id); return new ResponseItem().status(HttpStatus.OK); @@ -115,7 +115,7 @@ public class Projects extends BaseController{ @RequestMapping(method = RequestMethod.POST, value = { "/projects/getWithExternal" }, consumes = "application/json", produces="application/json") - public @ResponseBody ResponseItem> getWithExternal(@RequestBody ProjectCriteriaRequest projectCriteria) { + public @ResponseBody ResponseItem> getWithExternal(@RequestBody ProjectCriteriaRequest projectCriteria,Principal principal) { try { List dataTable = new ProjectManager().getCriteriaWithExternal(this.getApiContext().getDatabaseRepository().getProjectDao(), projectCriteria,this.getApiContext().getRemoteFetcher()); return new ResponseItem>().payload(dataTable).status(HttpStatus.OK); @@ -126,7 +126,7 @@ public class Projects extends BaseController{ } @RequestMapping(method = RequestMethod.POST, value = { "/projects/get" }, consumes = "application/json", produces="application/json") - public @ResponseBody ResponseItem> get(@RequestBody ProjectCriteriaRequest projectCriteria) { + public @ResponseBody ResponseItem> get(@RequestBody ProjectCriteriaRequest projectCriteria,Principal principal) { try { List dataTable = new ProjectManager().getCriteria(this.getApiContext().getDatabaseRepository().getProjectDao(), projectCriteria,this.getApiContext().getRemoteFetcher()); return new ResponseItem>().payload(dataTable).status(HttpStatus.OK); @@ -140,7 +140,7 @@ public class Projects extends BaseController{ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @RequestMapping(method = RequestMethod.GET, value = { "/external/projects" }, produces="application/json") - public @ResponseBody ResponseItem listExternalProjects(@RequestParam(value="query", required=false) String query ){ + public @ResponseBody ResponseItem listExternalProjects(@RequestParam(value="query", required=false) String query ,Principal principal){ try { List> remoteRepos = this.getApiContext().getRemoteFetcher().getProjects(query); ProjectsExternalSourcesModel projectsExternalSourcesModel = new ProjectsExternalSourcesModel().fromExternalItem(remoteRepos); diff --git a/dmp-backend/src/main/java/eu/eudat/controllers/UserInvitationController.java b/dmp-backend/src/main/java/eu/eudat/controllers/UserInvitationController.java index 5577d65f8..61a7c45db 100644 --- a/dmp-backend/src/main/java/eu/eudat/controllers/UserInvitationController.java +++ b/dmp-backend/src/main/java/eu/eudat/controllers/UserInvitationController.java @@ -13,6 +13,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.UUID; /** * Created by ikalyvas on 1/4/2018. @@ -39,6 +40,18 @@ public class UserInvitationController extends BaseController{ } } + @Transactional + @RequestMapping(method = RequestMethod.GET, value = { "/exchange/{invitationID}" }, produces="application/json") + public @ResponseBody ResponseItem exchange(@PathVariable UUID invitationID, Principal principal) { + try { + UUID dmpId = InvitationsManager.assignUserAcceptedInvitation(this.getApiContext(),invitationID,principal); + return new ResponseItem().status(HttpStatus.OK).payload(dmpId); + } catch (Exception e) { + e.printStackTrace(); + return new ResponseItem().message(e.getMessage()); + } + } + @RequestMapping(method = RequestMethod.POST, value = { "/getUsers" }, consumes = "application/json", produces="application/json") public @ResponseBody ResponseItem> getUsers(@RequestBody UserInfoRequestItem userInfoRequestItem) { try { diff --git a/dmp-backend/src/main/java/eu/eudat/entities/DMP.java b/dmp-backend/src/main/java/eu/eudat/entities/DMP.java index b8b26bca4..660e7356b 100644 --- a/dmp-backend/src/main/java/eu/eudat/entities/DMP.java +++ b/dmp-backend/src/main/java/eu/eudat/entities/DMP.java @@ -262,6 +262,7 @@ public class DMP implements Serializable,DataEntity { this.description = entity.getDescription(); this.researchers = entity.getResearchers(); this.organisations = entity.getOrganisations(); + this.users = entity.getUsers(); } @Override diff --git a/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java b/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java index e54184bd9..5c5f50a0e 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/DataManagementPlanManager.java @@ -2,11 +2,13 @@ package eu.eudat.managers; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; import eu.eudat.dao.entities.*; import eu.eudat.entities.DMP; import eu.eudat.entities.Project; import eu.eudat.entities.UserInfo; +import eu.eudat.exceptions.UnauthorisedException; import eu.eudat.models.criteria.DataManagementPlanCriteria; import eu.eudat.models.criteria.OrganisationCriteria; import eu.eudat.models.criteria.ProjectCriteria; @@ -34,9 +36,11 @@ public class DataManagementPlanManager { return dataTable; } - public eu.eudat.models.dmp.DataManagementPlan getSingle(DMPDao dmpsRepository, String id) throws InstantiationException, IllegalAccessException{ + public eu.eudat.models.dmp.DataManagementPlan getSingle(DMPDao dmpsRepository, String id,Principal principal) throws InstantiationException, IllegalAccessException{ + DMP dataManagementPlanEntity = dmpsRepository.find(UUID.fromString(id)); + if(dataManagementPlanEntity.getUsers().stream().filter(userInfo -> userInfo.getId() == principal.getId()).collect(Collectors.toList()).size()==0)throw new UnauthorisedException(); eu.eudat.models.dmp.DataManagementPlan datamanagementPlan = new eu.eudat.models.dmp.DataManagementPlan(); - datamanagementPlan.fromDataModel(dmpsRepository.find(UUID.fromString(id))); + datamanagementPlan.fromDataModel(dataManagementPlanEntity); return datamanagementPlan; } diff --git a/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java b/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java index 7dc109d59..d673c3510 100644 --- a/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java +++ b/dmp-backend/src/main/java/eu/eudat/managers/InvitationsManager.java @@ -10,7 +10,9 @@ import eu.eudat.queryable.QueryableList; import eu.eudat.services.ApiContext; import eu.eudat.utilities.builders.DomainModelConverter; +import java.util.Arrays; import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; /** @@ -24,14 +26,25 @@ public class InvitationsManager { List alreadySignedInUsers = invitation.getUsers().stream().filter(item -> item.getId() != null).collect(Collectors.toList()); List alreadySignedInUsersEntities = new DomainModelConverter().toDataModel(alreadySignedInUsers); DMP dataManagementPlan = apiContext.getDatabaseRepository().getDmpDao().find(invitation.getDataManagementPlan()); - apiContext.getInvitationService().createInvitations(apiContext.getDatabaseRepository().getInvitationDao(),new DomainModelConverter().toDataModel(invitation.getUsers()),dataManagementPlan,principalUser); + apiContext.getInvitationService().createInvitations(apiContext.getDatabaseRepository().getInvitationDao(), apiContext.getMailService(), new DomainModelConverter().toDataModel(invitation.getUsers()), dataManagementPlan, principalUser); apiContext.getInvitationService().assignToDmp(apiContext.getDatabaseRepository().getDmpDao(), alreadySignedInUsersEntities, dataManagementPlan); - apiContext.getInvitationService().sendInvitations(invitation.getUsers()); } - public static List getUsers(ApiContext apiContext,UserInfoRequestItem userInfoRequestItem) throws InstantiationException, IllegalAccessException { + public static List getUsers(ApiContext apiContext, UserInfoRequestItem userInfoRequestItem) throws InstantiationException, IllegalAccessException { QueryableList users = apiContext.getDatabaseRepository().getUserInfoDao().getWithCriteria(userInfoRequestItem.getCriteria()); - List userModels = new DomainModelConverter().fromDataModel(users.toList(),UserInfoInvitationModel.class); + List userModels = new DomainModelConverter().fromDataModel(users.toList(), UserInfoInvitationModel.class); return userModels; } + + public static UUID assignUserAcceptedInvitation(ApiContext apiContext, UUID invitationID, Principal principal) throws Exception { + eu.eudat.entities.Invitation invitation = apiContext.getDatabaseRepository().getInvitationDao().find(invitationID); + if (invitation == null) throw new Exception("There is no Data Management Plan assigned to this Link"); + if (invitation.getAcceptedInvitation()) throw new Exception("This Url Has Expired"); + UserInfo invitedUser = apiContext.getDatabaseRepository().getUserInfoDao().find(principal.getId()); + DMP datamanagementPlan = invitation.getDmp(); + apiContext.getInvitationService().assignToDmp(apiContext.getDatabaseRepository().getDmpDao(), invitedUser, datamanagementPlan); + invitation.setAcceptedInvitation(true); + apiContext.getDatabaseRepository().getInvitationDao().createOrUpdate(invitation); + return datamanagementPlan.getId(); + } } diff --git a/dmp-backend/src/main/java/eu/eudat/security/validators/GoogleTokenValidator.java b/dmp-backend/src/main/java/eu/eudat/security/validators/GoogleTokenValidator.java index de77873a8..d3279aea9 100644 --- a/dmp-backend/src/main/java/eu/eudat/security/validators/GoogleTokenValidator.java +++ b/dmp-backend/src/main/java/eu/eudat/security/validators/GoogleTokenValidator.java @@ -65,17 +65,17 @@ public class GoogleTokenValidator implements TokenValidator { UserInfoCriteria criteria = new UserInfoCriteria(); criteria.setEmail(payload.getEmail()); - UserInfo userInfo = userInfoDao.getWithCriteria(criteria).toList().get(0); - + List users = userInfoDao.getWithCriteria(criteria).toList(); + UserInfo userInfo = null; + if(users.size()>0)userInfo = users.get(0); final Credential credential = new Credential(); + credential.setId(UUID.randomUUID()); credential.setCreationTime(new Date()); credential.setStatus(1); credential.setLastUpdateTime(new Date()); credential.setProvider(1); credential.setSecret(token); - credential.setPublicValue(userInfo.getName()); if(userInfo == null) { - credential.setId(UUID.randomUUID()); userInfo = new UserInfo(); userInfo.setName((String)payload.get("name")); userInfo.setVerified_email(payload.getEmailVerified()); @@ -85,6 +85,9 @@ public class GoogleTokenValidator implements TokenValidator { userInfo.setAuthorization_level(new Short("1")); userInfo.setUsertype(new Short("1")); userInfo = userInfoDao.createOrUpdate(userInfo); + + credential.setPublicValue(userInfo.getName()); + credential.setUserInfo(userInfo); credentialDao.createOrUpdate(credential); } @@ -98,6 +101,8 @@ public class GoogleTokenValidator implements TokenValidator { else{ credential.setUserInfo(userInfo); credential.setId(UUID.randomUUID()); + credential.setPublicValue(userInfo.getName()); + credentialDao.createOrUpdate(credential); userInfo.getCredentials().add(credential); } diff --git a/dmp-backend/src/main/java/eu/eudat/services/InvitationService.java b/dmp-backend/src/main/java/eu/eudat/services/InvitationService.java index ea028569c..a7806eb3e 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/InvitationService.java +++ b/dmp-backend/src/main/java/eu/eudat/services/InvitationService.java @@ -18,7 +18,7 @@ public interface InvitationService { void assignToDmp(DMPDao dmpDao, eu.eudat.entities.UserInfo user, DMP dmp); - void createInvitations(InvitationDao invitationDao, List users, DMP dmp, eu.eudat.entities.UserInfo creator); + void createInvitations(InvitationDao invitationDao,MailService mailService, List users, DMP dmp, eu.eudat.entities.UserInfo creator); - void sendInvitations(List users); + void sendInvitation(DMP dmp, Invitation invitation,MailService mailService); } diff --git a/dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java b/dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java index 9ff7ae75f..ef7a32c89 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/services/InvitationServiceImpl.java @@ -4,11 +4,15 @@ import eu.eudat.dao.entities.DMPDao; import eu.eudat.dao.entities.InvitationDao; import eu.eudat.entities.DMP; import eu.eudat.entities.Invitation; +import eu.eudat.models.mail.SimpleMail; import eu.eudat.models.userinfo.UserInfo; import eu.eudat.models.userinfo.UserInfoInvitationModel; +import org.apache.commons.lang3.text.StrSubstitutor; import org.springframework.stereotype.Service; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; /** @@ -18,7 +22,7 @@ import java.util.UUID; public class InvitationServiceImpl implements InvitationService { @Override public void assignToDmp(DMPDao dmpDao, List users, DMP dmp) { - for(eu.eudat.entities.UserInfo user : users){ + for (eu.eudat.entities.UserInfo user : users) { dmp.getUsers().add(user); } dmpDao.createOrUpdate(dmp); @@ -31,20 +35,36 @@ public class InvitationServiceImpl implements InvitationService { } @Override - public void createInvitations(InvitationDao invitationDao, List users, DMP dmp, eu.eudat.entities.UserInfo creator) { - for(eu.eudat.entities.UserInfo userInfo : users){ + public void createInvitations(InvitationDao invitationDao, MailService mailService, List users, DMP dmp, eu.eudat.entities.UserInfo creator) { + for (eu.eudat.entities.UserInfo userInfo : users) { Invitation invitation = new Invitation(); invitation.setDmp(dmp); invitation.setInvitationEmail(userInfo.getEmail()); invitation.setUser(creator); invitation.setToken(UUID.randomUUID()); - invitation.setAcceptedInvitation(userInfo.getId()!=null); + invitation.setAcceptedInvitation(userInfo.getId() != null); invitationDao.createOrUpdate(invitation); + sendInvitation(dmp, invitation, mailService); } } @Override - public void sendInvitations(List users) { + public void sendInvitation(DMP dmp, Invitation invitation, MailService mailService) { + SimpleMail mail = new SimpleMail(); + mail.setSubject(createSubject(dmp, mailService.getMailTemplateSubject())); + mail.setContent(createContent(invitation.getId(), dmp, mailService.getMailTemplateContent())); + mail.setTo(invitation.getInvitationEmail()); + mailService.sendSimpleMail(mail); + } + private String createSubject(DMP dmp, String templateSubject) { + String subject = templateSubject.replace("{dmpname}", dmp.getLabel()); + return subject; + } + + private String createContent(UUID invitationID, DMP dmp, String templateContent) { + String content = templateContent.replace("{dmpname}", dmp.getLabel()); + content = templateContent.replace("{invitationID}", invitationID.toString()); + return content; } } diff --git a/dmp-backend/src/main/java/eu/eudat/services/MailService.java b/dmp-backend/src/main/java/eu/eudat/services/MailService.java index 552371493..5e1ca21d3 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/MailService.java +++ b/dmp-backend/src/main/java/eu/eudat/services/MailService.java @@ -7,4 +7,6 @@ import eu.eudat.models.mail.SimpleMail; */ public interface MailService { void sendSimpleMail(SimpleMail mail); + String getMailTemplateContent(); + String getMailTemplateSubject(); } diff --git a/dmp-backend/src/main/java/eu/eudat/services/MailServiceImpl.java b/dmp-backend/src/main/java/eu/eudat/services/MailServiceImpl.java index 737ea9fc5..6063783de 100644 --- a/dmp-backend/src/main/java/eu/eudat/services/MailServiceImpl.java +++ b/dmp-backend/src/main/java/eu/eudat/services/MailServiceImpl.java @@ -2,6 +2,7 @@ package eu.eudat.services; import eu.eudat.models.mail.SimpleMail; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.env.Environment; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Service; @@ -11,6 +12,8 @@ import org.springframework.stereotype.Service; */ @Service("mailService") public class MailServiceImpl implements MailService{ + @Autowired + private Environment env; @Autowired private JavaMailSender emailSender; @@ -21,7 +24,21 @@ public class MailServiceImpl implements MailService{ message.setSubject(mail.getSubject()); message.setText(mail.getContent()); message.setTo(mail.getTo()); - message.setFrom(mail.getFrom()); + message.setFrom(env.getProperty("mail.from")); this.emailSender.send(message); } + + public Environment getEnv() { + return env; + } + + @Override + public String getMailTemplateContent() { + return env.getProperty("mail.content"); + } + + @Override + public String getMailTemplateSubject() { + return env.getProperty("mail.subject"); + } } diff --git a/dmp-backend/src/main/resources/application.properties b/dmp-backend/src/main/resources/application.properties index b9402a93d..701d53897 100644 --- a/dmp-backend/src/main/resources/application.properties +++ b/dmp-backend/src/main/resources/application.properties @@ -15,11 +15,20 @@ eu.eudat.proxy.allowed.host = https://eestore.paas2.uninett.no configuration.externalUrls = file:///C:\\Users\\ikalyvas\\Documents\\Projects\\OpenAIRE-EUDAT-DMP-service-pilot\\dmp-backend\\src\\main\\resources\\ExternalUrls.xml ####################################################### -########################Persistence/Hibernate Generic############################# -#persistence.hibernate.show_sql = false -#persistence.hibernate.hbm2dll = validate -#persistence.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect -#persistence.hibernate.dialect = org.hibernate.spatial.dialect.postgis.PostgisDialect +########################/Email############################# +spring.mail.default-encoding=UTF-8 +spring.mail.host=smtp.gmail.com +spring.mail.username=kalivasioan@gmail.com +spring.mail.password=A3b*1*92 +spring.mail.port=587 +spring.mail.protocol=smtp +spring.mail.test-connection=false +spring.mail.properties.mail.smtp.auth=true +spring.mail.properties.mail.smtp.starttls.enable=true +mail.subject = Invitation to DMP Plan {dmpname} +mail.content = You have been invited to {dmpname} data management plan.Follow the link localhost:4200/invitation/{invitationID} to submit it +mail.from = citesagrdev@gmail.com + ########################Persistence/Hibernate Generic############################# diff --git a/dmp-frontend/src/app/app-routing.module.ts b/dmp-frontend/src/app/app-routing.module.ts index cd6d6ff6f..3c653752f 100644 --- a/dmp-frontend/src/app/app-routing.module.ts +++ b/dmp-frontend/src/app/app-routing.module.ts @@ -1,3 +1,4 @@ +import { InvitationAcceptedComponent } from './invitation-accepted/invitation-accepted.component'; import { InvitationComponent } from './invitation/invitation.component'; import { UnauthorizedComponent } from './unauthorized/unauthorized.component'; import { NgModule } from '@angular/core'; @@ -30,7 +31,7 @@ const appRoutes: Routes = [ { path: 'dataset/new', component: DatasetWizardComponent, canActivate: [AuthGuard] }, { path: 'dataset/:id', component: DatasetWizardComponent, canActivate: [AuthGuard] }, { path: 'datasets/new', component: DatasetWizardComponent, canActivate: [AuthGuard] }, - { path: 'invite/:id', component: InvitationComponent, canActivate: [AuthGuard] }, + { path: 'invitation/:id', component: InvitationAcceptedComponent}, { path: 'login', component: LoginComponent }, { path: "unauthorized", loadChildren: './unauthorized/unauthorized.module#UnauthorizedModule' }, { path: 'welcome', component: HomepageComponent, canActivate: [AuthGuard] }, diff --git a/dmp-frontend/src/app/app.module.ts b/dmp-frontend/src/app/app.module.ts index 2ddc09d39..59e624db2 100644 --- a/dmp-frontend/src/app/app.module.ts +++ b/dmp-frontend/src/app/app.module.ts @@ -1,3 +1,4 @@ +import { InvitationAcceptedComponent } from './invitation-accepted/invitation-accepted.component'; import { InvitationComponent } from './invitation/invitation.component'; import { UnauthorizedComponent } from './unauthorized/unauthorized.component'; import { PaginationService } from './form/pagination/pagination-service'; @@ -83,6 +84,7 @@ import { AutocompleteComponent } from './shared/components/autocomplete/autocomp ProjectEditorComponent, DataManagementPlanEditorComponent, InvitationComponent, + InvitationAcceptedComponent, DatasetWizardComponent, FigurecardComponent, DatasetEditorComponent, diff --git a/dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.html b/dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.html new file mode 100644 index 000000000..e69de29bb diff --git a/dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.ts b/dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.ts new file mode 100644 index 000000000..0aeadf2b6 --- /dev/null +++ b/dmp-frontend/src/app/invitation-accepted/invitation-accepted.component.ts @@ -0,0 +1,34 @@ +import { JsonSerializer } from '../utilities/JsonSerializer'; +import { UserInvitationCriteria } from '../models/criteria/invitation/UserInvitationCriteria'; +import { RequestItem } from '../models/criteria/RequestItem'; +import { Invitation } from '../models/invitation/Invitation'; +import { InvitationService } from '../services/invitation/invitation.service'; +import { User } from '../models/invitation/User'; +import { Component, OnInit, Inject } from "@angular/core"; +import { FormGroup } from '@angular/forms'; +import { Params, ActivatedRoute, Router } from '@angular/router'; +import { MAT_DIALOG_DATA } from '@angular/material'; + +@Component({ + selector: 'app-invitation-accepted-component', + templateUrl: 'invitation-accepted.component.html', + providers: [InvitationService] + +}) +export class InvitationAcceptedComponent implements OnInit { + constructor( + private invitationService: InvitationService, + private route: ActivatedRoute, + public router: Router + ) { } + + ngOnInit(): void { + this.route.params.subscribe(params => { + let id = params["id"] + this.invitationService.exchange(id).subscribe(id=>{ + this.router.navigate(["dmp/"+id]) + }) + } + ) + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/services/invitation/invitation.service.ts b/dmp-frontend/src/app/services/invitation/invitation.service.ts index f4c7cd108..321c8d00d 100644 --- a/dmp-frontend/src/app/services/invitation/invitation.service.ts +++ b/dmp-frontend/src/app/services/invitation/invitation.service.ts @@ -30,4 +30,8 @@ export class InvitationService { public getUsers(usersInvitationRequestItem: RequestItem): Observable { return this.http.post(this.actionUrl + "getUsers", usersInvitationRequestItem, { headers: this.headers }); } + + public exchange(id:String): Observable { + return this.http.get(this.actionUrl + "exchange/"+id, { headers: this.headers }); + } } \ No newline at end of file diff --git a/dmp-frontend/src/app/utilities/cite-http-service-module/base-http.service.ts b/dmp-frontend/src/app/utilities/cite-http-service-module/base-http.service.ts index 9f6554767..1c68bf7a1 100644 --- a/dmp-frontend/src/app/utilities/cite-http-service-module/base-http.service.ts +++ b/dmp-frontend/src/app/utilities/cite-http-service-module/base-http.service.ts @@ -17,7 +17,7 @@ export class BaseHttpService { private authService: AuthService, public language: TranslateService, public snackBar: MatSnackBar, - + public route: ActivatedRoute ) { } get(url: string, options?: any): Observable { @@ -74,14 +74,15 @@ export class BaseHttpService { duration: 3000, extraClasses: ['snackbar-success'] }) - this.router.navigate(['/unauthorized']); + let currentPage = this.router.url; + this.router.navigate(['/unauthorized'], { queryParams: { returnUrl: currentPage } }); //this.notification.httpError(error); return Observable.of(); } else { return Observable.throw(error); } }) - .map(response => { + .map(response => { if (response.statusCode < 200 || response.statusCode >= 300) { //throw new Error('Request failed'); this.snackBar.openFromComponent(SnackBarNotificationComponent, {