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 a32cf352ca05b298cd6abb2d82ae8e8e958644c7 Author: Kevin Morin <morin@codelutin.com> Date: Tue Aug 29 17:57:01 2017 +0200 refs #1 erreur si l'utilisateur veut se connecter via un service tiers et que son email est deja utilisé par un autre compte Pollen --- .../pollen/rest/api/PollenRestApiApplication.java | 2 ++ .../PollenEmailAlreadyUsedExceptionMapper.java | 20 ++++++++++++++ .../pollen/services/service/SocialAuthService.java | 4 +++ .../security/PollenEmailAlreadyUsedException.java | 11 ++++++++ pollen-ui-riot-js/src/main/web/img/logo.png | Bin 0 -> 10506 bytes pollen-ui-riot-js/src/main/web/tag/Pollen.tag.html | 18 +++++++++++-- .../src/main/web/tag/PollenMessageManager.tag.html | 2 ++ .../src/main/web/tag/admin/LoginProviders.tag.html | 30 ++++++++++----------- 8 files changed, 69 insertions(+), 18 deletions(-) diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiApplication.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiApplication.java index 897dfbcf..271b223a 100644 --- a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiApplication.java +++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/PollenRestApiApplication.java @@ -7,6 +7,7 @@ import org.chorem.pollen.rest.api.exceptionMappers.FavoriteListImportExceptionMa import org.chorem.pollen.rest.api.exceptionMappers.InvalidEntityLinkExceptionMapper; import org.chorem.pollen.rest.api.exceptionMappers.InvalidFormExceptionMapper; import org.chorem.pollen.rest.api.exceptionMappers.PollenAuthenticationExceptionMapper; +import org.chorem.pollen.rest.api.exceptionMappers.PollenEmailAlreadyUsedExceptionMapper; import org.chorem.pollen.rest.api.exceptionMappers.PollenEmailNotValidatedExceptionMapper; import org.chorem.pollen.rest.api.exceptionMappers.PollenInvalidEmailActivationTokenExceptionMapper; import org.chorem.pollen.rest.api.exceptionMappers.PollenInvalidPermissionExceptionMapper; @@ -61,6 +62,7 @@ public class PollenRestApiApplication extends Application { new PollenInvalidPermissionExceptionMapper(), new PollenInvalidEmailActivationTokenExceptionMapper(), new PollenEmailNotValidatedExceptionMapper(), + new PollenEmailAlreadyUsedExceptionMapper(), new PollenUserBannedExceptionMapper(), new InvalidFormExceptionMapper(), new FavoriteListImportExceptionMapper(), diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/exceptionMappers/PollenEmailAlreadyUsedExceptionMapper.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/exceptionMappers/PollenEmailAlreadyUsedExceptionMapper.java new file mode 100644 index 00000000..3b1ec37b --- /dev/null +++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/exceptionMappers/PollenEmailAlreadyUsedExceptionMapper.java @@ -0,0 +1,20 @@ +package org.chorem.pollen.rest.api.exceptionMappers; + +import org.chorem.pollen.services.service.security.PollenEmailAlreadyUsedException; + +import javax.ws.rs.core.Response; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class PollenEmailAlreadyUsedExceptionMapper extends PollenAbstractExceptionMapper<PollenEmailAlreadyUsedException> { + + public PollenEmailAlreadyUsedExceptionMapper() { + super(Response.Status.FORBIDDEN); + } + + @Override + protected Object getEntity(PollenEmailAlreadyUsedException exception) { + return "emailAlreadyUsed"; + } +} 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 2e136aa7..8c9f7284 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 @@ -18,6 +18,7 @@ import org.chorem.pollen.persistence.entity.UserCredential; import org.chorem.pollen.persistence.entity.UserCredentialImpl; import org.chorem.pollen.services.bean.LoginProviderBean; import org.chorem.pollen.services.bean.PollenEntityRef; +import org.chorem.pollen.services.service.security.PollenEmailAlreadyUsedException; import java.util.ArrayList; import java.util.List; @@ -56,6 +57,9 @@ public class SocialAuthService extends PollenServiceSupport { } pollenUser = pollenUserForCredential.get(); + } else if (userDao.emailExists(p.getEmail())) { + throw new PollenEmailAlreadyUsedException(); + } else { if (log.isInfoEnabled()) { log.info("create new user : " + name); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/PollenEmailAlreadyUsedException.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/PollenEmailAlreadyUsedException.java new file mode 100644 index 00000000..afd67772 --- /dev/null +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/PollenEmailAlreadyUsedException.java @@ -0,0 +1,11 @@ +package org.chorem.pollen.services.service.security; + +/** + * @author Kevin Morin (Code Lutin) + */ +public class PollenEmailAlreadyUsedException extends Exception { + + public PollenEmailAlreadyUsedException() { + super("emailAlreadyUsed"); + } +} diff --git a/pollen-ui-riot-js/src/main/web/img/logo.png b/pollen-ui-riot-js/src/main/web/img/logo.png new file mode 100644 index 00000000..79c5e328 Binary files /dev/null and b/pollen-ui-riot-js/src/main/web/img/logo.png differ diff --git a/pollen-ui-riot-js/src/main/web/tag/Pollen.tag.html b/pollen-ui-riot-js/src/main/web/tag/Pollen.tag.html index 5a4114b6..a64d7482 100644 --- a/pollen-ui-riot-js/src/main/web/tag/Pollen.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/Pollen.tag.html @@ -71,15 +71,22 @@ require("./popup/InformationPopup.tag.html"); this.updatePageTitle(); }); + let route = require("riot-route"); + let Message = require("../js/Message"); + this.on("mount", () => { this.listen("locale", this.onLocaleChange); this.listen("unauthorize", this.refs.signIn.open); this.listen("signIn", this.refs.signIn.open); this.listen("closeSignIn", this.refs.signIn.close); + this.listen("messageManagerReady", () => { + let q = route.query(); + if (q.error) { + this.bus.trigger("message", new Message(decodeURIComponent(this._l(q.error)), "error")); + } + }); }); - let route = require("riot-route"); - route("/poll/create", () => { this.bus.trigger("pageChanged", "home"); riot.mount(this.refs.content, "createpoll"); @@ -230,6 +237,13 @@ require("./popup/InformationPopup.tag.html"); let currentPage = localStorage.getItem("currentPage"); localStorage.removeItem("currentPage"); location.href = session.pollenUIContext.uiEndPoint + "/" + currentPage; + }, (e) => { + let currentPage = localStorage.getItem("currentPage"); + localStorage.removeItem("currentPage"); + console.log(e); + e.text().then(label => { + location.href = session.pollenUIContext.uiEndPoint + "/" + currentPage + "?error=" + label; + }); }); } else { diff --git a/pollen-ui-riot-js/src/main/web/tag/PollenMessageManager.tag.html b/pollen-ui-riot-js/src/main/web/tag/PollenMessageManager.tag.html index 6b3854fa..d8fbabdc 100644 --- a/pollen-ui-riot-js/src/main/web/tag/PollenMessageManager.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/PollenMessageManager.tag.html @@ -31,8 +31,10 @@ }, message.timeout * 1000); }; + this.on("mount", () => { this.listen("message", this.handleMessages); + this.bus.trigger("messageManagerReady"); }); this.closeMessage = (messageId) => (e) => { diff --git a/pollen-ui-riot-js/src/main/web/tag/admin/LoginProviders.tag.html b/pollen-ui-riot-js/src/main/web/tag/admin/LoginProviders.tag.html index 49e06b1c..29e16779 100644 --- a/pollen-ui-riot-js/src/main/web/tag/admin/LoginProviders.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/admin/LoginProviders.tag.html @@ -82,23 +82,21 @@ require("../components/HumanInput.tag.html"); e.preventDefault(); e.stopPropagation(); let loginProvider = this.loginProviders[index]; - this.confirm(this.__.deleteMessage).then((confirm) => { - if (confirm) { - if (!loginProvider.id) { - this.loginProviders.splice(index, 1); - this.availableLoginProviders.push(loginProvider.name); - this.availableLoginProviders.sort(); - this.update(); - } else { - authService.deleteLoginProvider(loginProvider).then(() => { - this.loginProviders.splice(index, 1); - this.availableLoginProviders.push(loginProvider.name); - this.availableLoginProviders.sort(); - this.update(); - }); + this.confirm(this.__.deleteMessage) + .then((confirm) => { + if (!confirm) { + return Promise.reject(); } - } - }); + if (confirm && loginProvider.id) { + return authService.deleteLoginProvider(loginProvider); + } + }) + .then(() => { + this.loginProviders.splice(index, 1); + this.availableLoginProviders.push(loginProvider.name); + this.availableLoginProviders.sort(); + this.update(); + }); }; this.saveLoginProvider = (index) => (e) => { -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.