forked from EVOgeek/Vmeda.Online
		
	MOBILE-4303 iframe: Support auto-login in core-iframe component
This commit is contained in:
		
							parent
							
								
									9211b350dc
								
							
						
					
					
						commit
						0309e7a8c1
					
				| @ -18,7 +18,6 @@ import { CoreError } from '@classes/errors/error'; | ||||
| import { CoreCourseModuleMainResourceComponent } from '@features/course/classes/main-resource-component'; | ||||
| import { CoreCourseContentsPage } from '@features/course/pages/contents/contents'; | ||||
| import { CoreCourse } from '@features/course/services/course'; | ||||
| import { CoreSites } from '@services/sites'; | ||||
| import { CoreMimetypeUtils } from '@services/utils/mimetype'; | ||||
| import { CoreTextUtils } from '@services/utils/text'; | ||||
| import { AddonModUrl, AddonModUrlDisplayOptions, AddonModUrlProvider, AddonModUrlUrl } from '../../services/url'; | ||||
| @ -109,8 +108,7 @@ export class AddonModUrlIndexComponent extends CoreCourseModuleMainResourceCompo | ||||
| 
 | ||||
|         } catch { | ||||
|             // Fallback in case is not prefetched.
 | ||||
|             const mod = | ||||
|                 await CoreCourse.getModule(this.module.id, this.courseId, undefined, false, false, undefined, 'url'); | ||||
|             const mod = await CoreCourse.getModule(this.module.id, this.courseId, undefined, false, false, undefined, 'url'); | ||||
| 
 | ||||
|             this.name = mod.name; | ||||
|             this.description = mod.description; | ||||
| @ -146,16 +144,6 @@ export class AddonModUrlIndexComponent extends CoreCourseModuleMainResourceCompo | ||||
|             this.isVideo = CoreMimetypeUtils.isExtensionInGroup(extension, ['web_video']); | ||||
|             this.isOther = !this.isImage && !this.isAudio && !this.isVideo; | ||||
|         } | ||||
| 
 | ||||
