MOBILE-3819 core: Remove local_mobile support
This commit is contained in:
		
							parent
							
								
									68e57c0f17
								
							
						
					
					
						commit
						705f7ce92d
					
				| @ -62,7 +62,6 @@ | ||||
|         "zh-tw": "正體中文" | ||||
|     }, | ||||
|     "wsservice": "moodle_mobile_app", | ||||
|     "wsextservice": "local_mobile", | ||||
|     "demo_sites": { | ||||
|         "student": { | ||||
|             "url": "https:\/\/school.moodledemo.net", | ||||
|  | ||||
| @ -1851,7 +1851,6 @@ | ||||
|   "core.login.invalidurl": "scorm", | ||||
|   "core.login.invalidvaluemax": "local_moodlemobileapp", | ||||
|   "core.login.invalidvaluemin": "local_moodlemobileapp", | ||||
|   "core.login.localmobileunexpectedresponse": "local_moodlemobileapp", | ||||
|   "core.login.loggedoutssodescription": "local_moodlemobileapp", | ||||
|   "core.login.login": "moodle", | ||||
|   "core.login.loginbutton": "local_moodlemobileapp", | ||||
|  | ||||
| @ -485,9 +485,6 @@ export class CoreSite { | ||||
|      * | ||||
|      * Caching is also implemented, when enabled this method will returned a cached version of the request if the | ||||
|      * data hasn't expired. | ||||
|      * | ||||
|      * This method is smart which means that it will try to map the method to a compatibility one if need be, usually this | ||||
|      * means that it will fallback on the 'local_mobile_' prefixed function if it is available and the non-prefixed is not. | ||||
|      */ | ||||
|     // eslint-disable-next-line @typescript-eslint/no-explicit-any
 | ||||
|     async request<T = unknown>(method: string, data: any, preSets: CoreSiteWSPreSets, retrying?: boolean): Promise<T> { | ||||
| @ -505,18 +502,12 @@ export class CoreSite { | ||||
|             throw new CoreError(Translate.instant('core.errorofflinedisabled')); | ||||
|         } | ||||
| 
 | ||||
|         // Check if the method is available, use a prefixed version if possible.
 | ||||
|         // Check if the method is available.
 | ||||
|         // We ignore this check when we do not have the site info, as the list of functions is not loaded yet.
 | ||||
|         if (this.getInfo() && !this.wsAvailable(method, false)) { | ||||
|             const compatibilityMethod = CoreConstants.WS_PREFIX + method; | ||||
|             if (this.wsAvailable(compatibilityMethod, false)) { | ||||
|                 this.logger.info(`Using compatibility WS method '${compatibilityMethod}'`); | ||||
|                 method = compatibilityMethod; | ||||
|             } else { | ||||
|                 this.logger.error(`WS function '${method}' is not available, even in compatibility mode.`); | ||||
|         if (this.getInfo() && !this.wsAvailable(method)) { | ||||
|             this.logger.error(`WS function '${method}' is not available.`); | ||||
| 
 | ||||
|                 throw new CoreError(Translate.instant('core.wsfunctionnotavailable')); | ||||
|             } | ||||
|             throw new CoreError(Translate.instant('core.wsfunctionnotavailable')); | ||||
|         } | ||||
| 
 | ||||
|         const wsPreSets: CoreWSPreSets = { | ||||
| @ -860,24 +851,10 @@ export class CoreSite { | ||||
|      * Check if a WS is available in this site. | ||||
|      * | ||||
|      * @param method WS name. | ||||
|      * @param checkPrefix When true also checks with the compatibility prefix. | ||||
|      * @return Whether the WS is available. | ||||
|      */ | ||||
|     wsAvailable(method: string, checkPrefix: boolean = true): boolean { | ||||
|         if (typeof this.infos == 'undefined') { | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         if (this.infos?.functionsByName?.[method]) { | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|         // Let's try again with the compatibility prefix.
 | ||||
|         if (checkPrefix) { | ||||
|             return this.wsAvailable(CoreConstants.WS_PREFIX + method, false); | ||||
|         } | ||||
| 
 | ||||
|         return false; | ||||
|     wsAvailable(method: string): boolean { | ||||
|         return !!this.infos?.functionsByName?.[method]; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -1301,112 +1278,32 @@ export class CoreSite { | ||||
|     /** | ||||
|      * Check if the local_mobile plugin is installed in the Moodle site. | ||||
|      * | ||||
|      * @param retrying True if we're retrying the check. | ||||
|      * @return Promise resolved when the check is done. | ||||
|      * @deprecated since app 4.0 | ||||
|      */ | ||||
|     async checkLocalMobilePlugin(retrying?: boolean): Promise<LocalMobileResponse> { | ||||
|         const checkUrl = this.siteUrl + '/local/mobile/check.php'; | ||||
|         const service = CoreConstants.CONFIG.wsextservice; | ||||
| 
 | ||||
|         if (!service) { | ||||
|             // External service not defined.
 | ||||
|             return { code: 0 }; | ||||
|         } | ||||
| 
 | ||||
|         let data; | ||||
| 
 | ||||
|         try { | ||||
|             const response = await CoreWS.sendHTTPRequest(checkUrl, { | ||||
|                 method: 'post', | ||||
|                 data: { service }, | ||||
|             }); | ||||
| 
 | ||||
|             data = response.body; | ||||
|         } catch (ex) { | ||||
|             return { code: 0 }; | ||||
|         } | ||||
| 
 | ||||
|         if (data === null) { | ||||
|             // This probably means that the server was configured to return null for non-existing URLs. Not installed.
 | ||||
|             return { code: 0 }; | ||||
|         } | ||||
| 
 | ||||
|         if (typeof data != 'undefined' && data.errorcode === 'requirecorrectaccess') { | ||||
|             if (!retrying) { | ||||
|                 this.siteUrl = CoreUrlUtils.addOrRemoveWWW(this.siteUrl); | ||||
| 
 | ||||
|                 return this.checkLocalMobilePlugin(true); | ||||
|             } else { | ||||
|                 throw new CoreWSError(data); | ||||
|             } | ||||
|         } else if (typeof data == 'undefined' || typeof data.code == 'undefined') { | ||||
|             // The local_mobile returned something we didn't expect. Let's assume it's not installed.
 | ||||
|             return { code: 0, warning: 'core.login.localmobileunexpectedresponse' }; | ||||
|         } | ||||
| 
 | ||||
|         const code = parseInt(data.code, 10); | ||||
|         if (data.error) { | ||||
|             switch (code) { | ||||
|                 case 1: | ||||
|                     // Site in maintenance mode.
 | ||||
|                     throw new CoreError(Translate.instant('core.login.siteinmaintenance')); | ||||
|                 case 2: | ||||
|                     // Web services not enabled.
 | ||||
|                     throw new CoreError(Translate.instant('core.login.webservicesnotenabled')); | ||||
|                 case 3: | ||||
|                     // Extended service not enabled, but the official is enabled.
 | ||||
|                     return { code: 0 }; | ||||
|                 case 4: | ||||
|                     // Neither extended or official services enabled.
 | ||||
|                     throw new CoreError(Translate.instant('core.login.mobileservicesnotenabled')); | ||||
|                 default: | ||||
|                     throw new CoreError(Translate.instant('core.unexpectederror')); | ||||
|             } | ||||
|         } else { | ||||
|             return { code, service, coreSupported: !!data.coresupported }; | ||||
|         } | ||||
|     async checkLocalMobilePlugin(): Promise<LocalMobileResponse> { | ||||
|         // Not used anymore.
 | ||||
|         return { code: 0, coreSupported: true }; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Check if local_mobile has been installed in Moodle. | ||||
|      * | ||||
|      * @return Whether the App is able to use local_mobile plugin for this site. | ||||
|      * @deprecated since app 4.0 | ||||
|      */ | ||||
|     checkIfAppUsesLocalMobile(): boolean { | ||||
|         let appUsesLocalMobile = false; | ||||
| 
 | ||||
|         if (!this.infos || !this.infos.functions) { | ||||
|             return appUsesLocalMobile; | ||||
|         } | ||||
| 
 | ||||
|         this.infos.functions.forEach((func) => { | ||||
|             if (func.name.indexOf(CoreConstants.WS_PREFIX) != -1) { | ||||
|                 appUsesLocalMobile = true; | ||||
|             } | ||||
|         }); | ||||
| 
 | ||||
|         return appUsesLocalMobile; | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Check if local_mobile has been installed in Moodle but the app is not using it. | ||||
|      * | ||||
|      * @return Promise resolved it local_mobile was added, rejected otherwise. | ||||
|      * @deprecated since app 4.0 | ||||
|      */ | ||||
|     async checkIfLocalMobileInstalledAndNotUsed(): Promise<void> { | ||||
|         const appUsesLocalMobile = this.checkIfAppUsesLocalMobile(); | ||||
| 
 | ||||
|         if (appUsesLocalMobile) { | ||||
|             // App already uses local_mobile, it wasn't added.
 | ||||
|             throw new CoreError('Already used.'); | ||||
|         } | ||||
| 
 | ||||
|         const data = await this.checkLocalMobilePlugin(); | ||||
| 
 | ||||
|         if (typeof data.service == 'undefined') { | ||||
|             // The local_mobile NOT installed. Reject.
 | ||||
|             throw new CoreError('Not installed.'); | ||||
|         } | ||||
|         throw new CoreError('Deprecated.'); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -2078,6 +1975,8 @@ export type CoreSiteWSPreSets = { | ||||
| 
 | ||||
| /** | ||||
|  * Response of checking local_mobile status. | ||||
|  * | ||||
|  * @deprecated since app 4.0 | ||||
|  */ | ||||
| export type LocalMobileResponse = { | ||||
|     /** | ||||
|  | ||||
| @ -68,7 +68,7 @@ export class CoreConstants { | ||||
|     // WS constants.
 | ||||
|     static readonly WS_TIMEOUT = 30000; // Timeout when not in WiFi.
 | ||||
|     static readonly WS_TIMEOUT_WIFI = 30000; // Timeout when in WiFi.
 | ||||
|     static readonly WS_PREFIX = 'local_mobile_'; | ||||
|     static readonly WS_PREFIX = 'local_mobile_'; // @deprecated since app 4.0.
 | ||||
| 
 | ||||
|     // Login constants.
 | ||||
|     static readonly LOGIN_SSO_CODE = 2; // SSO in browser window is required.
 | ||||
|  | ||||
| @ -56,7 +56,6 @@ | ||||
|     "invalidurl": "Invalid URL specified", | ||||
|     "invalidvaluemax": "The maximum value is {{$a}}", | ||||
|     "invalidvaluemin": "The minimum value is {{$a}}", | ||||
|     "localmobileunexpectedresponse": "Moodle Mobile Additional Features check returned an unexpected response. You will be authenticated using the standard mobile service.", | ||||
|     "loggedoutssodescription": "You have to authenticate again. You need to log in to the site in a browser window.", | ||||
|     "login": "Log in", | ||||
|     "loginbutton": "Log in", | ||||
|  | ||||
| @ -124,7 +124,7 @@ export class CoreLoginCredentialsPage implements OnInit, OnDestroy { | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Check if a site uses local_mobile, requires SSO login, etc. | ||||
|      * Get site config and check if it requires SSO login. | ||||
|      * This should be used only if a fixed URL is set, otherwise this check is already performed in CoreLoginSitePage. | ||||
|      * | ||||
|      * @param siteUrl Site URL to check. | ||||
| @ -145,10 +145,6 @@ export class CoreLoginCredentialsPage implements OnInit, OnDestroy { | ||||
|             this.siteConfig = result.config; | ||||
|             this.treatSiteConfig(); | ||||
| 
 | ||||
|             if (result && result.warning) { | ||||
|                 CoreDomUtils.showErrorModal(result.warning, true, 4000); | ||||
|             } | ||||
| 
 | ||||
|             if (CoreLoginHelper.isSSOLoginNeeded(result.code)) { | ||||
|                 // SSO. User needs to authenticate in a browser.
 | ||||
|                 this.isBrowserSSO = true; | ||||
|  | ||||
| @ -310,8 +310,7 @@ export class CoreLoginEmailSignupPage implements OnInit { | ||||
|         }; | ||||
| 
 | ||||
|         if (this.siteConfig?.launchurl) { | ||||
|             const service = CoreSites.determineService(this.siteUrl); | ||||
|             params.redirect = CoreLoginHelper.prepareForSSOLogin(this.siteUrl, service, this.siteConfig.launchurl); | ||||
|             params.redirect = CoreLoginHelper.prepareForSSOLogin(this.siteUrl, undefined, this.siteConfig.launchurl); | ||||
|         } | ||||
| 
 | ||||
|         // Get the recaptcha response (if needed).
 | ||||
|  | ||||
| @ -339,10 +339,6 @@ export class CoreLoginSitePage implements OnInit { | ||||
| 
 | ||||
|             CoreForms.triggerFormSubmittedEvent(this.formElement, true); | ||||
| 
 | ||||
|             if (response.warning) { | ||||
|                 CoreDomUtils.showErrorModal(response.warning, true, 4000); | ||||
|             } | ||||
| 
 | ||||
|             if (CoreLoginHelper.isSSOLoginNeeded(response.code)) { | ||||
|                 // SSO. User needs to authenticate in a browser.
 | ||||
|                 CoreLoginHelper.confirmAndOpenBrowserForSSOLogin( | ||||
|  | ||||
| @ -128,8 +128,8 @@ export class CoreLoginHelperProvider { | ||||
|      * | ||||
|      * @param siteurl URL of the site where the SSO login will be performed. | ||||
|      * @param typeOfLogin CoreConstants.LOGIN_SSO_CODE or CoreConstants.LOGIN_SSO_INAPP_CODE. | ||||
|      * @param service The service to use. If not defined, external service will be used. | ||||
|      * @param launchUrl The URL to open for SSO. If not defined, local_mobile launch URL will be used. | ||||
|      * @param service The service to use. If not defined, core service will be used. | ||||
|      * @param launchUrl The URL to open for SSO. If not defined, default tool mobile launch URL will be used. | ||||
|      * @return Promise resolved when done or if user cancelled. | ||||
|      */ | ||||
|     async confirmAndOpenBrowserForSSOLogin( | ||||
| @ -655,8 +655,7 @@ export class CoreLoginHelperProvider { | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         const service = CoreSites.determineService(siteUrl); | ||||
|         const loginUrl = this.prepareForSSOLogin(siteUrl, service, launchUrl, pageName, pageOptions, { | ||||
|         const loginUrl = this.prepareForSSOLogin(siteUrl, undefined, launchUrl, pageName, pageOptions, { | ||||
|             oauthsso: params.id, | ||||
|         }); | ||||
| 
 | ||||
| @ -672,8 +671,8 @@ export class CoreLoginHelperProvider { | ||||
|      * | ||||
|      * @param siteurl URL of the site where the SSO login will be performed. | ||||
|      * @param typeOfLogin CoreConstants.LOGIN_SSO_CODE or CoreConstants.LOGIN_SSO_INAPP_CODE. | ||||
|      * @param service The service to use. If not defined, external service will be used. | ||||
|      * @param launchUrl The URL to open for SSO. If not defined, local_mobile launch URL will be used. | ||||
|      * @param service The service to use. If not defined, core service will be used. | ||||
|      * @param launchUrl The URL to open for SSO. If not defined, default tool mobile launch URL will be used. | ||||
|      * @param pageName Name of the page to go once authenticated. If not defined, site initial page. | ||||
|      * @param pageOptions Options of the state to go once authenticated. | ||||
|      */ | ||||
| @ -790,8 +789,8 @@ export class CoreLoginHelperProvider { | ||||
|      * Prepare the app to perform SSO login. | ||||
|      * | ||||
|      * @param siteUrl URL of the site where the SSO login will be performed. | ||||
|      * @param service The service to use. If not defined, external service will be used. | ||||
|      * @param launchUrl The URL to open for SSO. If not defined, local_mobile launch URL will be used. | ||||
|      * @param service The service to use. If not defined, core service will be used. | ||||
|      * @param launchUrl The URL to open for SSO. If not defined, default tool mobile launch URL will be used. | ||||
|      * @param pageName Name of the page to go once authenticated. If not defined, site initial page. | ||||
|      * @param pageOptions Options of the page to go once authenticated. | ||||
|      * @param urlParams Other params to add to the URL. | ||||
| @ -806,8 +805,8 @@ export class CoreLoginHelperProvider { | ||||
|         urlParams?: CoreUrlParams, | ||||
|     ): string { | ||||
| 
 | ||||
|         service = service || CoreConstants.CONFIG.wsextservice; | ||||
|         launchUrl = launchUrl || siteUrl + '/local/mobile/launch.php'; | ||||
|         service = service || CoreConstants.CONFIG.wsservice; | ||||
|         launchUrl = launchUrl || siteUrl + '/admin/tool/mobile/launch.php'; | ||||
| 
 | ||||
|         const passport = Math.random() * 1000; | ||||
|         let loginUrl = launchUrl + '?service=' + service; | ||||
| @ -896,10 +895,6 @@ export class CoreLoginHelperProvider { | ||||
|             // Check authentication method.
 | ||||
|             const result = await CoreSites.checkSite(siteUrl); | ||||
| 
 | ||||
|             if (result.warning) { | ||||
|                 CoreDomUtils.showErrorModal(result.warning, true, 4000); | ||||
|             } | ||||
| 
 | ||||
|             if (this.isSSOLoginNeeded(result.code)) { | ||||
|                 // SSO. User needs to authenticate in a browser. Check if we need to display a message.
 | ||||
|                 if (!CoreApp.isSSOAuthenticationOngoing() && !this.waitingForBrowser) { | ||||
|  | ||||
| @ -267,7 +267,6 @@ export class CoreSettingsHelperProvider { | ||||
|             CoreUtils.ignoreErrors(CoreFilepool.invalidateAllFiles(siteId)), | ||||
|             // Invalidate and synchronize site data.
 | ||||
|             site.invalidateWsCache(), | ||||
|             this.checkSiteLocalMobile(site), | ||||
|             CoreSites.updateSiteInfo(site.getId()), | ||||
|             CoreCronDelegate.forceSyncExecution(site.getId()), | ||||
|         // eslint-disable-next-line arrow-body-style
 | ||||
| @ -284,27 +283,6 @@ export class CoreSettingsHelperProvider { | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Check if local_mobile was added to the site. | ||||
|      * | ||||
|      * @param site Site to check. | ||||
|      * @return Promise resolved if no action needed. | ||||
|      */ | ||||
|     protected async checkSiteLocalMobile(site: CoreSite): Promise<void> { | ||||
|         try { | ||||
|             // Check if local_mobile was installed in Moodle.
 | ||||
|             await site.checkIfLocalMobileInstalledAndNotUsed(); | ||||
|         } catch { | ||||
|             // Not added, nothing to do.
 | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         // Local mobile was added. Throw invalid session to force reconnect and create a new token.
 | ||||
|         CoreEvents.trigger(CoreEvents.SESSION_EXPIRED, {}, site.getId()); | ||||
| 
 | ||||
|         throw new CoreError(Translate.instant('core.lostconnection')); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Upgrades from Font size to new zoom level. | ||||
|      */ | ||||
|  | ||||
| @ -27,7 +27,6 @@ import { CoreConstants } from '@/core/constants'; | ||||
| import { | ||||
|     CoreSite, | ||||
|     CoreSiteWSPreSets, | ||||
|     LocalMobileResponse, | ||||
|     CoreSiteInfo, | ||||
|     CoreSiteConfig, | ||||
|     CoreSitePublicConfigResponse, | ||||
| @ -73,7 +72,6 @@ export class CoreSitesProvider { | ||||
|     protected static readonly INVALID_VERSION = -1; | ||||
| 
 | ||||
|     protected logger: CoreLogger; | ||||
|     protected services = {}; | ||||
|     protected sessionRestored = false; | ||||
|     protected currentSite?: CoreSite; | ||||
|     protected sites: { [s: string]: CoreSite } = {}; | ||||
| @ -182,8 +180,6 @@ export class CoreSitesProvider { | ||||
|      * @return A promise resolved when the site is checked. | ||||
|      */ | ||||
|     async checkSiteWithProtocol(siteUrl: string, protocol: string): Promise<CoreSiteCheckResponse> { | ||||
|         let publicConfig: CoreSitePublicConfigResponse | undefined; | ||||
| 
 | ||||
|         // Now, replace the siteUrl with the protocol.
 | ||||
|         siteUrl = siteUrl.replace(/^https?:\/\//i, protocol); | ||||
| 
 | ||||
| @ -222,82 +218,59 @@ export class CoreSitesProvider { | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         // Site exists. Create a temporary site to check if local_mobile is installed.
 | ||||
|         // Site exists. Create a temporary site to fetch its info.
 | ||||
|         const temporarySite = CoreSitesFactory.makeSite(undefined, siteUrl); | ||||
|         let data: LocalMobileResponse; | ||||
|         let config: CoreSitePublicConfigResponse | undefined; | ||||
| 
 | ||||
|         try { | ||||
|             data = await temporarySite.checkLocalMobilePlugin(); | ||||
|             config = await temporarySite.getPublicConfig(); | ||||
| 
 | ||||
|             // Check that the user can authenticate.
 | ||||
|             if (!config.enablewebservices) { | ||||
|                 throw new CoreSiteError({ | ||||
|                     message: Translate.instant('core.login.webservicesnotenabled'), | ||||
|                 }); | ||||
|             } else if (!config.enablemobilewebservice) { | ||||
|                 throw new CoreSiteError({ | ||||
|                     message: Translate.instant('core.login.mobileservicesnotenabled'), | ||||
|                 }); | ||||
|             } else if (config.maintenanceenabled) { | ||||
|                 let message = Translate.instant('core.sitemaintenance'); | ||||
|                 if (config.maintenancemessage) { | ||||
|                     message += config.maintenancemessage; | ||||
|                 } | ||||
| 
 | ||||
|                 throw new CoreSiteError({ | ||||
|                     message, | ||||
|                 }); | ||||
|             } | ||||
|         } catch (error) { | ||||
|             // Local mobile check returned an error. This only happens if the plugin is installed and it returns an error.
 | ||||
|             throw new CoreSiteError({ | ||||
|                 message: error.message, | ||||
|                 critical: true, | ||||
|             }); | ||||
|         } | ||||
|             // Error, check if not supported.
 | ||||
|             if (error.available === 1) { | ||||
|                 // Service supported but an error happened. Return error.
 | ||||
|                 if (error.errorcode == 'codingerror') { | ||||
|                     // This could be caused by a redirect. Check if it's the case.
 | ||||
|                     const redirect = await CoreUtils.checkRedirect(siteUrl); | ||||
| 
 | ||||
|         data.service = data.service || CoreConstants.CONFIG.wsservice; | ||||
|         this.services[siteUrl] = data.service; // No need to store it in DB.
 | ||||
| 
 | ||||
|         if (data.coreSupported || (data.code != CoreConstants.LOGIN_SSO_CODE && data.code != CoreConstants.LOGIN_SSO_INAPP_CODE)) { | ||||
|             // SSO using local_mobile not needed, try to get the site public config.
 | ||||
|             try { | ||||
|                 const config = await temporarySite.getPublicConfig(); | ||||
| 
 | ||||
|                 publicConfig = config; | ||||
| 
 | ||||
|                 // Check that the user can authenticate.
 | ||||
|                 if (!config.enablewebservices) { | ||||
|                     throw new CoreSiteError({ | ||||
|                         message: Translate.instant('core.login.webservicesnotenabled'), | ||||
|                     }); | ||||
|                 } else if (!config.enablemobilewebservice) { | ||||
|                     throw new CoreSiteError({ | ||||
|                         message: Translate.instant('core.login.mobileservicesnotenabled'), | ||||
|                     }); | ||||
|                 } else if (config.maintenanceenabled) { | ||||
|                     let message = Translate.instant('core.sitemaintenance'); | ||||
|                     if (config.maintenancemessage) { | ||||
|                         message += config.maintenancemessage; | ||||
|                     if (redirect) { | ||||
|                         error.error = Translate.instant('core.login.sitehasredirect'); | ||||
|                     } else { | ||||
|                         // We can't be sure if there is a redirect or not. Display cannot connect error.
 | ||||
|                         error.error = Translate.instant('core.cannotconnecttrouble'); | ||||
|                     } | ||||
| 
 | ||||
|                     throw new CoreSiteError({ | ||||
|                         message, | ||||
|                     }); | ||||
|                 } | ||||
| 
 | ||||
|                 // Everything ok.
 | ||||
|                 if (data.code === 0) { | ||||
|                     data.code = config.typeoflogin; | ||||
|                 } | ||||
|             } catch (error) { | ||||
|                 // Error, check if not supported.
 | ||||
|                 if (error.available === 1) { | ||||
|                     // Service supported but an error happened. Return error.
 | ||||
|                     if (error.errorcode == 'codingerror') { | ||||
|                         // This could be caused by a redirect. Check if it's the case.
 | ||||
|                         const redirect = await CoreUtils.checkRedirect(siteUrl); | ||||
| 
 | ||||
|                         if (redirect) { | ||||
|                             error.error = Translate.instant('core.login.sitehasredirect'); | ||||
|                         } else { | ||||
|                             // We can't be sure if there is a redirect or not. Display cannot connect error.
 | ||||
|                             error.error = Translate.instant('core.cannotconnecttrouble'); | ||||
|                         } | ||||
|                     } | ||||
| 
 | ||||
|                     throw new CoreSiteError({ | ||||
|                         message: error.error, | ||||
|                         errorcode: error.errorcode, | ||||
|                         critical: true, | ||||
|                     }); | ||||
|                 } | ||||
|                 throw new CoreSiteError({ | ||||
|                     message: error.error, | ||||
|                     errorcode: error.errorcode, | ||||
|                     critical: true, | ||||
|                 }); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         siteUrl = temporarySite.getURL(); | ||||
| 
 | ||||
|         return { siteUrl, code: data.code, warning: data.warning, service: data.service, config: publicConfig }; | ||||
|         return { siteUrl, code: config?.typeoflogin || 0, service: CoreConstants.CONFIG.wsservice, config }; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -367,10 +340,7 @@ export class CoreSitesProvider { | ||||
|             throw new CoreNetworkError(); | ||||
|         } | ||||
| 
 | ||||
|         if (!service) { | ||||
|             service = this.determineService(siteUrl); | ||||
|         } | ||||
| 
 | ||||
|         service = service || CoreConstants.CONFIG.wsservice; | ||||
|         const params = { | ||||
|             username, | ||||
|             password, | ||||
| @ -573,25 +543,10 @@ export class CoreSitesProvider { | ||||
|     /** | ||||
|      * Function for determine which service we should use (default or extended plugin). | ||||
|      * | ||||
|      * @param siteUrl The site URL. | ||||
|      * @return The service shortname. | ||||
|      * @deprecated since app 4.0 | ||||
|      */ | ||||
|     determineService(siteUrl: string): string { | ||||
|         // We need to try siteUrl in both https or http (due to loginhttps setting).
 | ||||
| 
 | ||||
|         // First http://
 | ||||
|         siteUrl = siteUrl.replace('https://', 'http://'); | ||||
|         if (this.services[siteUrl]) { | ||||
|             return this.services[siteUrl]; | ||||
|         } | ||||
| 
 | ||||
|         // Now https://
 | ||||
|         siteUrl = siteUrl.replace('http://', 'https://'); | ||||
|         if (this.services[siteUrl]) { | ||||
|             return this.services[siteUrl]; | ||||
|         } | ||||
| 
 | ||||
|         // Return default service.
 | ||||
|     determineService(): string { | ||||
|         return CoreConstants.CONFIG.wsservice; | ||||
|     } | ||||
| 
 | ||||
| @ -839,37 +794,24 @@ export class CoreSitesProvider { | ||||
|             return false; | ||||
|         } | ||||
| 
 | ||||
|         // Check if local_mobile was installed to Moodle.
 | ||||
|         let config: CoreSitePublicConfigResponse | undefined; | ||||
| 
 | ||||
|         try { | ||||
|             await site.checkIfLocalMobileInstalledAndNotUsed(); | ||||
| 
 | ||||
|             // Local mobile was added. Throw invalid session to force reconnect and create a new token.
 | ||||
|             CoreEvents.trigger(CoreEvents.SESSION_EXPIRED, { | ||||
|                 pageName, | ||||
|                 options: pageOptions, | ||||
|             }, siteId); | ||||
| 
 | ||||
|             return false; | ||||
|             config = await site.getPublicConfig(); | ||||
|         } catch (error) { | ||||
|             let config: CoreSitePublicConfigResponse | undefined; | ||||
|             // Error getting config, maybe the user is offline.
 | ||||
|         } | ||||
| 
 | ||||
|             try { | ||||
|                 config = await site.getPublicConfig(); | ||||
|             } catch (error) { | ||||
|                 // Error getting config, probably the site doesn't have the WS
 | ||||
|             } | ||||
|         try { | ||||
|             await this.checkApplication(config); | ||||
| 
 | ||||
|             try { | ||||
|                 await this.checkApplication(config); | ||||
|             this.login(siteId); | ||||
|             // Update site info. We don't block the UI.
 | ||||
|             this.updateSiteInfo(siteId); | ||||
| 
 | ||||
|                 this.login(siteId); | ||||
|                 // Update site info. We don't block the UI.
 | ||||
|                 this.updateSiteInfo(siteId); | ||||
| 
 | ||||
|                 return true; | ||||
|             } catch (error) { | ||||
|                 return false; | ||||
|             } | ||||
|             return true; | ||||
|         } catch (error) { | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -1499,13 +1441,12 @@ export class CoreSitesProvider { | ||||
|      * Check if a WS is available in the current site, if any. | ||||
|      * | ||||
|      * @param method WS name. | ||||
|      * @param checkPrefix When true also checks with the compatibility prefix. | ||||
|      * @return Whether the WS is available. | ||||
|      */ | ||||
|     wsAvailableInCurrentSite(method: string, checkPrefix: boolean = true): boolean { | ||||
|     wsAvailableInCurrentSite(method: string): boolean { | ||||
|         const site = this.getCurrentSite(); | ||||
| 
 | ||||
|         return site ? site.wsAvailable(method, checkPrefix) : false; | ||||
|         return site ? site.wsAvailable(method) : false; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -1744,7 +1685,7 @@ export type CoreSiteCheckResponse = { | ||||
|     service: string; | ||||
| 
 | ||||
|     /** | ||||
|      * Code of the warning message to show to the user. | ||||
|      * Code of the warning message to show to the user. @deprecated since app 4.0 | ||||
|      */ | ||||
|     warning?: string; | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										1
									
								
								src/types/config.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								src/types/config.d.ts
									
									
									
									
										vendored
									
									
								
							| @ -32,7 +32,6 @@ export interface EnvironmentConfig { | ||||
|     default_lang: string; | ||||
|     languages: Record<string, string>; | ||||
|     wsservice: string; | ||||
|     wsextservice: string; | ||||
|     demo_sites: Record<string, CoreSitesDemoSiteData>; | ||||
|     zoomlevels: Record<CoreZoomLevel, number>; | ||||
|     customurlscheme: string; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user