branch feature/28_avatars created (now c7550c51)
This is an automated email from the git hooks/post-receive script. New change to branch feature/28_avatars in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git at c7550c51 refs #28 ajout de l'avatar pour l'utilisateur + possibilité d'en choisir un parmi les providers disponibles This branch includes the following new commits: new c7550c51 refs #28 ajout de l'avatar pour l'utilisateur + possibilité d'en choisir un parmi les providers disponibles The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit c7550c51e3f6cb5e502e0ff257e4f181acb1c984 Author: Kevin Morin <morin@codelutin.com> Date: Tue Sep 19 18:10:32 2017 +0200 refs #28 ajout de l'avatar pour l'utilisateur + possibilité d'en choisir un parmi les providers disponibles -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/28_avatars in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit c7550c51e3f6cb5e502e0ff257e4f181acb1c984 Author: Kevin Morin <morin@codelutin.com> Date: Tue Sep 19 18:10:32 2017 +0200 refs #28 ajout de l'avatar pour l'utilisateur + possibilité d'en choisir un parmi les providers disponibles --- .../db/migration/h2/V3_0_0_11__add_avatar.sql | 2 ++ .../migration/postgresql/V3_0_0_11__add_avatar.sql | 2 ++ pollen-persistence/src/main/xmi/pollen.properties | 2 +- pollen-persistence/src/main/xmi/pollen.zargo | Bin 28355 -> 28419 bytes .../chorem/pollen/rest/api/v1/PollenUserApi.java | 17 +++++++++++++ .../pollen/services/bean/PollenUserBean.java | 12 +++++++++ .../pollen/services/service/SocialAuthService.java | 18 +++++++++++++ pollen-ui-riot-js/src/main/web/js/UserService.js | 7 +++++- pollen-ui-riot-js/src/main/web/tag/Pollen.tag.html | 28 +++++++++++++++++++-- .../src/main/web/tag/UserProfile.tag.html | 24 ++++++++++++++++++ 10 files changed, 108 insertions(+), 4 deletions(-) diff --git a/pollen-persistence/src/main/resources/db/migration/h2/V3_0_0_11__add_avatar.sql b/pollen-persistence/src/main/resources/db/migration/h2/V3_0_0_11__add_avatar.sql new file mode 100644 index 00000000..197b01b4 --- /dev/null +++ b/pollen-persistence/src/main/resources/db/migration/h2/V3_0_0_11__add_avatar.sql @@ -0,0 +1,2 @@ +-- add user's avatar +alter table pollenUser add avatar VARCHAR(255); diff --git a/pollen-persistence/src/main/resources/db/migration/postgresql/V3_0_0_11__add_avatar.sql b/pollen-persistence/src/main/resources/db/migration/postgresql/V3_0_0_11__add_avatar.sql new file mode 100644 index 00000000..197b01b4 --- /dev/null +++ b/pollen-persistence/src/main/resources/db/migration/postgresql/V3_0_0_11__add_avatar.sql @@ -0,0 +1,2 @@ +-- add user's avatar +alter table pollenUser add avatar VARCHAR(255); diff --git a/pollen-persistence/src/main/xmi/pollen.properties b/pollen-persistence/src/main/xmi/pollen.properties index 926a53e6..19fe27c2 100644 --- a/pollen-persistence/src/main/xmi/pollen.properties +++ b/pollen-persistence/src/main/xmi/pollen.properties @@ -18,7 +18,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # #L% ###m -model.tagvalue.version=3.0.0.10 +model.tagvalue.version=3.0.0.11 #model.tagValue.notGenerateToString=true #model.tagValue.constantPrefix=PROPERTY_ #model.tagValue.useEnumerationName=true diff --git a/pollen-persistence/src/main/xmi/pollen.zargo b/pollen-persistence/src/main/xmi/pollen.zargo index 0da955ef..1642eec1 100644 Binary files a/pollen-persistence/src/main/xmi/pollen.zargo and b/pollen-persistence/src/main/xmi/pollen.zargo differ diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollenUserApi.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollenUserApi.java index 188b9ea7..023864c8 100644 --- a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollenUserApi.java +++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollenUserApi.java @@ -158,4 +158,21 @@ public class PollenUserApi { socialAuthService.deleteUserCredential(userId, credentialId); } + + @Path("/users/{userId}/avatar/{provider}") + @POST + public String setAvatar(@Context SocialAuthService socialAuthService, + @Context HttpServletRequest request, + @PathParam("userId") PollenEntityId<PollenUser> userId, + @PathParam("provider") String provider, + String providerReturn) throws Exception { + + SocialAuthManager socialAuthManager = + (SocialAuthManager) request.getSession().getAttribute(ApiUtils.SOCIAL_AUTH_MANAGER_SESSION_KEY); + //socialAuthManager + request.getSession().removeAttribute(ApiUtils.SOCIAL_AUTH_MANAGER_SESSION_KEY); + Gson gson = new Gson(); + Map<String, String> paramsMap = gson.fromJson(providerReturn, Map.class); + return socialAuthService.setAvatarToUser(userId, socialAuthManager, paramsMap); + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenUserBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenUserBean.java index d1d1ccb5..aea1b1d0 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenUserBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/PollenUserBean.java @@ -56,6 +56,8 @@ public class PollenUserBean extends PollenBean<PollenUser> { protected boolean gtuValidated; + protected String avatar; + public PollenUserBean() { super(PollenUser.class); } @@ -82,6 +84,7 @@ public class PollenUserBean extends PollenBean<PollenUser> { }) .collect(Collectors.toList())); } + setAvatar(entity.getAvatar()); } @Override @@ -95,6 +98,7 @@ public class PollenUserBean extends PollenBean<PollenUser> { entity.setLanguage(getLanguage()); entity.setEmail(getEmail()); entity.setPassword(getPassword()); + entity.setAvatar(getAvatar()); return entity; @@ -179,4 +183,12 @@ public class PollenUserBean extends PollenBean<PollenUser> { public void setGtuValidated(boolean gtuValidated) { this.gtuValidated = gtuValidated; } + + public String getAvatar() { + return avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } } 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 d9afcc3f..e651320c 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 @@ -247,4 +247,22 @@ public class SocialAuthService extends PollenServiceSupport { dao.delete(dao.forTopiaIdEquals(credentialId.getEntityId()).findUnique()); commit(); } + + public String setAvatarToUser(PollenEntityId<PollenUser> userId, SocialAuthManager manager, Map<String, String> paramsMap) throws Exception { + checkIsConnected(); + PollenUser connectedUser = getConnectedUser(); + if (!connectedUser.getTopiaId().equals(userId.getEntityId())) { + throw new PollenUnauthorizedException(userId.getReducedId()); + } + + AuthProvider provider = manager.connect(paramsMap); + + // get profile + Profile p = provider.getUserProfile(); + + connectedUser.setAvatar(p.getProfileImageURL()); + commit(); + + return connectedUser.getAvatar(); + } } diff --git a/pollen-ui-riot-js/src/main/web/js/UserService.js b/pollen-ui-riot-js/src/main/web/js/UserService.js index 396921a5..0ed302e9 100644 --- a/pollen-ui-riot-js/src/main/web/js/UserService.js +++ b/pollen-ui-riot-js/src/main/web/js/UserService.js @@ -68,7 +68,6 @@ class UserService extends FetchService { return this.post(url, body); } - unlinkProvider(userId, credentialId) { let url = this._getUrlPrefix(userId) + "/credentials/" + credentialId; return this.doDelete(url); @@ -78,6 +77,12 @@ class UserService extends FetchService { let url = "/v1/gtu/validate"; return this.post(url); } + + getProviderAvatar(userId, query) { + let url = this._getUrlPrefix(userId) + "/avatar/" + query.loginProvider; + let body = JSON.stringify(query); + return this.post(url, body); + } } module.exports = singleton(UserService); 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 b3ff983d..cb829dff 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 @@ -224,8 +224,12 @@ require("./popup/GtuChangeModal.tag.html"); }); route("/user/profile", () => { - this.bus.trigger("pageChanged", "userProfile"); - riot.mount(this.refs.content, "userprofile"); + if (!session.isConnected()) { + route("/signin?url=/user/profile"); + } else { + this.bus.trigger("pageChanged", "userProfile"); + riot.mount(this.refs.content, "userprofile"); + } }); route("/favoriteLists", () => { this.bus.trigger("pageChanged", "favoriteLists"); @@ -289,6 +293,26 @@ require("./popup/GtuChangeModal.tag.html"); this.bus.off("user", callback); }); } + + } else if (q.action === "avatar" && session.isConnected()) { + let callback = (user) => { + userService.getProviderAvatar(user.id, q).then(() => { + location.replace(session.pollenUIContext.uiEndPoint + "/#user/profile"); + }, (e) => { + e.text().then(label => { + location.replace(session.pollenUIContext.uiEndPoint + "/#user/profile?error=" + label); + }); + }); + }; + + if (session.getUser()) { + callback(session.getUser()); + } else { + this.bus.on("user", (user) => { + callback(user); + this.bus.off("user", callback); + }); + } } } else { diff --git a/pollen-ui-riot-js/src/main/web/tag/UserProfile.tag.html b/pollen-ui-riot-js/src/main/web/tag/UserProfile.tag.html index 6b0d9b86..749ee115 100644 --- a/pollen-ui-riot-js/src/main/web/tag/UserProfile.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/UserProfile.tag.html @@ -144,6 +144,18 @@ require("./components/HumanInput.tag.html"); </a> </p> </div> + + <div class="o-form-element align-center" if="{loginProviders.length > 0}"> + <p>Avatar</p> + <p><img src="{user.avatar}" onerror="{test}"/></p> + <p> + <a each="{loginProvider in loginProviders}" class="provider-link" + onclick="{getProviderAvatar(loginProvider)}"> + <i class="fa fa-{authService.providerIcons[loginProvider]}" if="{authService.providerIcons[loginProvider]}"></i> + <span if="{!authService.providerIcons[loginProvider]}">{loginProvider}</span> + </a> + </p> + </div> </div> </div> @@ -170,6 +182,10 @@ require("./components/HumanInput.tag.html"); this.update(); }; +this.test = (e) => { +console.log(e) +} + this.resendValidation = () => { this.authService.resendValidation(this.user.email); }; @@ -243,6 +259,14 @@ require("./components/HumanInput.tag.html"); }); }; + getProviderAvatar= (provider) => (e) => { + let redirection = encodeURIComponent(location.origin + location.pathname + + "?loginProvider=" + provider + "&action=avatar"); + this.authService.getLoginProviderUrl(provider, redirection).then(result => { + location.assign(result); + }); + }; + this.listen("user", this.onUserChange); </script> -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm