Merge pull request #7635 from Abijeet/bug-7106

Fixes password input being prompted every time.
This commit is contained in:
Roeland Jago Douma 2018-01-10 20:10:40 +01:00 committed by GitHub
commit 03a7d9bbfa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 67 additions and 2 deletions

View File

@ -1675,13 +1675,16 @@ function initCore() {
OC.PasswordConfirmation = {
callback: null,
pageLoadTime: null,
init: function() {
$('.password-confirm-required').on('click', _.bind(this.requirePasswordConfirmation, this));
this.pageLoadTime = moment.now();
},
requiresPasswordConfirmation: function() {
var timeSinceLogin = moment.now() - (nc_lastLogin * 1000);
var serverTimeDiff = this.pageLoadTime - (nc_pageLoad * 1000);
var timeSinceLogin = moment.now() - (serverTimeDiff + (nc_lastLogin * 1000));
// if timeSinceLogin > 30 minutes and user backend allows password confirmation
return (backendAllowsPasswordConfirmation && timeSinceLogin > 30 * 60 * 1000);
},

View File

@ -1539,4 +1539,65 @@ describe('Core base tests', function() {
expect(snapperStub.close.calledTwice).toBe(true);
});
});
describe('Requires password confirmation', function () {
var stubMomentNow;
var stubJsPageLoadTime;
afterEach(function () {
delete window.nc_pageLoad;
delete window.nc_lastLogin;
delete window.backendAllowsPasswordConfirmation;
stubMomentNow.restore();
stubJsPageLoadTime.restore();
});
it('should not show the password confirmation dialog when server time is earlier than local time', function () {
// add server variables
window.nc_pageLoad = parseInt(new Date(2018, 0, 3, 1, 15, 0).getTime() / 1000);
window.nc_lastLogin = parseInt(new Date(2018, 0, 3, 1, 0, 0).getTime() / 1000);
window.backendAllowsPasswordConfirmation = true;
stubJsPageLoadTime = sinon.stub(OC.PasswordConfirmation, 'pageLoadTime').value(new Date(2018, 0, 3, 12, 15, 0).getTime());
stubMomentNow = sinon.stub(moment, 'now').returns(new Date(2018, 0, 3, 12, 20, 0).getTime());
expect(OC.PasswordConfirmation.requiresPasswordConfirmation()).toBeFalsy();
});
it('should show the password confirmation dialog when server time is earlier than local time', function () {
// add server variables
window.nc_pageLoad = parseInt(new Date(2018, 0, 3, 1, 15, 0).getTime() / 1000);
window.nc_lastLogin = parseInt(new Date(2018, 0, 3, 1, 0, 0).getTime() / 1000);
window.backendAllowsPasswordConfirmation = true;
stubJsPageLoadTime = sinon.stub(OC.PasswordConfirmation, 'pageLoadTime').value(new Date(2018, 0, 3, 12, 15, 0).getTime());
stubMomentNow = sinon.stub(moment, 'now').returns(new Date(2018, 0, 3, 12, 31, 0).getTime());
expect(OC.PasswordConfirmation.requiresPasswordConfirmation()).toBeTruthy();
});
it('should not show the password confirmation dialog when server time is later than local time', function () {
// add server variables
window.nc_pageLoad = parseInt(new Date(2018, 0, 3, 23, 15, 0).getTime() / 1000);
window.nc_lastLogin = parseInt(new Date(2018, 0, 3, 23, 0, 0).getTime() / 1000);
window.backendAllowsPasswordConfirmation = true;
stubJsPageLoadTime = sinon.stub(OC.PasswordConfirmation, 'pageLoadTime').value(new Date(2018, 0, 3, 12, 15, 0).getTime());
stubMomentNow = sinon.stub(moment, 'now').returns(new Date(2018, 0, 3, 12, 20, 0).getTime());
expect(OC.PasswordConfirmation.requiresPasswordConfirmation()).toBeFalsy();
});
it('should show the password confirmation dialog when server time is later than local time', function () {
// add server variables
window.nc_pageLoad = parseInt(new Date(2018, 0, 3, 23, 15, 0).getTime() / 1000);
window.nc_lastLogin = parseInt(new Date(2018, 0, 3, 23, 0, 0).getTime() / 1000);
window.backendAllowsPasswordConfirmation = true;
stubJsPageLoadTime = sinon.stub(OC.PasswordConfirmation, 'pageLoadTime').value(new Date(2018, 0, 3, 12, 15, 0).getTime());
stubMomentNow = sinon.stub(moment, 'now').returns(new Date(2018, 0, 3, 12, 31, 0).getTime());
expect(OC.PasswordConfirmation.requiresPasswordConfirmation()).toBeTruthy();
});
});
});

View File

@ -155,6 +155,7 @@ class JSConfigHelper {
"oc_appswebroots" => str_replace('\\/', '/', json_encode($apps_paths)), // Ugly unescape slashes waiting for better solution
"datepickerFormatDate" => json_encode($this->l->l('jsdate', null)),
'nc_lastLogin' => $lastConfirmTimestamp,
'nc_pageLoad' => time(),
"dayNames" => json_encode([
(string)$this->l->t('Sunday'),
(string)$this->l->t('Monday'),