This is an automated email from the git hooks/post-receive script. New change to branch feature/85-droits-utilisateurs in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git from 4a45f10f ajout du lien qui explique comment tester les providers en local new 6d8f4a2a droit de création de sondage (refs #85) 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 6d8f4a2afb09fca63a88ac44ab95cf649c1defb8 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Oct 17 11:33:07 2017 +0200 droit de création de sondage (refs #85) Summary of changes: .../h2/V3_1_0_7__add_user_can_create_poll.sql | 3 ++ .../V3_1_0_7__add_user_can_create_poll.sql | 3 ++ pollen-persistence/src/main/xmi/pollen.properties | 2 +- pollen-persistence/src/main/xmi/pollen.zargo | Bin 30366 -> 30431 bytes pollen-services/src/main/config/PollenServices.ini | 8 +++- .../pollen/services/bean/ConfigurationBean.java | 10 +++++ .../pollen/services/bean/PollenUserBean.java | 10 +++++ .../chorem/pollen/services/bean/UsersRight.java | 12 ++++++ .../services/config/PollenServicesConfig.java | 6 +++ .../services/service/ConfigurationService.java | 1 + .../pollen/services/service/PollService.java | 3 ++ .../services/service/PollenServiceSupport.java | 20 +++++++++ .../pollen/services/service/PollenUserService.java | 6 +++ .../services/service/security/SecurityService.java | 22 ++++++++++ .../i18n/pollen-services_en_GB.properties | 1 + .../i18n/pollen-services_fr_FR.properties | 1 + .../services/service/VoteCountingServiceTest.java | 3 ++ pollen-ui-riot-js/src/main/web/i18n/fr.json | 1 + pollen-ui-riot-js/src/main/web/js/Session.js | 21 ++++++++++ .../src/main/web/tag/Authorization.tag.html | 5 +++ .../src/main/web/tag/AvatarAction.tag.js | 20 --------- .../src/main/web/tag/FilterLoginProvider.tag.js | 46 +++++++++++++++++++++ .../src/main/web/tag/LinkAction.tag.js | 20 --------- pollen-ui-riot-js/src/main/web/tag/Pollen.tag.html | 21 +++------- .../src/main/web/tag/PollenHeader.tag.html | 11 ++++- .../src/main/web/tag/SigninAction.tag.js | 26 +++--------- .../src/main/web/tag/admin/UserCard.tag.html | 18 ++++++-- .../src/main/web/tag/admin/UserEditModal.tag.html | 25 +++++++++-- 28 files changed, 238 insertions(+), 87 deletions(-) create mode 100644 pollen-persistence/src/main/resources/db/migration/h2/V3_1_0_7__add_user_can_create_poll.sql create mode 100644 pollen-persistence/src/main/resources/db/migration/postgresql/V3_1_0_7__add_user_can_create_poll.sql create mode 100644 pollen-services/src/main/java/org/chorem/pollen/services/bean/UsersRight.java delete mode 100644 pollen-ui-riot-js/src/main/web/tag/AvatarAction.tag.js create mode 100644 pollen-ui-riot-js/src/main/web/tag/FilterLoginProvider.tag.js delete mode 100644 pollen-ui-riot-js/src/main/web/tag/LinkAction.tag.js -- 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/85-droits-utilisateurs in repository pollen. See https://gitlab.nuiton.org/chorem/pollen.git commit 6d8f4a2afb09fca63a88ac44ab95cf649c1defb8 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Oct 17 11:33:07 2017 +0200 droit de création de sondage (refs #85) --- .../h2/V3_1_0_7__add_user_can_create_poll.sql | 3 ++ .../V3_1_0_7__add_user_can_create_poll.sql | 3 ++ pollen-persistence/src/main/xmi/pollen.properties | 2 +- pollen-persistence/src/main/xmi/pollen.zargo | Bin 30366 -> 30431 bytes pollen-services/src/main/config/PollenServices.ini | 8 +++- .../pollen/services/bean/ConfigurationBean.java | 10 +++++ .../pollen/services/bean/PollenUserBean.java | 10 +++++ .../chorem/pollen/services/bean/UsersRight.java | 12 ++++++ .../services/config/PollenServicesConfig.java | 6 +++ .../services/service/ConfigurationService.java | 1 + .../pollen/services/service/PollService.java | 3 ++ .../services/service/PollenServiceSupport.java | 20 +++++++++ .../pollen/services/service/PollenUserService.java | 6 +++ .../services/service/security/SecurityService.java | 22 ++++++++++ .../i18n/pollen-services_en_GB.properties | 1 + .../i18n/pollen-services_fr_FR.properties | 1 + .../services/service/VoteCountingServiceTest.java | 3 ++ pollen-ui-riot-js/src/main/web/i18n/fr.json | 1 + pollen-ui-riot-js/src/main/web/js/Session.js | 21 ++++++++++ .../src/main/web/tag/Authorization.tag.html | 5 +++ .../src/main/web/tag/AvatarAction.tag.js | 20 --------- .../src/main/web/tag/FilterLoginProvider.tag.js | 46 +++++++++++++++++++++ .../src/main/web/tag/LinkAction.tag.js | 20 --------- pollen-ui-riot-js/src/main/web/tag/Pollen.tag.html | 21 +++------- .../src/main/web/tag/PollenHeader.tag.html | 11 ++++- .../src/main/web/tag/SigninAction.tag.js | 26 +++--------- .../src/main/web/tag/admin/UserCard.tag.html | 18 ++++++-- .../src/main/web/tag/admin/UserEditModal.tag.html | 25 +++++++++-- 28 files changed, 238 insertions(+), 87 deletions(-) diff --git a/pollen-persistence/src/main/resources/db/migration/h2/V3_1_0_7__add_user_can_create_poll.sql b/pollen-persistence/src/main/resources/db/migration/h2/V3_1_0_7__add_user_can_create_poll.sql new file mode 100644 index 00000000..0394853c --- /dev/null +++ b/pollen-persistence/src/main/resources/db/migration/h2/V3_1_0_7__add_user_can_create_poll.sql @@ -0,0 +1,3 @@ +-- add canCreatePoll in user +alter table pollenuser add cancreatepoll boolean; +update pollenuser set cancreatepoll = false; \ No newline at end of file diff --git a/pollen-persistence/src/main/resources/db/migration/postgresql/V3_1_0_7__add_user_can_create_poll.sql b/pollen-persistence/src/main/resources/db/migration/postgresql/V3_1_0_7__add_user_can_create_poll.sql new file mode 100644 index 00000000..0394853c --- /dev/null +++ b/pollen-persistence/src/main/resources/db/migration/postgresql/V3_1_0_7__add_user_can_create_poll.sql @@ -0,0 +1,3 @@ +-- add canCreatePoll in user +alter table pollenuser add cancreatepoll boolean; +update pollenuser set cancreatepoll = false; \ No newline at end of file diff --git a/pollen-persistence/src/main/xmi/pollen.properties b/pollen-persistence/src/main/xmi/pollen.properties index ca28eb99..3b6ddb78 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.1.0.6 +model.tagvalue.version=3.1.0.7 #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 7df0d631..92718584 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-services/src/main/config/PollenServices.ini b/pollen-services/src/main/config/PollenServices.ini index e20ffe6c..7705da6c 100644 --- a/pollen-services/src/main/config/PollenServices.ini +++ b/pollen-services/src/main/config/PollenServices.ini @@ -209,4 +209,10 @@ defaultValue = 0 description = pollen.configuration.userConnectedRequired key = pollen.default.userConnectedRequired type = boolean -defaultValue = false \ No newline at end of file +defaultValue = false + +[option usersCanCreatePoll] +description = pollen.configuration.usersCanCreatePoll +key = pollen.default.usersCanCreatePoll +type = org.chorem.pollen.services.bean.UsersRight +defaultValue = ALL_USERS \ No newline at end of file diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ConfigurationBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ConfigurationBean.java index ae045eb5..04fd7ceb 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ConfigurationBean.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ConfigurationBean.java @@ -7,6 +7,8 @@ public class ConfigurationBean { protected boolean userConnectedRequired; + protected UsersRight usersCanCreatePoll; + public boolean isUserConnectedRequired() { return userConnectedRequired; } @@ -14,4 +16,12 @@ public class ConfigurationBean { public void setUserConnectedRequired(boolean userConnectedRequired) { this.userConnectedRequired = userConnectedRequired; } + + public UsersRight getUsersCanCreatePoll() { + return usersCanCreatePoll; + } + + public void setUsersCanCreatePoll(UsersRight usersCanCreatePoll) { + this.usersCanCreatePoll = usersCanCreatePoll; + } } 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 2cdc54da..52fd0b2e 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 @@ -63,6 +63,8 @@ public class PollenUserBean extends PollenBean<PollenUser> { protected PollenUserEmailAddressBean defaultEmailAddress; + protected boolean canCreatePoll; + public PollenUserBean() { super(PollenUser.class); } @@ -178,4 +180,12 @@ public class PollenUserBean extends PollenBean<PollenUser> { public void setDefaultEmailAddress(PollenUserEmailAddressBean defaultEmailAddress) { this.defaultEmailAddress = defaultEmailAddress; } + + public boolean isCanCreatePoll() { + return canCreatePoll; + } + + public void setCanCreatePoll(boolean canCreatePoll) { + this.canCreatePoll = canCreatePoll; + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/UsersRight.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/UsersRight.java new file mode 100644 index 00000000..4a805770 --- /dev/null +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/UsersRight.java @@ -0,0 +1,12 @@ +package org.chorem.pollen.services.bean; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public enum UsersRight { + + ALL_USERS, + USERS_CONNECTED, + USERS_SELECTED + +} diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/config/PollenServicesConfig.java b/pollen-services/src/main/java/org/chorem/pollen/services/config/PollenServicesConfig.java index 37fc3d79..4c8c3510 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/config/PollenServicesConfig.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/config/PollenServicesConfig.java @@ -33,6 +33,7 @@ import org.chorem.pollen.persistence.entity.PollType; import org.chorem.pollen.persistence.entity.ResultVisibility; import org.chorem.pollen.persistence.entity.VoteVisibility; import org.chorem.pollen.services.PollenTechnicalException; +import org.chorem.pollen.services.bean.UsersRight; import org.nuiton.config.ApplicationConfig; import org.nuiton.config.ArgumentsParserException; @@ -158,4 +159,9 @@ public class PollenServicesConfig extends GeneratedPollenServicesConfig { public Locale getFeedbackLocale() { return Locale.forLanguageTag(get().getOption(PollenServicesConfigOption.LOCALE_FEEDBACK.getKey())); } + + @Override + public UsersRight getUsersCanCreatePoll() { + return UsersRight.valueOf(get().getOption(PollenServicesConfigOption.USERS_CAN_CREATE_POLL.getKey())); + } } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/ConfigurationService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/ConfigurationService.java index 53253903..74845e1d 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/ConfigurationService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/ConfigurationService.java @@ -10,6 +10,7 @@ public class ConfigurationService extends PollenServiceSupport { public ConfigurationBean getConfiguration() { ConfigurationBean bean = new ConfigurationBean(); bean.setUserConnectedRequired(getPollenServiceConfig().isUserConnectedRequired()); + bean.setUsersCanCreatePoll(getPollenServiceConfig().getUsersCanCreatePoll()); return bean; } diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java index 7591f396..1ce0a46f 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollService.java @@ -250,6 +250,7 @@ public class PollService extends PollenServiceSupport { public PollBean getNewPoll(ChoiceType choiceType) { checkIsConnectedRequired(); + checkPermission(PermissionVerb.addPoll); PollBean pollBean = new PollBean(); pollBean.setChoiceType(choiceType); @@ -301,6 +302,7 @@ public class PollService extends PollenServiceSupport { List<VoterListBean> voterLists, List<VoterListMemberBean> voterListMembers) throws InvalidFormException { checkIsConnectedRequired(); + checkPermission(PermissionVerb.addPoll); checkNotNull(poll); checkIsNotPersisted(poll); @@ -379,6 +381,7 @@ public class PollService extends PollenServiceSupport { checkIsConnectedRequired(); checkNotNull(pollId); + checkPermission(PermissionVerb.addPoll); checkPermission(PermissionVerb.clonePoll, pollId); Poll poll = getPoll0(pollId); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java index f99c5945..20460e7f 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java @@ -306,6 +306,26 @@ public abstract class PollenServiceSupport implements PollenService { } + protected void checkPermission(PermissionVerb verb) { + + String permission = getSecurityService().createPermission(verb); + getSecurityService().checkPermission(permission); + + } + + protected boolean isPermitted(PermissionVerb verb) { + + String permission = getSecurityService().createPermission(verb); + return getSecurityService().isPermitted(permission); + + } + + protected boolean isNotPermitted(PermissionVerb verb) { + + return !isPermitted(verb); + + } + protected void checkNotNull(Object object) { Preconditions.checkNotNull(object); diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java index 944a14af..54298256 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenUserService.java @@ -41,6 +41,7 @@ import org.chorem.pollen.services.bean.PollenEntityRef; import org.chorem.pollen.services.bean.PollenUserBean; import org.chorem.pollen.services.bean.PollenUserEmailAddressBean; import org.chorem.pollen.services.bean.UserCredentialBean; +import org.chorem.pollen.services.bean.UsersRight; import org.chorem.pollen.services.bean.resource.ResourceFileBean; import org.chorem.pollen.services.service.security.PollenDefaultEmailAddressException; import org.chorem.pollen.services.service.security.PollenEmailNotValidatedException; @@ -98,6 +99,8 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer bean.setDefaultEmailAddress(toPollenUserEmailAddressBean(entity.getDefaultEmailAddress())); } + bean.setCanCreatePoll(entity.isCanCreatePoll()); + return bean; } @@ -495,6 +498,9 @@ public class PollenUserService extends PollenServiceSupport implements PollenSer } toSave.setName(user.getName()); toSave.setLanguage(user.getLanguage()); + if (UsersRight.USERS_SELECTED.equals(getPollenServiceConfig().getUsersCanCreatePoll())) { + toSave.setCanCreatePoll(user.isCanCreatePoll()); + } return toSave; diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java index 422fe360..3dfb9a6d 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/security/SecurityService.java @@ -63,6 +63,7 @@ import org.chorem.pollen.persistence.entity.VoterListMember; import org.chorem.pollen.services.PollenServiceContext; import org.chorem.pollen.services.bean.PaginationParameterBean; import org.chorem.pollen.services.bean.PollenEntityRef; +import org.chorem.pollen.services.bean.UsersRight; import org.chorem.pollen.services.service.PollenServiceSupport; import org.nuiton.topia.persistence.TopiaEntity; @@ -362,6 +363,12 @@ public class SecurityService extends PollenServiceSupport { } + public String createPermission(PermissionVerb verb) { + + return ":" + verb.name(); + + } + public void checkUserPassword(PollenUser user, String password) throws PollenInvalidPasswordException { String encodedPassword = null; @@ -554,6 +561,15 @@ public class SecurityService extends PollenServiceSupport { PollenPrincipal pollenPrincipal = securityContext.getMainPrincipal(); PollenUser user = securityContext.getPollenUser(); + // get addPoll + UsersRight usersCanCreatePoll = getPollenServiceConfig().getUsersCanCreatePoll(); + if (UsersRight.ALL_USERS.equals(usersCanCreatePoll) + || (UsersRight.USERS_CONNECTED.equals(usersCanCreatePoll) && user != null) + || (UsersRight.USERS_SELECTED.equals(usersCanCreatePoll) && user != null && user.isCanCreatePoll())) { + permissions.add(createSubjectPermission(PermissionVerb.addPoll)); + } + + // Get read data Set<Poll> polls = getPollDao().findAllFreePolls(); @@ -847,6 +863,12 @@ public class SecurityService extends PollenServiceSupport { } + private String createSubjectPermission(PermissionVerb verb) { + + return "*:" + verb; + + } + private String createWildcardSubjectPermission(TopiaEntity entity) { return "*:*:" + entity.getTopiaId(); 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 a28db74e..837b3e8f 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 @@ -41,6 +41,7 @@ pollen.configuration.uiEndPoint=Ui end point pollen.configuration.uiUrlPollEdit=Url to edit a poll pollen.configuration.uiUrlPollVote=Url to vote on a poll pollen.configuration.userConnectedRequired=Only connected users can be access on application +pollen.configuration.usersCanCreatePoll=Wich user can create Poll ("All_USERS", "USERS_CONNECTED" or "USERS_SELECTED") pollen.configuration.version=Application version pollen.configurqtion.uiUrlPollVoteEdit=Url to edit a vote on a poll pollen.configurqtion.uiUrlUserValidate=Url de validate user account 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 248bbe1a..8d4b0392 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 @@ -41,6 +41,7 @@ pollen.configuration.uiEndPoint=End point de l'ui pollen.configuration.uiUrlPollEdit=Url d'édition d'un sondage pollen.configuration.uiUrlPollVote=Url de vote sur un sondage pollen.configuration.userConnectedRequired=Seul les utilisateurs connectés peuvent accéder à l'application +pollen.configuration.usersCanCreatePoll=Quels utilisateurs peuvent créer des sondages ("All_USERS", "USERS_CONNECTED" ou "USERS_SELECTED") pollen.configuration.version=Version de l'application pollen.configurqtion.uiUrlPollVoteEdit=Url d'édition de vote sur un sondage pollen.configurqtion.uiUrlUserValidate=Url de validation d'un compte utilisateur diff --git a/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteCountingServiceTest.java b/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteCountingServiceTest.java index 5840a8d1..234b059d 100644 --- a/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteCountingServiceTest.java +++ b/pollen-services/src/test/java/org/chorem/pollen/services/service/VoteCountingServiceTest.java @@ -98,6 +98,9 @@ public class VoteCountingServiceTest extends AbstractPollenServiceTest { String pollId = createdPollRef.getEntityId(); + + pollService.getSecurityContext().setSubject(null); + List<ChoiceBean> createdChoices = choiceService.getChoices(pollId); ChoiceBean createdChoiceBean1 = createdChoices.get(0); ChoiceBean createdChoiceBean2 = createdChoices.get(1); diff --git a/pollen-ui-riot-js/src/main/web/i18n/fr.json b/pollen-ui-riot-js/src/main/web/i18n/fr.json index 4a809ab9..5a4658fb 100644 --- a/pollen-ui-riot-js/src/main/web/i18n/fr.json +++ b/pollen-ui-riot-js/src/main/web/i18n/fr.json @@ -391,6 +391,7 @@ "users_oneFound": "{0} trouvé sur ", "users_manyFound": "{0} trouvés sur ", "user_banned": "Banni", + "user_pollCreator": "Createur de sondages", "user_emailValidate": "En cours de validation", "user_emailIsValidate": "Adresse électronique validé", "user_administrator": "Administrateur", 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 8dce67bf..31067807 100644 --- a/pollen-ui-riot-js/src/main/web/js/Session.js +++ b/pollen-ui-riot-js/src/main/web/js/Session.js @@ -212,6 +212,27 @@ class Session { return this.pollenUIContext.uiEndPoint + "/?loginProvider=" + provider + "&action=signin"; } + isCanCreatePoll() { + return this.configurationServer + && (!this.configurationServer.userConnectedRequired || this.user) + && (this.configurationServer.usersCanCreatePoll === "ALL_USERS" + || (this.configurationServer.usersCanCreatePoll === "USERS_CONNECTED" && this.user) + || (this.configurationServer.usersCanCreatePoll === "USERS_SELECTED" && this.user && this.user.canCreatePoll)); + } + + getCanCreatePollPromise() { + return this.configurationServerPromise.then(config => { + if (config.usersCanCreatePoll === "ALL_USERS") { + return true; + } + return this.userPromise.then(user => { + return config.usersCanCreatePoll === "USERS_CONNECTED" || user.canCreatePoll; + }, () => { + return false; + }); + }); + } + } module.exports = singleton(Session); diff --git a/pollen-ui-riot-js/src/main/web/tag/Authorization.tag.html b/pollen-ui-riot-js/src/main/web/tag/Authorization.tag.html index 80384688..c31c5ce1 100644 --- a/pollen-ui-riot-js/src/main/web/tag/Authorization.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/Authorization.tag.html @@ -37,6 +37,11 @@ } else { authorizationPromise = Promise.resolve(true); } + if (this.opts.promise) { + authorizationPromise = Promise.all([this.opts.promise, authorizationPromise]).then(result => { + return result[0] && result[1]; + }); + } Promise.all([this.argumentsPromise, authorizationPromise]).then(result => { this.routeArguments = result[0]; diff --git a/pollen-ui-riot-js/src/main/web/tag/AvatarAction.tag.js b/pollen-ui-riot-js/src/main/web/tag/AvatarAction.tag.js deleted file mode 100644 index f3d184b7..00000000 --- a/pollen-ui-riot-js/src/main/web/tag/AvatarAction.tag.js +++ /dev/null @@ -1,20 +0,0 @@ -let riot = require("riot"); -let route = require("riot-route/lib/tag").default; // a voir pourquoi le default doit être mi ; -let session = require("../js/Session"); -let userService = require("../js/UserService"); - -riot.tag("avataraction", false, function() { - - var q = route.query(); - if (q.loginProvider != null && session.isConnected()) { - session.userPromise.then(() => { - userService.setProviderAvatar(q).then(() => { - location.replace(session.pollenUIContext.uiEndPoint + "/#user/profile"); - }, (e) => { - e.text().then(label => { - location.replace(session.pollenUIContext.uiEndPoint + "/#user/profile?error=" + label); - }); - }); - }); - } -}); diff --git a/pollen-ui-riot-js/src/main/web/tag/FilterLoginProvider.tag.js b/pollen-ui-riot-js/src/main/web/tag/FilterLoginProvider.tag.js new file mode 100644 index 00000000..c2961265 --- /dev/null +++ b/pollen-ui-riot-js/src/main/web/tag/FilterLoginProvider.tag.js @@ -0,0 +1,46 @@ +let riot = require("riot"); +let route = require("riot-route/lib/tag").default; // a voir pourquoi le default doit être mi ; +let session = require("../js/Session"); +let userService = require("../js/UserService"); + +riot.tag("filterloginProvider", false, function() { + + let query = route.query(); + if (query.loginProvider != null) { + if (query.action === "signin") { + session.signInProvider(query).then(() => { + let currentPage = localStorage.getItem("currentPage"); + localStorage.removeItem("currentPage"); + location.replace(session.pollenUIContext.uiEndPoint + "/" + currentPage); + }, (e) => { + let currentPage = localStorage.getItem("currentPage"); + localStorage.removeItem("currentPage"); + e.text().then(label => { + location.replace(session.pollenUIContext.uiEndPoint + "/" + currentPage + "?error=" + label); + }); + }); + + } else if (query.action === "link" && session.isConnected()) { + session.userPromise.then(() => { + userService.linkProvider(query).then(() => { + location.replace(session.pollenUIContext.uiEndPoint + "/#user/profile"); + }, (e) => { + e.text().then(label => { + location.replace(session.pollenUIContext.uiEndPoint + "/#user/profile?error=" + label); + }); + }); + }); + + } else if (query.action === "avatar" && session.isConnected()) { + session.userPromise.then(() => { + userService.setProviderAvatar(query).then(() => { + location.replace(session.pollenUIContext.uiEndPoint + "/#user/profile"); + }, (e) => { + e.text().then(label => { + location.replace(session.pollenUIContext.uiEndPoint + "/#user/profile?error=" + label); + }); + }); + }); + } + } +}); diff --git a/pollen-ui-riot-js/src/main/web/tag/LinkAction.tag.js b/pollen-ui-riot-js/src/main/web/tag/LinkAction.tag.js deleted file mode 100644 index 639b9f96..00000000 --- a/pollen-ui-riot-js/src/main/web/tag/LinkAction.tag.js +++ /dev/null @@ -1,20 +0,0 @@ -let riot = require("riot"); -let route = require("riot-route/lib/tag").default; // a voir pourquoi le default doit être mi ; -let session = require("../js/Session"); -let userService = require("../js/UserService"); - -riot.tag("linkaction", false, function() { - - var q = route.query(); - if (q.loginProvider != null && session.isConnected()) { - session.userPromise.then(() => { - userService.linkProvider(q).then(() => { - location.replace(session.pollenUIContext.uiEndPoint + "/#user/profile"); - }, (e) => { - e.text().then(label => { - location.replace(session.pollenUIContext.uiEndPoint + "/#user/profile?error=" + label); - }); - }); - }); - } -}); 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 980e66ee..80d439f2 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 @@ -31,9 +31,7 @@ require("./SignCheck.tag.html"); require("./Home.tag.html"); require("./Privacy.tag.html"); require("./PageChanged.tag.js"); -require("./SigninAction.tag.js"); -require("./AvatarAction.tag.js"); -require("./LinkAction.tag.js"); +require("./FilterLoginProvider.tag.js"); require("./poll/EditPoll.tag.html"); require("./poll/Poll.tag.html"); require("./poll/Summary.tag.html"); @@ -78,6 +76,7 @@ require("./popup/GtuChangeModal.tag.html"); </route> <route path=""> + <FilterLoginProvider/> <Authorization connected-if-required="true"> <Home/> </Authorization> @@ -120,7 +119,7 @@ require("./popup/GtuChangeModal.tag.html"); </route> <route path="poll/new/*"> - <Authorization connected-if-required="true"> + <Authorization connected-if-required="true" promise={parent.parent.session.getCanCreatePollPromise()}> <PageChanged page="newPoll"/> <EditPoll choice-type={routeArguments[0]}/> </Authorization> @@ -231,14 +230,6 @@ require("./popup/GtuChangeModal.tag.html"); <route path="signin.."> <SignInAction/> </route> - - <route path="avatar"> - <AvatarAction/> - </route> - - <route path="link"> - <LinkAction/> - </route> </router> <SignIn ref="signIn"/> </div> @@ -248,10 +239,10 @@ require("./popup/GtuChangeModal.tag.html"); <PollenMessageManager/> <script type="es6"> - let session = require("../js/Session"); - this.installBundle(session, "main"); + this.session = require("../js/Session"); + this.installBundle(this.session, "main"); - session.start(); + this.session.start(); this.pageTitle = undefined; this.onLocaleChange = () => { diff --git a/pollen-ui-riot-js/src/main/web/tag/PollenHeader.tag.html b/pollen-ui-riot-js/src/main/web/tag/PollenHeader.tag.html index 7bb263f6..145b8461 100644 --- a/pollen-ui-riot-js/src/main/web/tag/PollenHeader.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/PollenHeader.tag.html @@ -28,12 +28,12 @@ require("./components/Avatar.tag.html"); <a class="header-home instance-title" href="#" target="_top"></a> <div class="header-actions"> - <div if={ (session.configurationServer && !session.configurationServer.userConnectedRequired) || user}> + <div if={canCreatePoll}> <a class="header-link header-link--info" href="#poll/new/text" title="{__.newPoll}"> <i class="fa fa-plus"></i> <span class="action-label">{__.newPoll}</span> </a> </div> - <div class="dropdown" if="{user && user.administrator}"> + <div class="dropdown" if="{admin}"> <a class="header-link"> <i class="fa fa-wrench"/> </a> @@ -97,15 +97,22 @@ require("./components/Avatar.tag.html"); this.user = this.session.getUser(); this.admin = this.user && this.user.administrator; + this.canCreatePoll = false; this.onUserChange = user => { this.user = user; this.admin = user && user.administrator; + this.canCreatePoll = this.session.isCanCreatePoll(); this.update(); }; this.listen("user", this.onUserChange); + this.session.getCanCreatePollPromise().then(canCreatePoll => { + this.canCreatePoll = canCreatePoll; + this.update(); + }); + this.openFeedback = () => { this.refs.feedbackModal.open().then(() => { this.update(); diff --git a/pollen-ui-riot-js/src/main/web/tag/SigninAction.tag.js b/pollen-ui-riot-js/src/main/web/tag/SigninAction.tag.js index 5dbd80a5..52a6562f 100644 --- a/pollen-ui-riot-js/src/main/web/tag/SigninAction.tag.js +++ b/pollen-ui-riot-js/src/main/web/tag/SigninAction.tag.js @@ -4,24 +4,10 @@ let session = require("../js/Session"); riot.tag("signinaction", false, function() { - let q = route.query(); - if (q.loginProvider != null) { - session.signInProvider(q).then(() => { - let currentPage = localStorage.getItem("currentPage"); - localStorage.removeItem("currentPage"); - location.replace(session.pollenUIContext.uiEndPoint + "/" + currentPage); - }, (e) => { - let currentPage = localStorage.getItem("currentPage"); - localStorage.removeItem("currentPage"); - e.text().then(label => { - location.replace(session.pollenUIContext.uiEndPoint + "/" + currentPage + "?error=" + label); - }); - }); - } else { - this.bus.trigger("signIn"); - this.listen("signInClosed", () => { - this.logger.info("route to " + (q.hash || "")); - route(q.hash || ""); - }); - } + let query = route.query(); + this.bus.trigger("signIn"); + this.listen("signInClosed", () => { + this.logger.info("route to " + (query.hash || "")); + route(query.hash || ""); + }); }); diff --git a/pollen-ui-riot-js/src/main/web/tag/admin/UserCard.tag.html b/pollen-ui-riot-js/src/main/web/tag/admin/UserCard.tag.html index 76e8a22b..de2ba90f 100644 --- a/pollen-ui-riot-js/src/main/web/tag/admin/UserCard.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/admin/UserCard.tag.html @@ -8,12 +8,12 @@ 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% @@ -37,6 +37,10 @@ require("./UserEditModal.tag.html"); class="premium fa fa-star-o" aria-hidden="true" title={parent.__.premiumOf + ' ' + parent.formatDate(parent.opts.user.premiumTo, 'LL')}></i> + <i if={parent.session.configurationServer.usersCanCreatePoll === "USERS_SELECTED" && parent.opts.user.canCreatePoll} + class="poll-creator fa fa-plus success" + aria-hidden="true" + title={parent.__.pollCreator}></i> <div class="user-email" if="{parent.opts.user.defaultEmailAddress}"> <i class="fa fa-refresh" if={!parent.opts.user.emailIsValidate} title={parent.__.emailValidate}></i> {parent.opts.user.defaultEmailAddress.emailAddress} @@ -80,8 +84,8 @@ require("./UserEditModal.tag.html"); </form> <script type="es6"> - let session = require("../../js/Session"); - this.installBundle(session, "user"); + this.session = require("../../js/Session"); + this.installBundle(this.session, "user"); let userService = require("../../js/UserService"); this.editing = false; this.errors = {}; @@ -143,6 +147,12 @@ require("./UserEditModal.tag.html"); font-size: 3em; left: 105px; } + .poll-creator { + position: absolute; + top: 65px; + font-size: 3em; + left: 35px; + } </style> </UserCard> diff --git a/pollen-ui-riot-js/src/main/web/tag/admin/UserEditModal.tag.html b/pollen-ui-riot-js/src/main/web/tag/admin/UserEditModal.tag.html index f86fbe0a..77c3a77d 100644 --- a/pollen-ui-riot-js/src/main/web/tag/admin/UserEditModal.tag.html +++ b/pollen-ui-riot-js/src/main/web/tag/admin/UserEditModal.tag.html @@ -8,12 +8,12 @@ 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% @@ -81,6 +81,19 @@ require("../components/UserEmailAddressList.tag.html"); </div> </label> </div> + <div class="o-form-element" + if={parent.pollCreatorEnable}> + <label class="c-toggle c-toggle--info"> + {parent.__.pollCreator} + <input type="checkbox" + id="canCreatePoll" + ref="canCreatePoll" + checked={parent.opts.user.canCreatePoll}> + <div class="c-toggle__track"> + <div class="c-toggle__handle"></div> + </div> + </label> + </div> </div> <UserEmailAddressList class="column email-addresses" user="{parent.opts.user}" admin="{true}"/> </div> @@ -104,10 +117,9 @@ require("../components/UserEmailAddressList.tag.html"); this.save = () => { let user2 = Object.assign({}, this.opts.user); user2.name = this.refs.modal.refs.name.value; - user2.email = this.refs.modal.refs.email.value; user2.administrator = this.refs.modal.refs.administrator.checked; user2.banned = this.refs.modal.refs.banned.checked; - user2.emailIsValidate = this.refs.modal.refs.emailIsValidate.checked; + user2.canCreatePoll = this.refs.modal.refs.canCreatePoll.checked; user2.premiumTo = this.refs.modal.refs.premiumTo.getValue(); return userService.saveUser(user2).then(() => { @@ -133,6 +145,11 @@ require("../components/UserEmailAddressList.tag.html"); }); }; + session.configurationServerPromise.then(config => { + this.pollCreatorEnable = config.usersCanCreatePoll === "USERS_SELECTED"; + this.update(); + }); + </script> <style> .modal-content { -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm