forked from CIT/Vmeda.Online
		
	MOBILE-3106 core: Use GET as fallback in get public config
This commit is contained in:
		
							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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user