diff options
author | Julius Härtl <jus@bitgrid.net> | 2018-08-16 09:38:58 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-16 09:38:58 +0200 |
commit | a4e042c7065798a76c6761031f3bebe6938fd460 (patch) | |
tree | d1712ab6a1aa9d4a9894ae0ee9eb5f1da4103ed1 | |
parent | 2b5ec3755e9522d06215c6762c3458230abd4fe3 (diff) | |
parent | c435bfe703cd2cd059e478cc381d7249038c04e6 (diff) | |
download | nextcloud-server-a4e042c7065798a76c6761031f3bebe6938fd460.tar.gz nextcloud-server-a4e042c7065798a76c6761031f3bebe6938fd460.zip |
Merge pull request #10695 from nextcloud/sharing-public-settings-fixes
Fix password enforce on public links
-rw-r--r-- | apps/files_sharing/css/sharetabview.scss | 4 | ||||
-rw-r--r-- | core/js/sharedialoglinkshareview.js | 116 |
2 files changed, 95 insertions, 25 deletions
diff --git a/apps/files_sharing/css/sharetabview.scss b/apps/files_sharing/css/sharetabview.scss index 61a310447d3..14be9562228 100644 --- a/apps/files_sharing/css/sharetabview.scss +++ b/apps/files_sharing/css/sharetabview.scss @@ -180,8 +180,8 @@ display: block; .icon-more { padding: 14px; - height: 16px; - width: 16px; + height: 44px; + width: 44px; opacity: .5; display: block; cursor: pointer; diff --git a/core/js/sharedialoglinkshareview.js b/core/js/sharedialoglinkshareview.js index 0b2fec5588e..736404e2681 100644 --- a/core/js/sharedialoglinkshareview.js +++ b/core/js/sharedialoglinkshareview.js @@ -30,9 +30,13 @@ ' <input id="linkCheckbox-{{cid}}" {{#if isLinkShare}}checked="checked"{{/if}} type="checkbox" name="linkCheckbox" class="linkCheckbox permissions checkbox">' + ' <label for="linkCheckbox-{{cid}}">{{linkShareEnableLabel}}</label>' + ' </span>' + - ' {{#if isLinkShare}}' + + ' {{#if showMenu}}' + ' <div class="share-menu" tabindex="0"><span class="icon icon-more"></span>' + - ' {{{popoverMenu}}}' + + ' {{#if showPending}}' + + ' {{{pendingPopoverMenu}}}' + + ' {{else}}' + + ' {{{popoverMenu}}}' + + ' {{/if}}' + ' </div>' + ' {{/if}}' + ' </span>' + @@ -83,7 +87,8 @@ '{{/if}}' + '{{#if showPasswordCheckBox}}' + ' <li><span class="shareOption menuitem">' + - ' <input type="checkbox" name="showPassword" id="showPassword-{{cid}}" class="checkbox showPasswordCheckbox" {{#if isPasswordSet}}checked="checked"{{/if}} value="1" />' + + ' <input type="checkbox" name="showPassword" id="showPassword-{{cid}}" class="checkbox showPasswordCheckbox"' + + ' {{#if isPasswordSet}}checked="checked"{{/if}} {{#if isPasswordEnforced}}disabled="disabled"{{/if}} value="1" />' + ' <label for="showPassword-{{cid}}">{{enablePasswordLabel}}</label>' + ' </span></li>' + ' <li class="{{#unless isPasswordSet}}hidden{{/unless}} linkPassMenu"><span class="shareOption menuitem icon-share-pass">' + @@ -92,16 +97,17 @@ ' </span></li>' + '{{/if}}' + '<li>' + - '<span class="shareOption menuitem">' + - '<input id="expireDate-{{cid}}" type="checkbox" name="expirationDate" class="expireDate checkbox" {{#if hasExpireDate}}checked="checked"{{/if}}" />' + - '<label for="expireDate-{{cid}}">{{expireDateLabel}}</label>' + + ' <span class="shareOption menuitem">' + + ' <input id="expireDate-{{cid}}" type="checkbox" name="expirationDate" class="expireDate checkbox"' + + ' {{#if hasExpireDate}}checked="checked"{{/if}} {{#if isExpirationEnforced}}disabled="disabled"{{/if}}" />' + + ' <label for="expireDate-{{cid}}">{{expireDateLabel}}</label>' + + ' </span>' + '</li>' + '<li class="{{#unless hasExpireDate}}hidden{{/unless}}">' + - '<span class="menuitem icon-expiredate expirationDateContainer-{{cid}}">' + - ' <label for="expirationDatePicker-{{cid}}" class="hidden-visually" value="{{expirationDate}}">{{expirationLabel}}</label>' + - ' <input id="expirationDatePicker-{{cid}}" class="datepicker" type="text" placeholder="{{expirationDatePlaceholder}}" value="{{#if hasExpireDate}}{{expireDate}}{{else}}{{defaultExpireDate}}{{/if}}" />' + - '</span>' + - '</span>' + + ' <span class="menuitem icon-expiredate expirationDateContainer-{{cid}}">' + + ' <label for="expirationDatePicker-{{cid}}" class="hidden-visually" value="{{expirationDate}}">{{expirationLabel}}</label>' + + ' <input id="expirationDatePicker-{{cid}}" class="datepicker" type="text" placeholder="{{expirationDatePlaceholder}}" value="{{#if hasExpireDate}}{{expireDate}}{{else}}{{defaultExpireDate}}{{/if}}" />' + + ' </span>' + '</li>' + '<li>' + '<a href="#" class="share-add"><span class="icon-loading-small hidden"></span>' + @@ -128,6 +134,23 @@ '</ul>' + '</div>'; + // popovermenu waiting for password or expiration date before saving the share + var TEMPLATE_POPOVER_MENU_PENDING = + '<div class="popovermenu pendingpopover menu">' + + '<ul>' + + '{{#if isPasswordEnforced}}' + + ' <li><span class="shareOption menuitem">' + + ' <input type="checkbox" name="showPassword" id="showPassword-{{cid}}" checked="checked" disabled class="checkbox showPasswordCheckbox" value="1" />' + + ' <label for="showPassword-{{cid}}">{{enablePasswordLabel}}</label>' + + ' </span></li>' + + ' <li class="linkPassMenu"><span class="shareOption menuitem icon-share-pass">' + + ' <input id="linkPassText-{{cid}}" class="linkPassText" type="password" placeholder="{{passwordPlaceholder}}" autocomplete="new-password" />' + + ' <span class="icon icon-loading-small hidden"></span>' + + ' </span></li>' + + '{{/if}}' + + '</ul>' + + '</div>'; + /** * @class OCA.Share.ShareDialogLinkShareView * @member {OC.Share.ShareItemModel} model @@ -151,22 +174,36 @@ /** @type {Function} **/ _popoverMenuTemplate: undefined, + /** @type {Function} **/ + _pendingPopoverMenuTemplate: undefined, + /** @type {boolean} **/ showLink: true, + /** @type {boolean} **/ + showPending: false, + events: { + // enable/disable + 'change .linkCheckbox': 'onLinkCheckBoxChange', + // open menu + 'click .share-menu .icon-more': 'onToggleMenu', + // password 'focusout input.linkPassText': 'onPasswordEntered', 'keyup input.linkPassText': 'onPasswordKeyUp', - 'click .linkCheckbox': 'onLinkCheckBoxChange', - 'click .linkText': 'onLinkTextClick', + 'change .showPasswordCheckbox': 'onShowPasswordClick', 'change .publicEditingCheckbox': 'onAllowPublicEditingChange', - 'click .showPasswordCheckbox': 'onShowPasswordClick', - 'click .share-menu .icon-more': 'onToggleMenu', + // copy link url + 'click .linkText': 'onLinkTextClick', + // social 'click .pop-up': 'onPopUpClick', + // permission change 'change .publicUploadRadio': 'onPublicUploadChange', + // expire date 'click .expireDate' : 'onExpireDateChange', 'change .datepicker': 'onChangeExpirationDate', 'click .datepicker' : 'showDatePicker', + // note 'click .share-add': 'showNoteForm', 'click .share-note-delete': 'deleteNote', 'click .share-note-submit': 'updateNote' @@ -253,20 +290,26 @@ } if($checkBox.is(':checked')) { - if(this.configModel.get('enforcePasswordForPublicLink') === false && this.configModel.get('enableLinkPasswordByDefault') === false) { + if(this.configModel.get('enforcePasswordForPublicLink') === false) { $loading.removeClass('hidden'); // this will create it this.model.saveLinkShare(); + $('.share-menu .icon-more').click(); + $('.share-menu .icon-more + .popovermenu .clipboardButton').click(); } else { - this.$el.find('.linkPass').slideToggle(OC.menuSpeed); - this.$el.find('.linkPassText').focus(); + // force the rendering of the menu + this.showPending = true; + this.render() + $('.share-menu .icon-more').click(); + $('.share-menu .icon-more + .popovermenu input:eq(1)').focus() } } else { if (this.model.get('linkShare').isLinkShare) { $loading.removeClass('hidden'); this.model.removeLinkShare(); } else { - this.$el.find('.linkPass').slideToggle(OC.menuSpeed); + this.showPending = false; + this.render() } } }, @@ -388,8 +431,7 @@ var shareId = $li.data('share-id'); var $menu = $element.closest('li'); var $form = $menu.next('li.share-note-form'); - - console.log($form.find('.share-note')); + $form.find('.share-note').val(''); $form.addClass('hidden'); @@ -492,6 +534,8 @@ var isLinkShare = this.model.get('linkShare').isLinkShare; var isPasswordSet = !!this.model.get('linkShare').password; + var isPasswordEnforced = this.configModel.get('enforcePasswordForPublicLink') + var isPasswordEnabledByDefault = this.configModel.get('enableLinkPasswordByDefault') === true var showPasswordCheckBox = isLinkShare && ( !this.configModel.get('enforcePasswordForPublicLink') || !this.model.get('linkShare').password); @@ -565,7 +609,7 @@ passwordLabel: t('core', 'Password'), passwordPlaceholder: isPasswordSet ? PASSWORD_PLACEHOLDER : PASSWORD_PLACEHOLDER_MESSAGE, passwordPlaceholderInitial: passwordPlaceholderInitial, - isPasswordSet: isPasswordSet, + isPasswordSet: isPasswordSet || isPasswordEnabledByDefault || isPasswordEnforced, showPasswordCheckBox: showPasswordCheckBox, publicUpload: publicUpload && isLinkShare, publicEditing: publicEditable, @@ -587,12 +631,23 @@ expirationDatePlaceholder: t('core', 'Expiration date'), hasExpireDate: hasExpireDate, isExpirationEnforced: isExpirationEnforced, + isPasswordEnforced: isPasswordEnforced, expireDate: expireDate, defaultExpireDate: moment().add(1, 'day').format('DD-MM-YYYY'), // Can't expire today shareNote: this.model.get('linkShare').note, addNoteLabel: t('core', 'Note to recipient'), }); + var pendingPopover = this.pendingPopoverMenuTemplate({ + cid: this.model.get('linkShare').id, + enablePasswordLabel: t('core', 'Password protect'), + passwordLabel: t('core', 'Password'), + passwordPlaceholder: isPasswordSet ? PASSWORD_PLACEHOLDER : PASSWORD_PLACEHOLDER_MESSAGE, + passwordPlaceholderInitial: passwordPlaceholderInitial, + showPasswordCheckBox: showPasswordCheckBox, + isPasswordEnforced: isPasswordEnforced, + }); + this.$el.html(linkShareTemplate({ cid: this.model.get('linkShare').id, shareAllowed: true, @@ -600,6 +655,9 @@ linkShareLabel: t('core', 'Share link'), linkShareEnableLabel: t('core', 'Enable'), popoverMenu: popover, + pendingPopoverMenu: pendingPopover, + showMenu: isLinkShare || this.showPending, + showPending: this.showPending && !isLinkShare })); this.delegateEvents(); @@ -645,6 +703,19 @@ return this._popoverMenuTemplate(data); }, + /** + * renders the pending popover template and returns the resulting HTML + * + * @param {Object} data + * @returns {string} + */ + pendingPopoverMenuTemplate: function(data) { + if(!this._pendingPopoverMenuTemplate) { + this._pendingPopoverMenuTemplate = Handlebars.compile(TEMPLATE_POPOVER_MENU_PENDING); + } + return this._pendingPopoverMenuTemplate(data); + }, + onPopUpClick: function(event) { event.preventDefault(); event.stopPropagation(); @@ -701,7 +772,6 @@ self.setExpirationDate(expireDate); } }); - console.log(event, $(expirationDatePicker)); $(expirationDatePicker).datepicker('show'); $(expirationDatePicker).focus(); |