diff --git a/src/lang/en.json b/src/lang/en.json index 4e165a8b6..a3989c56f 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -9,7 +9,7 @@ "areyousure": "Are you sure?", "back": "Back", "cancel": "Cancel", - "cannotconnect": "Cannot connect: Verify that you have correctly typed the URL and that your site uses Moodle 2.4 or later.", + "cannotconnect": "Cannot connect: verify that you have typed correctly the URL.", "cannotdownloadfiles": "File downloading is disabled. Please contact your site administrator.", "captureaudio": "Record audio", "capturedimage": "Taken picture.", diff --git a/src/providers/sites.ts b/src/providers/sites.ts index 8ceaffac4..ee31c0127 100644 --- a/src/providers/sites.ts +++ b/src/providers/sites.ts @@ -21,6 +21,7 @@ import { CoreLoggerProvider } from './logger'; import { CoreSitesFactoryProvider } from './sites-factory'; import { CoreTextUtilsProvider } from './utils/text'; import { CoreUrlUtilsProvider } from './utils/url'; +import { CoreUtilsProvider } from './utils/utils'; import { CoreConstants } from '@core/constants'; import { CoreConfigConstants } from '../configconstants'; import { CoreSite } from '@classes/site'; @@ -211,7 +212,8 @@ export class CoreSitesProvider { constructor(logger: CoreLoggerProvider, private http: HttpClient, private sitesFactory: CoreSitesFactoryProvider, private appProvider: CoreAppProvider, private translate: TranslateService, private urlUtils: CoreUrlUtilsProvider, - private eventsProvider: CoreEventsProvider, private textUtils: CoreTextUtilsProvider) { + private eventsProvider: CoreEventsProvider, private textUtils: CoreTextUtilsProvider, + private utils: CoreUtilsProvider) { this.logger = logger.getInstance('CoreSitesProvider'); this.appDB = appProvider.getDB(); @@ -258,14 +260,10 @@ export class CoreSitesProvider { protocol = protocol == 'https://' ? 'http://' : 'https://'; return this.checkSiteWithProtocol(siteUrl, protocol).catch((secondError) => { - // Site doesn't exist. - if (secondError.error) { - return Promise.reject(secondError.error); - } else if (error.error) { - return Promise.reject(error.error); - } - - return Promise.reject(this.translate.instant('core.login.checksiteversion')); + // Site doesn't exist. Return the error message. + return Promise.reject(this.textUtils.getErrorMessageFromError(error) || + this.textUtils.getErrorMessageFromError(secondError) || + this.translate.instant('core.cannotconnect')); }); }); } @@ -286,7 +284,7 @@ export class CoreSitesProvider { return this.siteExists(siteUrl).catch((error) => { // Do not continue checking if WS are not enabled. - if (error.errorcode && error.errorcode == 'enablewsdescription') { + if (error.errorcode == 'enablewsdescription') { return rejectWithCriticalError(error.error, error.errorcode); } @@ -298,13 +296,13 @@ export class CoreSitesProvider { siteUrl = treatedUrl; }).catch((secondError) => { // Do not continue checking if WS are not enabled. - if (secondError.errorcode && secondError.errorcode == 'enablewsdescription') { + if (secondError.errorcode == 'enablewsdescription') { return rejectWithCriticalError(secondError.error, secondError.errorcode); } - error = secondError || error; - - return Promise.reject({ error: typeof error == 'object' ? error.error : error }); + // Return the error message. + return Promise.reject(this.textUtils.getErrorMessageFromError(error) || + this.textUtils.getErrorMessageFromError(secondError)); }); }).then(() => { // Create a temporary site to check if local_mobile is installed. @@ -385,11 +383,11 @@ export class CoreSitesProvider { data.service = 'c'; } - const promise = this.http.post(siteUrl + '/login/token.php', data).timeout(CoreConstants.WS_TIMEOUT).toPromise(); - - return promise.catch((error) => { - return Promise.reject(error); + return this.http.post(siteUrl + '/login/token.php', data).timeout(CoreConstants.WS_TIMEOUT).toPromise().catch(() => { + // Default error messages are kinda bad, return our own message. + return Promise.reject({error: this.translate.instant('core.cannotconnect')}); }).then((data: any) => { + if (data.errorcode && (data.errorcode == 'enablewsdescription' || data.errorcode == 'requirecorrectaccess')) { return Promise.reject({ errorcode: data.errorcode, error: data.error }); } else if (data.error && data.error == 'Web services must be enabled in Advanced features.') { diff --git a/src/providers/utils/text.ts b/src/providers/utils/text.ts index 7ae4cecbf..668d3589d 100644 --- a/src/providers/utils/text.ts +++ b/src/providers/utils/text.ts @@ -407,6 +407,10 @@ export class CoreTextUtilsProvider { * @return {string} Error message, undefined if not found. */ getErrorMessageFromError(error: any): string { + if (typeof error == 'string') { + return error; + } + return error && (error.message || error.error || error.content || error.body); }