MOBILE-4303 iframe: Support auto-login in core-iframe component
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…
Reference in New Issue