This is an automated email from the git hooks/post-receive script. New commit to branch feature/1_socialauth in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit 52a15fd5cdd12976cc22c029b18dc438fd8bf2b6 Author: Kevin Morin <morin@codelutin.com> Date: Thu Aug 31 14:57:45 2017 +0200 refs #1 envoi d'un mail à la création d'un compte a partir d'un service tiers --- .../chorem/pollen/services/PollenUIContext.java | 10 +++ .../services/service/NotificationService.java | 11 ++++ .../pollen/services/service/SocialAuthService.java | 2 + .../pollen/services/service/mail/EmailService.java | 35 ++++++++++ .../mail/UserAccountCreatedFromProviderEmail.java | 76 ++++++++++++++++++++++ .../UserAccountCreatedFromProviderEmail.mustache | 10 +++ ...UserAccountCreatedFromProviderEmail_fr.mustache | 11 ++++ .../i18n/pollen-services_en_GB.properties | 20 ++++++ .../i18n/pollen-services_fr_FR.properties | 20 ++++++ .../service/PollenUIUrlRenderServiceTest.java | 1 + pollen-ui-riot-js/src/main/web/js/Session.js | 3 +- pollen-ui-riot-js/src/main/web/tag/SignIn.tag.html | 2 +- 12 files changed, 199 insertions(+), 2 deletions(-) diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/PollenUIContext.java b/pollen-services/src/main/java/org/chorem/pollen/services/PollenUIContext.java index b74ddd3a..c2bdcd61 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/PollenUIContext.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/PollenUIContext.java @@ -21,6 +21,8 @@ public class PollenUIContext implements Serializable { private String resourceDownloadUrl; + private String profileUrl; + public String getUiEndPoint() { return uiEndPoint; } @@ -76,4 +78,12 @@ public class PollenUIContext implements Serializable { public void setResourceDownloadUrl(String resourceDownloadUrl) { this.resourceDownloadUrl = resourceDownloadUrl; } + + public String getProfileUrl() { + return profileUrl; + } + + public void setProfileUrl(String profileUrl) { + this.profileUrl = profileUrl; + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/NotificationService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/NotificationService.java index 50e62797..074c6198 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/NotificationService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/NotificationService.java @@ -29,6 +29,7 @@ import org.chorem.pollen.persistence.entity.Poll; import org.chorem.pollen.persistence.entity.PollType; import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.persistence.entity.Report; +import org.chorem.pollen.persistence.entity.UserCredential; import org.chorem.pollen.persistence.entity.Vote; import org.chorem.pollen.persistence.entity.VoterList; import org.chorem.pollen.persistence.entity.VoterListMember; @@ -51,6 +52,7 @@ import org.chorem.pollen.services.service.mail.PollReportForAdminEmail; import org.chorem.pollen.services.service.mail.ResendValidationEmail; import org.chorem.pollen.services.service.mail.RestrictedPollInvitationEmail; import org.chorem.pollen.services.service.mail.UserAccountCreatedEmail; +import org.chorem.pollen.services.service.mail.UserAccountCreatedFromProviderEmail; import org.chorem.pollen.services.service.mail.UserAccountDeletedEmail; import org.chorem.pollen.services.service.mail.UserAccountEditedEmail; import org.chorem.pollen.services.service.mail.UserAccountEmailValidatedEmail; @@ -81,6 +83,15 @@ public class NotificationService extends PollenServiceSupport { } } + public void onUserCreatedFromProvider(PollenUser user, UserCredential credential) { + if (StringUtils.isNotBlank(user.getEmail())) { + EmailService emailService = getEmailService(); + UserAccountCreatedFromProviderEmail email = emailService.newUserAccountCreatedFromProviderEmail(user, credential); + email.addTo(user.getEmail()); + emailService.send(email); + } + } + public void onResendValidation(PollenUser user) { EmailService emailService = getEmailService(); ResendValidationEmail email = emailService.newUserResendValidationEmail(user); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java index 8c9f7284..0132f818 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/SocialAuthService.java @@ -81,6 +81,8 @@ public class SocialAuthService extends PollenServiceSupport { pollenUser = userDao.create(pollenUser); commit(); + + getNotificationService().onUserCreatedFromProvider(pollenUser, credential); } return getSecurityService().getSessionTokenForUser(pollenUser); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/EmailService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/EmailService.java index f1dbe453..eed9fe95 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/EmailService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/EmailService.java @@ -44,6 +44,7 @@ import org.chorem.pollen.persistence.entity.PollenPrincipal; import org.chorem.pollen.persistence.entity.PollenResource; import org.chorem.pollen.persistence.entity.PollenUser; import org.chorem.pollen.persistence.entity.Report; +import org.chorem.pollen.persistence.entity.UserCredential; import org.chorem.pollen.persistence.entity.Vote; import org.chorem.pollen.services.bean.FeedbackBean; import org.chorem.pollen.services.bean.PollenEntityId; @@ -63,6 +64,9 @@ import java.util.Locale; import java.util.Map; import java.util.Set; +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; + /** * Created on 4/30/14. * @@ -76,6 +80,28 @@ public class EmailService extends PollenServiceSupport { public static final String RECIPIENT_SEPARATOR = ";"; + static { + n("pollen.service.mail.loginProvider.amazon"); + n("pollen.service.mail.loginProvider.facebook"); + n("pollen.service.mail.loginProvider.flickr"); + n("pollen.service.mail.loginProvider.foursquare"); + n("pollen.service.mail.loginProvider.github"); + n("pollen.service.mail.loginProvider.googleplus"); + n("pollen.service.mail.loginProvider.hotmail"); + n("pollen.service.mail.loginProvider.instagram"); + n("pollen.service.mail.loginProvider.linkedin"); + n("pollen.service.mail.loginProvider.linkedin2"); + n("pollen.service.mail.loginProvider.mendeley"); + n("pollen.service.mail.loginProvider.myspace"); + n("pollen.service.mail.loginProvider.nimble"); + n("pollen.service.mail.loginProvider.runkeeper"); + n("pollen.service.mail.loginProvider.salesforce"); + n("pollen.service.mail.loginProvider.stackexchange"); + n("pollen.service.mail.loginProvider.twitter"); + n("pollen.service.mail.loginProvider.yahoo"); + n("pollen.service.mail.loginProvider.yammer"); + } + public ChoiceAddedEmail newChoiceAddedEmail(Poll poll, Choice choice) { ChoiceAddedEmail email = new ChoiceAddedEmail(getLocale()); email.setPoll(poll); @@ -213,6 +239,15 @@ public class EmailService extends PollenServiceSupport { return email; } + public UserAccountCreatedFromProviderEmail newUserAccountCreatedFromProviderEmail(PollenUser user, + UserCredential credential) { + UserAccountCreatedFromProviderEmail email = new UserAccountCreatedFromProviderEmail(getLocale()); + email.setUser(user); + email.setProvider(t("pollen.service.mail.loginProvider." + credential.getProvider())); + email.setProfileUrl(getUIContext().getProfileUrl()); + return email; + } + public UserAccountEditedEmail newUserAccountEditedEmail(PollenUser user) { UserAccountEditedEmail email = new UserAccountEditedEmail(getLocale()); email.setUser(user); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/UserAccountCreatedFromProviderEmail.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/UserAccountCreatedFromProviderEmail.java new file mode 100644 index 00000000..8f7adec3 --- /dev/null +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/mail/UserAccountCreatedFromProviderEmail.java @@ -0,0 +1,76 @@ +package org.chorem.pollen.services.service.mail; + +/* + * #%L + * Pollen :: Service + * %% + * Copyright (C) 2009 - 2017 Code Lutin, Tony Chemit + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import org.chorem.pollen.persistence.entity.PollenUser; +import org.nuiton.i18n.I18n; + +import java.util.Locale; + +/** + * Created on 4/30/14. + * + * @author Tony Chemit - dev@tchemit.fr + * @since 2.0 + */ +public class UserAccountCreatedFromProviderEmail extends PollenMail { + + private PollenUser user; + private String provider; + private String profileUrl; + + protected UserAccountCreatedFromProviderEmail(Locale locale) { + super(locale); + } + + @Override + public String getSubject() { + if (user.getName() == null) { + return I18n.l(locale, "pollen.service.mail.UserAccountCreatedFromProviderEmail.subject", user.getEmail()); + } + return I18n.l(locale, "pollen.service.mail.UserAccountCreatedFromProviderEmail.subject", user.getName()); + } + + public PollenUser getUser() { + return user; + } + + public void setUser(PollenUser user) { + this.user = user; + } + + public String getProvider() { + return provider; + } + + public void setProvider(String provider) { + this.provider = provider; + } + + public String getProfileUrl() { + return profileUrl; + } + + public void setProfileUrl(String profileUrl) { + this.profileUrl = profileUrl; + } +} diff --git a/pollen-services/src/main/resources/email/UserAccountCreatedFromProviderEmail.mustache b/pollen-services/src/main/resources/email/UserAccountCreatedFromProviderEmail.mustache new file mode 100644 index 00000000..e477bd98 --- /dev/null +++ b/pollen-services/src/main/resources/email/UserAccountCreatedFromProviderEmail.mustache @@ -0,0 +1,10 @@ +Welcome {{user.name}}, + +You have just signed in for the first time with your {{provider}} account. + +A Pollen account has ben automatically created with your profile information: +Name: {{user.name}} +Email: {{user.email}} + +You can edit this information in the following page: {{profileUrl}} +You also can set a password to sign in to Pollen without using {{provider}}. \ No newline at end of file diff --git a/pollen-services/src/main/resources/email/UserAccountCreatedFromProviderEmail_fr.mustache b/pollen-services/src/main/resources/email/UserAccountCreatedFromProviderEmail_fr.mustache new file mode 100644 index 00000000..7619d044 --- /dev/null +++ b/pollen-services/src/main/resources/email/UserAccountCreatedFromProviderEmail_fr.mustache @@ -0,0 +1,11 @@ +Bonjour {{user.name}}, + +Vous venez de vous connecter à Pollen pour la première fois à partir de votre compte {{provider}}. + +Un compte Pollen a été automatiquement créé avec les informations de votre profil : + +Nom : {{user.name}} +Courriel : {{user.email}} + +Vous pouvez modifier ces informations sur la page suivante : {{profileUrl}} +Vous pouvez également renseigner un mot de passe pour pouvoir vous connecter à Pollen sans passer par {{provider}}. \ No newline at end of file diff --git a/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties b/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties index aeb42167..b19d9a81 100644 --- a/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties +++ b/pollen-services/src/main/resources/i18n/pollen-services_en_GB.properties @@ -155,6 +155,7 @@ pollen.service.mail.PollVoteReminderEmail.subject=[Pollen] Reminder to vote on p pollen.service.mail.ResendValidationEmail.subject=[Pollen] Invitation to validate your account %s pollen.service.mail.RestrictedPollInvitationEmail.subject=[Pollen] Invitation to vote on poll %s pollen.service.mail.UserAccountCreatedEmail.subject=[Pollen] Confirmation of account creation %s +pollen.service.mail.UserAccountCreatedFromProviderEmail.subject=[Pollen] Confirmation of account creation %s pollen.service.mail.UserAccountDeletedEmail.subject=[Pollen] Confirmation of deletion of the account %s pollen.service.mail.UserAccountEditedEmail.subject=[Pollen] Update of the account %s pollen.service.mail.UserAccountEmailValidatedEmail.subject=[Pollen] Validation of your account %s @@ -164,3 +165,22 @@ pollen.service.mail.VoteDeletedEmail.subject=[Pollen] A vote was deleted in poll pollen.service.mail.VoteEditedEmail.subject=[Pollen] A vote was edited in poll %s pollen.service.mail.VoteSummaryEmail.subject=[Pollen] Summary of the votes since %s for the poll %s pollen.service.mail.feedbackEmail.subject=[Pollen] feedback - %s +pollen.service.mail.loginProvider.amazon=Amazon +pollen.service.mail.loginProvider.facebook=Facebook +pollen.service.mail.loginProvider.flickr=Flickr +pollen.service.mail.loginProvider.foursquare=Foursquare +pollen.service.mail.loginProvider.github=Github +pollen.service.mail.loginProvider.googleplus=Google +pollen.service.mail.loginProvider.hotmail=Hotmail +pollen.service.mail.loginProvider.instagram=Instagram +pollen.service.mail.loginProvider.linkedin=LinkedIn +pollen.service.mail.loginProvider.linkedin2=LinkedIn +pollen.service.mail.loginProvider.mendeley=Mendeley +pollen.service.mail.loginProvider.myspace=MySpace +pollen.service.mail.loginProvider.nimble=Nimble +pollen.service.mail.loginProvider.runkeeper=Runkeeper +pollen.service.mail.loginProvider.salesforce=Salesforce +pollen.service.mail.loginProvider.stackexchange=Stack Exchange +pollen.service.mail.loginProvider.twitter=Twitter +pollen.service.mail.loginProvider.yahoo=Yahoo +pollen.service.mail.loginProvider.yammer=Yammer diff --git a/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties b/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties index 5cd63aff..ab2f93c8 100644 --- a/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties +++ b/pollen-services/src/main/resources/i18n/pollen-services_fr_FR.properties @@ -154,6 +154,7 @@ pollen.service.mail.PollVoteReminderEmail.subject=[Pollen] Rappel du vote au son pollen.service.mail.ResendValidationEmail.subject=[Pollen] Validez votre compte %s pollen.service.mail.RestrictedPollInvitationEmail.subject=[Pollen] Invitation au sondage %s pollen.service.mail.UserAccountCreatedEmail.subject=[Pollen] Confirmation de création du compte %s +pollen.service.mail.UserAccountCreatedFromProviderEmail.subject=[Pollen] Confirmation de création du compte %s pollen.service.mail.UserAccountDeletedEmail.subject=[Pollen] Confirmation de suppression du compte %s pollen.service.mail.UserAccountEditedEmail.subject=[Pollen] Édition du compte %s pollen.service.mail.UserAccountEmailValidatedEmail.subject=[Pollen] Valiation de votre compte %s @@ -162,3 +163,22 @@ pollen.service.mail.VoteAddedEmail.subject=[Pollen] Un nouveau vote a été ajou pollen.service.mail.VoteDeletedEmail.subject=[Pollen] Un vote a été supprimé sur le sondage %s pollen.service.mail.VoteEditedEmail.subject=[Pollen] Un vote a été modifié du sondage %s pollen.service.mail.feedbackEmail.subject=[Pollen] retour utilisateur - %s +pollen.service.mail.loginProvider.amazon=Amazon +pollen.service.mail.loginProvider.facebook=Facebook +pollen.service.mail.loginProvider.flickr=Flickr +pollen.service.mail.loginProvider.foursquare=Foursquare +pollen.service.mail.loginProvider.github=Github +pollen.service.mail.loginProvider.googleplus=Google +pollen.service.mail.loginProvider.hotmail=Hotmail +pollen.service.mail.loginProvider.instagram=Instagram +pollen.service.mail.loginProvider.linkedin=LinkedIn +pollen.service.mail.loginProvider.linkedin2=LinkedIn +pollen.service.mail.loginProvider.mendeley=Mendeley +pollen.service.mail.loginProvider.myspace=MySpace +pollen.service.mail.loginProvider.nimble=Nimble +pollen.service.mail.loginProvider.runkeeper=Runkeeper +pollen.service.mail.loginProvider.salesforce=Salesforce +pollen.service.mail.loginProvider.stackexchange=Stack Exchange +pollen.service.mail.loginProvider.twitter=Twitter +pollen.service.mail.loginProvider.yahoo=Yahoo +pollen.service.mail.loginProvider.yammer=Yammer diff --git a/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUIUrlRenderServiceTest.java b/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUIUrlRenderServiceTest.java index 2081fc10..41517f1e 100644 --- a/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUIUrlRenderServiceTest.java +++ b/pollen-services/src/test/java/org/chorem/pollen/services/service/PollenUIUrlRenderServiceTest.java @@ -47,6 +47,7 @@ public class PollenUIUrlRenderServiceTest extends AbstractPollenServiceTest { pollenUIContext.setPollEditUrl(UI_END_POINT + "/#poll/edit/{pollId}/{token}"); pollenUIContext.setPollVoteUrl(UI_END_POINT + "/#poll/vote/{pollId}/{token}"); pollenUIContext.setPollVoteEditUrl(UI_END_POINT + "/#poll/vote/{pollId}/{voteId}/{token}"); + pollenUIContext.setProfileUrl(UI_END_POINT + "/#user/profile"); } @Test diff --git a/pollen-ui-riot-js/src/main/web/js/Session.js b/pollen-ui-riot-js/src/main/web/js/Session.js index 5582ba2a..2c5da6ed 100644 --- a/pollen-ui-riot-js/src/main/web/js/Session.js +++ b/pollen-ui-riot-js/src/main/web/js/Session.js @@ -46,7 +46,8 @@ class Session { pollVoteEditUrl: window.location.origin + "/#poll/{pollId}/vote/{voteId}/{token}", pollEditUrl: window.location.origin + "/#poll/{pollId}/edit/{token}", resourceUrl: this.configuration.endPoint + "/v1/resources/{resourceId}", - resourceDownloadUrl: this.configuration.endPoint + "/v1/resources/{resourceId}/download" + resourceDownloadUrl: this.configuration.endPoint + "/v1/resources/{resourceId}/download", + profileUrl: this.configuration.endPoint + "/#user/profile" }; // pour contenir les traductions this.i18n = require("../i18n.json"); diff --git a/pollen-ui-riot-js/src/main/web/tag/SignIn.tag.html b/pollen-ui-riot-js/src/main/web/tag/SignIn.tag.html index f58786ac..10f992e7 100644 --- a/pollen-ui-riot-js/src/main/web/tag/SignIn.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/SignIn.tag.html @@ -52,7 +52,7 @@ require("./components/HumanInput.tag.html"); <div class="c-hint--static c-hint--error">{message}</div> <p><a onclick="{newPassword}">{__.lostpassword}</a></p> </div> - <div class="o-form-element align-center"> + <div class="o-form-element align-center" if="{loginProviders.length > 0}"> <p>Ou connectez vous avec votre compte :</p> <p> <a each="{loginProvider in loginProviders}" class="provider-link" -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.