MOBILE-3106 core: Use GET as fallback in get public config
parent
5c4872288c
commit
a983d1c14b
|
@ -21,7 +21,7 @@ import { CoreDbProvider } from '@providers/db';
|
|||
import { CoreEventsProvider } from '@providers/events';
|
||||
import { CoreFileProvider } from '@providers/file';
|
||||
import { CoreLoggerProvider } from '@providers/logger';
|
||||
import { CoreWSProvider, CoreWSPreSets, CoreWSFileUploadOptions } from '@providers/ws';
|
||||
import { CoreWSProvider, CoreWSPreSets, CoreWSFileUploadOptions, CoreWSAjaxPreSets } from '@providers/ws';
|
||||
import { CoreDomUtilsProvider } from '@providers/utils/dom';
|
||||
import { CoreTextUtilsProvider } from '@providers/utils/text';
|
||||
import { CoreTimeUtilsProvider } from '@providers/utils/time';
|
||||
|
@ -1432,7 +1432,22 @@ export class CoreSite {
|
|||
* @return {Promise<any>} Promise resolved with public config. Rejected with an object if error, see CoreWSProvider.callAjax.
|
||||
*/
|
||||
getPublicConfig(): Promise<any> {
|
||||
return this.wsProvider.callAjax('tool_mobile_get_public_config', {}, { siteUrl: this.siteUrl }).then((config) => {
|
||||
const preSets: CoreWSAjaxPreSets = {
|
||||
siteUrl: this.siteUrl
|
||||
};
|
||||
|
||||
return this.wsProvider.callAjax('tool_mobile_get_public_config', {}, preSets).catch((error) => {
|
||||
|
||||
if ((!this.getInfo() || this.isVersionGreaterEqualThan('3.8')) && error && error.errorcode == 'codingerror') {
|
||||
// This error probably means that there is a redirect in the site. Try to use a GET request.
|
||||
preSets.noLogin = true;
|
||||
preSets.useGet = true;
|
||||
|
||||
return this.wsProvider.callAjax('tool_mobile_get_public_config', {}, preSets);
|
||||
}
|
||||
|
||||
return Promise.reject(error);
|
||||
}).then((config) => {
|
||||
// Use the wwwroot returned by the server.
|
||||
if (config.httpswwwroot) {
|
||||
this.siteUrl = config.httpswwwroot;
|
||||
|
|
|
@ -76,6 +76,18 @@ export interface CoreWSAjaxPreSets {
|
|||
* @type {boolean}
|
||||
*/
|
||||
responseExpected?: boolean;
|
||||
|
||||
/**
|
||||
* Whether to use the no-login endpoint instead of the normal one. Use it for requests that don't require authentication.
|
||||
* @type {boolean}
|
||||
*/
|
||||
noLogin?: boolean;
|
||||
|
||||
/**
|
||||
* Whether to send the parameters via GET. Only if noLogin is true.
|
||||
* @type {boolean}
|
||||
*/
|
||||
useGet?: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -215,8 +227,7 @@ export class CoreWSProvider {
|
|||
* - available: 0 if unknown, 1 if available, -1 if not available.
|
||||
*/
|
||||
callAjax(method: string, data: any, preSets: CoreWSAjaxPreSets): Promise<any> {
|
||||
let siteUrl,
|
||||
ajaxData;
|
||||
let promise;
|
||||
|
||||
if (typeof preSets.siteUrl == 'undefined') {
|
||||
return rejectWithError(this.createFakeWSError('core.unexpectederror', true));
|
||||
|
@ -228,17 +239,24 @@ export class CoreWSProvider {
|
|||
preSets.responseExpected = true;
|
||||
}
|
||||
|
||||
ajaxData = [{
|
||||
index: 0,
|
||||
methodname: method,
|
||||
args: this.convertValuesToString(data)
|
||||
}];
|
||||
const script = preSets.noLogin ? 'service-nologin.php' : 'service.php',
|
||||
ajaxData = JSON.stringify([{
|
||||
index: 0,
|
||||
methodname: method,
|
||||
args: this.convertValuesToString(data)
|
||||
}]);
|
||||
|
||||
// The info= parameter has no function. It is just to help with debugging.
|
||||
// We call it info to match the parameter name use by Moodle's AMD ajax module.
|
||||
siteUrl = preSets.siteUrl + '/lib/ajax/service.php?info=' + method;
|
||||
let siteUrl = preSets.siteUrl + '/lib/ajax/' + script + '?info=' + method;
|
||||
|
||||
const promise = this.http.post(siteUrl, JSON.stringify(ajaxData)).timeout(CoreConstants.WS_TIMEOUT).toPromise();
|
||||
if (preSets.noLogin && preSets.useGet) {
|
||||
// Send params using GET.
|
||||
siteUrl += '&args=' + encodeURIComponent(ajaxData);
|
||||
promise = this.http.get(siteUrl).timeout(CoreConstants.WS_TIMEOUT).toPromise();
|
||||
} else {
|
||||
promise = this.http.post(siteUrl, ajaxData).timeout(CoreConstants.WS_TIMEOUT).toPromise();
|
||||
}
|
||||
|
||||
return promise.then((data: any) => {
|
||||
// Some moodle web services return null.
|
||||
|
|
Loading…
Reference in New Issue