From a3fe5869d484933ec163fdd7a562d9712946f940 Mon Sep 17 00:00:00 2001 From: Dani Palou Date: Tue, 18 Dec 2018 11:38:46 +0100 Subject: [PATCH] MOBILE-2794 login: Don't trigger login event if logged out --- src/core/login/pages/init/init.ts | 6 ++++-- src/core/login/pages/sites/sites.ts | 4 ++-- src/core/login/providers/helper.ts | 4 ++-- src/providers/sites.ts | 27 +++++++++++++++++++++------ upgrade.txt | 1 + 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/core/login/pages/init/init.ts b/src/core/login/pages/init/init.ts index 9d58eb521..45fb36760 100644 --- a/src/core/login/pages/init/init.ts +++ b/src/core/login/pages/init/init.ts @@ -51,8 +51,10 @@ export class CoreLoginInitPage { if (Date.now() - redirectData.timemodified < 20000) { if (redirectData.siteId != CoreConstants.NO_SITE_ID) { // The redirect is pointing to a site, load it. - return this.sitesProvider.loadSite(redirectData.siteId).then(() => { - if (!this.loginHelper.isSiteLoggedOut(redirectData.page, redirectData.params)) { + return this.sitesProvider.loadSite(redirectData.siteId, redirectData.page, redirectData.params) + .then((loggedIn) => { + + if (loggedIn) { return this.navCtrl.setRoot(redirectData.page, redirectData.params, { animate: false }); } }).catch(() => { diff --git a/src/core/login/pages/sites/sites.ts b/src/core/login/pages/sites/sites.ts index a1706e522..7140382d6 100644 --- a/src/core/login/pages/sites/sites.ts +++ b/src/core/login/pages/sites/sites.ts @@ -113,8 +113,8 @@ export class CoreLoginSitesPage { login(siteId: string): void { const modal = this.domUtils.showModalLoading(); - this.sitesProvider.loadSite(siteId).then(() => { - if (!this.loginHelper.isSiteLoggedOut()) { + this.sitesProvider.loadSite(siteId).then((loggedIn) => { + if (loggedIn) { return this.loginHelper.goToSiteInitialPage(); } }).catch((error) => { diff --git a/src/core/login/providers/helper.ts b/src/core/login/providers/helper.ts index 8590c8d04..f254071dc 100644 --- a/src/core/login/providers/helper.ts +++ b/src/core/login/providers/helper.ts @@ -591,8 +591,8 @@ export class CoreLoginHelperProvider { this.appProvider.getRootNavController().setRoot(page, params); } else { const modal = this.domUtils.showModalLoading(); - this.sitesProvider.loadSite(siteId).then(() => { - if (!this.isSiteLoggedOut(page, params)) { + this.sitesProvider.loadSite(siteId, page, params).then((loggedIn) => { + if (loggedIn) { this.loadPageInMainMenu(page, params); } }).catch(() => { diff --git a/src/providers/sites.ts b/src/providers/sites.ts index 29a0941f2..b08fc0fd9 100644 --- a/src/providers/sites.ts +++ b/src/providers/sites.ts @@ -665,27 +665,42 @@ export class CoreSitesProvider { * Login a user to a site from the list of sites. * * @param {string} siteId ID of the site to load. - * @return {Promise} Promise to be resolved when the site is loaded. + * @param {string} [pageName] Name of the page to go once authenticated if logged out. If not defined, site initial page. + * @param {any} [params] Params of the page to go once authenticated if logged out. + * @return {Promise} Promise resolved with true if site is loaded, resolved with false if cannot login. */ - loadSite(siteId: string): Promise { + loadSite(siteId: string, pageName?: string, params?: any): Promise { this.logger.debug(`Load site ${siteId}`); return this.getSite(siteId).then((site) => { this.currentSite = site; - this.login(siteId); if (site.isLoggedOut()) { - // Logged out, nothing else to do. - return; + // Logged out, trigger session expired event and stop. + this.eventsProvider.trigger(CoreEventsProvider.SESSION_EXPIRED, { + pageName: pageName, + params: params + }, site.getId()); + + return false; } // Check if local_mobile was installed to Moodle. return site.checkIfLocalMobileInstalledAndNotUsed().then(() => { // Local mobile was added. Throw invalid session to force reconnect and create a new token. - this.eventsProvider.trigger(CoreEventsProvider.SESSION_EXPIRED, {}, siteId); + this.eventsProvider.trigger(CoreEventsProvider.SESSION_EXPIRED, { + pageName: pageName, + params: params + }, siteId); + + return false; }, () => { + this.login(siteId); + // Update site info. We don't block the UI. this.updateSiteInfo(siteId); + + return true; }); }); } diff --git a/upgrade.txt b/upgrade.txt index f1967911a..1a0b363c3 100644 --- a/upgrade.txt +++ b/upgrade.txt @@ -7,6 +7,7 @@ information provided here is intended especially for developers. It's also recommended to update ionic cli to v4, otherwise some errors could be raised while building: npm install -g ionic - The value of the constant CoreCourseProvider.ALL_SECTIONS_ID has changed from -1 to -2. - Use of completionstatus on the module object has been deprecated, use completiondata instead. +- The function CoreSitesProvider.loadSite has changed, now it will trigger SESSION_EXPIRED event if the site is logged out. Its params and return value have changed. - The following strings have been deprecated: core.dfdaymonthyear. Please use core.strftimedatefullshort instead. core.dfdayweekmonth. Please use core.strftimedayshort instead.