commit
						fc4cd623cd
					
				@ -41,6 +41,15 @@ import { CoreLogger } from '@singletons/logger';
 | 
				
			|||||||
import { Translate } from '@singletons';
 | 
					import { Translate } from '@singletons';
 | 
				
			||||||
import { CoreIonLoadingElement } from './ion-loading';
 | 
					import { CoreIonLoadingElement } from './ion-loading';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * QR Code type enumeration.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					export enum CoreSiteQRCodeType {
 | 
				
			||||||
 | 
					    QR_CODE_DISABLED = 0, // QR code disabled value
 | 
				
			||||||
 | 
					    QR_CODE_URL = 1, // QR code type URL value
 | 
				
			||||||
 | 
					    QR_CODE_LOGIN = 2, // QR code type login value
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Class that represents a site (combination of site + user).
 | 
					 * Class that represents a site (combination of site + user).
 | 
				
			||||||
 * It will have all the site data and provide utility functions regarding a site.
 | 
					 * It will have all the site data and provide utility functions regarding a site.
 | 
				
			||||||
@ -2122,6 +2131,7 @@ export type CoreSitePublicConfigResponse = {
 | 
				
			|||||||
    tool_mobile_androidappid?: string; // Android app's unique identifier.
 | 
					    tool_mobile_androidappid?: string; // Android app's unique identifier.
 | 
				
			||||||
    // eslint-disable-next-line @typescript-eslint/naming-convention
 | 
					    // eslint-disable-next-line @typescript-eslint/naming-convention
 | 
				
			||||||
    tool_mobile_setuplink?: string; // App download page.
 | 
					    tool_mobile_setuplink?: string; // App download page.
 | 
				
			||||||
 | 
					    tool_mobile_qrcodetype?: CoreSiteQRCodeType; // eslint-disable-line @typescript-eslint/naming-convention
 | 
				
			||||||
    warnings?: CoreWSExternalWarning[];
 | 
					    warnings?: CoreWSExternalWarning[];
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -68,32 +68,32 @@ export class CoreLoginCredentialsPage implements OnInit, OnDestroy {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Initialize the component.
 | 
					     * Initialize the component.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    ngOnInit(): void {
 | 
					    async ngOnInit(): Promise<void> {
 | 
				
			||||||
        const siteUrl = CoreNavigator.getRouteParam<string>('siteUrl');
 | 
					        try {
 | 
				
			||||||
        if (!siteUrl) {
 | 
					            this.siteUrl = CoreNavigator.getRequiredRouteParam<string>('siteUrl');
 | 
				
			||||||
            CoreDomUtils.showErrorModal('Site URL not supplied.');
 | 
					 | 
				
			||||||
            CoreNavigator.back();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.siteUrl = siteUrl;
 | 
					 | 
				
			||||||
            this.siteName = CoreNavigator.getRouteParam('siteName');
 | 
					            this.siteName = CoreNavigator.getRouteParam('siteName');
 | 
				
			||||||
            this.logoUrl = !CoreConstants.CONFIG.forceLoginLogo && CoreNavigator.getRouteParam('logoUrl') || undefined;
 | 
					            this.logoUrl = !CoreConstants.CONFIG.forceLoginLogo && CoreNavigator.getRouteParam('logoUrl') || undefined;
 | 
				
			||||||
            this.siteConfig = CoreNavigator.getRouteParam('siteConfig');
 | 
					            this.siteConfig = CoreNavigator.getRouteParam('siteConfig');
 | 
				
			||||||
            this.urlToOpen = CoreNavigator.getRouteParam('urlToOpen');
 | 
					            this.urlToOpen = CoreNavigator.getRouteParam('urlToOpen');
 | 
				
			||||||
        this.showScanQR = CoreLoginHelper.displayQRInCredentialsScreen();
 | 
					        } catch (error) {
 | 
				
			||||||
 | 
					            CoreDomUtils.showErrorModal(error);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return CoreNavigator.back();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.credForm = this.fb.group({
 | 
					        this.credForm = this.fb.group({
 | 
				
			||||||
            username: [CoreNavigator.getRouteParam<string>('username') || '', Validators.required],
 | 
					            username: [CoreNavigator.getRouteParam<string>('username') || '', Validators.required],
 | 
				
			||||||
            password: ['', Validators.required],
 | 
					            password: ['', Validators.required],
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.siteConfig) {
 | 
				
			||||||
            this.treatSiteConfig();
 | 
					            this.treatSiteConfig();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        this.isFixedUrlSet = CoreLoginHelper.isFixedUrlSet();
 | 
					        this.isFixedUrlSet = CoreLoginHelper.isFixedUrlSet();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (this.isFixedUrlSet) {
 | 
					        if (this.isFixedUrlSet || !this.siteConfig) {
 | 
				
			||||||
            // Fixed URL, we need to check if it uses browser SSO login.
 | 
					            // Fixed URL or not siteConfig retrieved from params, we need to check if it uses browser SSO login.
 | 
				
			||||||
            this.checkSite(this.siteUrl);
 | 
					            this.checkSite(this.siteUrl);
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            this.siteChecked = true;
 | 
					            this.siteChecked = true;
 | 
				
			||||||
@ -177,6 +177,7 @@ export class CoreLoginCredentialsPage implements OnInit, OnDestroy {
 | 
				
			|||||||
            this.siteName = CoreConstants.CONFIG.sitename ? CoreConstants.CONFIG.sitename : this.siteConfig.sitename;
 | 
					            this.siteName = CoreConstants.CONFIG.sitename ? CoreConstants.CONFIG.sitename : this.siteConfig.sitename;
 | 
				
			||||||
            this.logoUrl = CoreLoginHelper.getLogoUrl(this.siteConfig);
 | 
					            this.logoUrl = CoreLoginHelper.getLogoUrl(this.siteConfig);
 | 
				
			||||||
            this.authInstructions = this.siteConfig.authinstructions || Translate.instant('core.login.loginsteps');
 | 
					            this.authInstructions = this.siteConfig.authinstructions || Translate.instant('core.login.loginsteps');
 | 
				
			||||||
 | 
					            this.showScanQR = CoreLoginHelper.displayQRInCredentialsScreen(this.siteConfig.tool_mobile_qrcodetype);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const disabledFeatures = CoreLoginHelper.getDisabledFeatures(this.siteConfig);
 | 
					            const disabledFeatures = CoreLoginHelper.getDisabledFeatures(this.siteConfig);
 | 
				
			||||||
            this.identityProviders = CoreLoginHelper.getValidIdentityProviders(this.siteConfig, disabledFeatures);
 | 
					            this.identityProviders = CoreLoginHelper.getValidIdentityProviders(this.siteConfig, disabledFeatures);
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ import { CoreSites } from '@services/sites';
 | 
				
			|||||||
import { CoreDomUtils } from '@services/utils/dom';
 | 
					import { CoreDomUtils } from '@services/utils/dom';
 | 
				
			||||||
import { CoreUtils } from '@services/utils/utils';
 | 
					import { CoreUtils } from '@services/utils/utils';
 | 
				
			||||||
import { CoreLoginHelper } from '@features/login/services/login-helper';
 | 
					import { CoreLoginHelper } from '@features/login/services/login-helper';
 | 
				
			||||||
import { CoreSiteIdentityProvider, CoreSitePublicConfigResponse } from '@classes/site';
 | 
					import { CoreSite, CoreSiteIdentityProvider, CoreSitePublicConfigResponse } from '@classes/site';
 | 
				
			||||||
import { CoreEvents } from '@singletons/events';
 | 
					import { CoreEvents } from '@singletons/events';
 | 
				
			||||||
import { CoreError } from '@classes/errors/error';
 | 
					import { CoreError } from '@classes/errors/error';
 | 
				
			||||||
import { CoreNavigationOptions, CoreNavigator } from '@services/navigator';
 | 
					import { CoreNavigationOptions, CoreNavigator } from '@services/navigator';
 | 
				
			||||||
@ -64,7 +64,7 @@ export class CoreLoginReconnectPage implements OnInit, OnDestroy {
 | 
				
			|||||||
    ) {
 | 
					    ) {
 | 
				
			||||||
        const currentSite = CoreSites.getCurrentSite();
 | 
					        const currentSite = CoreSites.getCurrentSite();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.isLoggedOut = !!currentSite?.isLoggedOut();
 | 
					        this.isLoggedOut = !currentSite || currentSite.isLoggedOut();
 | 
				
			||||||
        this.credForm = fb.group({
 | 
					        this.credForm = fb.group({
 | 
				
			||||||
            password: ['', Validators.required],
 | 
					            password: ['', Validators.required],
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
@ -74,17 +74,12 @@ export class CoreLoginReconnectPage implements OnInit, OnDestroy {
 | 
				
			|||||||
     * Initialize the component.
 | 
					     * Initialize the component.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    async ngOnInit(): Promise<void> {
 | 
					    async ngOnInit(): Promise<void> {
 | 
				
			||||||
        const siteId = CoreNavigator.getRouteParam<string>('siteId');
 | 
					        try {
 | 
				
			||||||
        if (!siteId) {
 | 
					            this.siteId = CoreNavigator.getRequiredRouteParam<string>('siteId');
 | 
				
			||||||
            return this.cancel();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.siteId = siteId;
 | 
					 | 
				
			||||||
            this.page = CoreNavigator.getRouteParam('pageName');
 | 
					            this.page = CoreNavigator.getRouteParam('pageName');
 | 
				
			||||||
            this.pageOptions = CoreNavigator.getRouteParam('pageOptions');
 | 
					            this.pageOptions = CoreNavigator.getRouteParam('pageOptions');
 | 
				
			||||||
        this.showScanQR = CoreLoginHelper.displayQRInSiteScreen() || CoreLoginHelper.displayQRInCredentialsScreen();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					 | 
				
			||||||
            const site = await CoreSites.getSite(this.siteId);
 | 
					            const site = await CoreSites.getSite(this.siteId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (!site.infos) {
 | 
					            if (!site.infos) {
 | 
				
			||||||
@ -103,26 +98,11 @@ export class CoreLoginReconnectPage implements OnInit, OnDestroy {
 | 
				
			|||||||
            // Show logo instead of avatar if it's a fixed site.
 | 
					            // Show logo instead of avatar if it's a fixed site.
 | 
				
			||||||
            this.showSiteAvatar = !!this.userAvatar && !CoreLoginHelper.getFixedSites();
 | 
					            this.showSiteAvatar = !!this.userAvatar && !CoreLoginHelper.getFixedSites();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const config = await CoreUtils.ignoreErrors(site.getPublicConfig());
 | 
					            this.checkSiteConfig(site);
 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (!config) {
 | 
					 | 
				
			||||||
                return;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            this.siteConfig = config;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            await CoreSites.checkApplication(config);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // Check logoURL if user avatar is not set.
 | 
					 | 
				
			||||||
            if (this.userAvatar.startsWith(this.siteUrl + '/theme/image.php')) {
 | 
					 | 
				
			||||||
                this.showSiteAvatar = false;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            this.logoUrl = CoreLoginHelper.getLogoUrl(config);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            this.getDataFromConfig(this.siteConfig);
 | 
					 | 
				
			||||||
        } catch (error) {
 | 
					        } catch (error) {
 | 
				
			||||||
            // Just leave the view.
 | 
					            CoreDomUtils.showErrorModal(error);
 | 
				
			||||||
            this.cancel();
 | 
					
 | 
				
			||||||
 | 
					            return this.cancel();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -136,19 +116,34 @@ export class CoreLoginReconnectPage implements OnInit, OnDestroy {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Get some data (like identity providers) from the site config.
 | 
					     * Get some data (like identity providers) from the site config.
 | 
				
			||||||
     *
 | 
					 | 
				
			||||||
     * @param config Config to use.
 | 
					 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    protected getDataFromConfig(config: CoreSitePublicConfigResponse): void {
 | 
					    protected async checkSiteConfig(site: CoreSite): Promise<void> {
 | 
				
			||||||
        const disabledFeatures = CoreLoginHelper.getDisabledFeatures(config);
 | 
					        this.siteConfig = await CoreUtils.ignoreErrors(site.getPublicConfig());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.identityProviders = CoreLoginHelper.getValidIdentityProviders(config, disabledFeatures);
 | 
					        if (!this.siteConfig) {
 | 
				
			||||||
        this.showForgottenPassword = !CoreLoginHelper.isForgottenPasswordDisabled(config);
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const disabledFeatures = CoreLoginHelper.getDisabledFeatures(this.siteConfig);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.identityProviders = CoreLoginHelper.getValidIdentityProviders(this.siteConfig, disabledFeatures);
 | 
				
			||||||
 | 
					        this.showForgottenPassword = !CoreLoginHelper.isForgottenPasswordDisabled(this.siteConfig);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (!this.eventThrown && !this.viewLeft) {
 | 
					        if (!this.eventThrown && !this.viewLeft) {
 | 
				
			||||||
            this.eventThrown = true;
 | 
					            this.eventThrown = true;
 | 
				
			||||||
            CoreEvents.trigger(CoreEvents.LOGIN_SITE_CHECKED, { config: config });
 | 
					            CoreEvents.trigger(CoreEvents.LOGIN_SITE_CHECKED, { config: this.siteConfig });
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this.showScanQR = CoreLoginHelper.displayQRInSiteScreen() ||
 | 
				
			||||||
 | 
					            CoreLoginHelper.displayQRInCredentialsScreen(this.siteConfig.tool_mobile_qrcodetype);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        await CoreSites.checkApplication(this.siteConfig);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Check logoURL if user avatar is not set.
 | 
				
			||||||
 | 
					        if (this.userAvatar?.startsWith(this.siteUrl + '/theme/image.php')) {
 | 
				
			||||||
 | 
					            this.showSiteAvatar = false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        this.logoUrl = CoreLoginHelper.getLogoUrl(this.siteConfig);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -162,6 +157,11 @@ export class CoreLoginReconnectPage implements OnInit, OnDestroy {
 | 
				
			|||||||
            e.stopPropagation();
 | 
					            e.stopPropagation();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (this.isLoggedOut) {
 | 
				
			||||||
 | 
					            // Go to sites page when user is logged out.
 | 
				
			||||||
 | 
					            CoreNavigator.navigate('/login/sites', { reset: true });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        CoreSites.logout();
 | 
					        CoreSites.logout();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -26,7 +26,7 @@ import { CoreTextUtils } from '@services/utils/text';
 | 
				
			|||||||
import { CoreUrlParams, CoreUrlUtils } from '@services/utils/url';
 | 
					import { CoreUrlParams, CoreUrlUtils } from '@services/utils/url';
 | 
				
			||||||
import { CoreUtils } from '@services/utils/utils';
 | 
					import { CoreUtils } from '@services/utils/utils';
 | 
				
			||||||
import { CoreConstants } from '@/core/constants';
 | 
					import { CoreConstants } from '@/core/constants';
 | 
				
			||||||
import { CoreSite, CoreSiteIdentityProvider, CoreSitePublicConfigResponse } from '@classes/site';
 | 
					import { CoreSite, CoreSiteIdentityProvider, CoreSitePublicConfigResponse, CoreSiteQRCodeType } from '@classes/site';
 | 
				
			||||||
import { CoreError } from '@classes/errors/error';
 | 
					import { CoreError } from '@classes/errors/error';
 | 
				
			||||||
import { CoreWSError } from '@classes/errors/wserror';
 | 
					import { CoreWSError } from '@classes/errors/wserror';
 | 
				
			||||||
import { makeSingleton, Translate } from '@singletons';
 | 
					import { makeSingleton, Translate } from '@singletons';
 | 
				
			||||||
@ -1237,15 +1237,22 @@ export class CoreLoginHelperProvider {
 | 
				
			|||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Check whether the QR reader should be displayed in credentials screen.
 | 
					     * Check whether the QR reader should be displayed in credentials screen.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
					     * @param qrCodeType QR Code type from public config, assuming enabled if undefined.
 | 
				
			||||||
     * @return Whether the QR reader should be displayed in credentials screen.
 | 
					     * @return Whether the QR reader should be displayed in credentials screen.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    displayQRInCredentialsScreen(): boolean {
 | 
					    displayQRInCredentialsScreen(qrCodeType = CoreSiteQRCodeType.QR_CODE_LOGIN): boolean {
 | 
				
			||||||
        if (!CoreUtils.canScanQR()) {
 | 
					        if (!CoreUtils.canScanQR()) {
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return (CoreConstants.CONFIG.displayqroncredentialscreen === undefined && this.isFixedUrlSet()) ||
 | 
					        if ((CoreConstants.CONFIG.displayqroncredentialscreen === undefined && this.isFixedUrlSet()) ||
 | 
				
			||||||
            (CoreConstants.CONFIG.displayqroncredentialscreen !== undefined && !!CoreConstants.CONFIG.displayqroncredentialscreen);
 | 
					            (CoreConstants.CONFIG.displayqroncredentialscreen !== undefined &&
 | 
				
			||||||
 | 
					                !!CoreConstants.CONFIG.displayqroncredentialscreen)) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return qrCodeType == CoreSiteQRCodeType.QR_CODE_LOGIN;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
@ -948,9 +948,13 @@ export class CoreSitesProvider {
 | 
				
			|||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            // Retrieve and create the site.
 | 
					            // Retrieve and create the site.
 | 
				
			||||||
            const db = await this.appDB;
 | 
					            const db = await this.appDB;
 | 
				
			||||||
 | 
					            try {
 | 
				
			||||||
                const data = await db.getRecord<SiteDBEntry>(SITES_TABLE_NAME, { id: siteId });
 | 
					                const data = await db.getRecord<SiteDBEntry>(SITES_TABLE_NAME, { id: siteId });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                return this.makeSiteFromSiteListEntry(data);
 | 
					                return this.makeSiteFromSiteListEntry(data);
 | 
				
			||||||
 | 
					            } catch {
 | 
				
			||||||
 | 
					                throw new CoreError('SiteId not found');
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user