|         if (this.shouldIframe || (this.shouldEmbed && !this.isImage && !this.isAudio && !this.isVideo)) { | ||||
|             // Will be displayed in an iframe. Check if we need to auto-login.
 | ||||
|             const currentSite = CoreSites.getCurrentSite(); | ||||
| 
 | ||||
|             if (currentSite && this.url) { | ||||
|                 // Format the URL to add auto-login if needed.
 | ||||
|                 this.url = await currentSite.getAutoLoginUrl(this.url, false); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|  | ||||
| @ -28,6 +28,7 @@ import { CoreScreen, CoreScreenOrientation } from '@services/screen'; | ||||
| import { Subscription } from 'rxjs'; | ||||
| import { filter } from 'rxjs/operators'; | ||||
| import { NavigationStart } from '@angular/router'; | ||||
| import { CoreSites } from '@services/sites'; | ||||
| 
 | ||||
| @Component({ | ||||
|     selector: 'core-iframe', | ||||
| @ -45,6 +46,7 @@ export class CoreIframeComponent implements OnChanges, OnDestroy { | ||||
|     @Input() allowFullscreen?: boolean | string; | ||||
|     @Input() showFullscreenOnToolbar?: boolean | string; | ||||
|     @Input() autoFullscreenOnRotate?: boolean | string; | ||||
|     @Input() allowAutoLogin = true; | ||||
|     @Output() loaded: EventEmitter<HTMLIFrameElement> = new EventEmitter<HTMLIFrameElement>(); | ||||
| 
 | ||||
|     loading?: boolean; | ||||
| @ -154,9 +156,15 @@ export class CoreIframeComponent implements OnChanges, OnDestroy { | ||||
|      */ | ||||
|     async ngOnChanges(changes: {[name: string]: SimpleChange }): Promise<void> { | ||||
|         if (changes.src) { | ||||
|             const url = CoreUrlUtils.getYoutubeEmbedUrl(changes.src.currentValue) || changes.src.currentValue; | ||||
|             let url = CoreUrlUtils.getYoutubeEmbedUrl(changes.src.currentValue) || changes.src.currentValue; | ||||
|             this.displayHelp = CoreIframeUtils.shouldDisplayHelpForUrl(url); | ||||
| 
 | ||||
|             const currentSite = CoreSites.getCurrentSite(); | ||||
|             if (this.allowAutoLogin && currentSite) { | ||||
|                 // Format the URL to add auto-login if needed.
 | ||||
|                 url = await currentSite.getAutoLoginUrl(url, false); | ||||
|             } | ||||
| 
 | ||||
|             await CoreIframeUtils.fixIframeCookies(url); | ||||
| 
 | ||||
|             this.safeUrl = DomSanitizer.bypassSecurityTrustResourceUrl(CoreFile.convertFileSrc(url)); | ||||
|  | ||||
| @ -131,11 +131,8 @@ export class CoreH5PIframeComponent implements OnChanges, OnDestroy { | ||||
|                     CoreH5PCore.DISPLAY_OPTION_DOWNLOAD + '=0', | ||||
|                 ); | ||||
| 
 | ||||
|                 // Get auto-login URL so the user is automatically authenticated if needed.
 | ||||
|                 const url = await this.site.getAutoLoginUrl(src, false); | ||||
| 
 | ||||
|                 // Add the preventredirect param so the user can authenticate.
 | ||||
|                 this.iframeSrc = CoreUrlUtils.addParamsToUrl(url, { preventredirect: false }); | ||||
|                 this.iframeSrc = CoreUrlUtils.addParamsToUrl(src, { preventredirect: false }); | ||||
|             } | ||||
|         } catch (error) { | ||||
|             CoreDomUtils.showErrorModalDefault(error, 'Error loading H5P package.', true); | ||||
|  | ||||
| @ -9,7 +9,7 @@ | ||||
|     </ion-toolbar> | ||||
| </ion-header> | ||||
| <ion-content> | ||||
|     <core-loading [hideUntil]="finalUrl"> | ||||
|         <core-iframe *ngIf="finalUrl" [src]="finalUrl"></core-iframe> | ||||
|     <core-loading [hideUntil]="url"> | ||||
|         <core-iframe *ngIf="url" [src]="url" [allowAutoLogin]="autoLogin"></core-iframe> | ||||
|     </core-loading> | ||||
| </ion-content> | ||||
|  | ||||
| @ -15,8 +15,6 @@ | ||||
| import { Component, OnInit } from '@angular/core'; | ||||
| import { CoreNavigator } from '@services/navigator'; | ||||
| 
 | ||||
| import { CoreSites } from '@services/sites'; | ||||
| 
 | ||||
| /** | ||||
|  * Page to display a URL in an iframe. | ||||
|  */ | ||||
| @ -29,7 +27,6 @@ export class CoreViewerIframePage implements OnInit { | ||||
|     title?: string; // Page title.
 | ||||
|     url?: string; // Iframe URL.
 | ||||
|     autoLogin?: boolean; // Whether to try to use auto-login.
 | ||||
|     finalUrl?: string; | ||||
| 
 | ||||
|     async ngOnInit(): Promise<void> { | ||||
|         this.title = CoreNavigator.getRouteParam('title'); | ||||
| @ -38,19 +35,6 @@ export class CoreViewerIframePage implements OnInit { | ||||
|         this.autoLogin = typeof autoLoginParam === 'boolean' ? | ||||
|             autoLoginParam : | ||||
|             autoLoginParam !== 'no'; // Support deprecated values yes/no/check.
 | ||||
| 
 | ||||
|         if (!this.url) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         const currentSite = CoreSites.getCurrentSite(); | ||||
| 
 | ||||
|         if (currentSite && this.autoLogin) { | ||||
|             // Format the URL to add auto-login.
 | ||||
|             this.finalUrl = await currentSite.getAutoLoginUrl(this.url, false); | ||||
|         } else { | ||||
|             this.finalUrl = this.url; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user