MOBILE-4572 login: Wait for DB write before launching SSO
parent
a54d8e7b64
commit
02d3ccfdc0
|
@ -92,8 +92,8 @@ export class CoreLoginMethodsComponent implements OnInit {
|
||||||
*
|
*
|
||||||
* @param provider The provider that was clicked.
|
* @param provider The provider that was clicked.
|
||||||
*/
|
*/
|
||||||
oauthClicked(provider: CoreSiteIdentityProvider): void {
|
async oauthClicked(provider: CoreSiteIdentityProvider): Promise<void> {
|
||||||
const result = CoreLoginHelper.openBrowserForOAuthLogin(
|
const result = await CoreLoginHelper.openBrowserForOAuthLogin(
|
||||||
this.siteUrl,
|
this.siteUrl,
|
||||||
provider,
|
provider,
|
||||||
this.siteConfig?.launchurl,
|
this.siteConfig?.launchurl,
|
||||||
|
|
|
@ -318,7 +318,7 @@ export class CoreLoginEmailSignupPage implements OnInit {
|
||||||
};
|
};
|
||||||
|
|
||||||
if (this.siteConfig?.launchurl) {
|
if (this.siteConfig?.launchurl) {
|
||||||
params.redirect = CoreLoginHelper.prepareForSSOLogin(this.site.getURL(), undefined, this.siteConfig.launchurl);
|
params.redirect = await CoreLoginHelper.prepareForSSOLogin(this.site.getURL(), undefined, this.siteConfig.launchurl);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the recaptcha response (if needed).
|
// Get the recaptcha response (if needed).
|
||||||
|
|
|
@ -613,12 +613,12 @@ export class CoreLoginHelperProvider {
|
||||||
* @param redirectData Data of the path/url to open once authenticated. If not defined, site initial page.
|
* @param redirectData Data of the path/url to open once authenticated. If not defined, site initial page.
|
||||||
* @returns True if success, false if error.
|
* @returns True if success, false if error.
|
||||||
*/
|
*/
|
||||||
openBrowserForOAuthLogin(
|
async openBrowserForOAuthLogin(
|
||||||
siteUrl: string,
|
siteUrl: string,
|
||||||
provider: CoreSiteIdentityProvider,
|
provider: CoreSiteIdentityProvider,
|
||||||
launchUrl?: string,
|
launchUrl?: string,
|
||||||
redirectData?: CoreRedirectPayload,
|
redirectData?: CoreRedirectPayload,
|
||||||
): boolean {
|
): Promise<boolean> {
|
||||||
launchUrl = launchUrl || siteUrl + '/admin/tool/mobile/launch.php';
|
launchUrl = launchUrl || siteUrl + '/admin/tool/mobile/launch.php';
|
||||||
|
|
||||||
this.logger.debug('openBrowserForOAuthLogin launchUrl:', launchUrl);
|
this.logger.debug('openBrowserForOAuthLogin launchUrl:', launchUrl);
|
||||||
|
@ -633,7 +633,10 @@ export class CoreLoginHelperProvider {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const loginUrl = this.prepareForSSOLogin(siteUrl, undefined, launchUrl, redirectData, {
|
const modal = await CoreDomUtils.showModalLoading();
|
||||||
|
|
||||||
|
try {
|
||||||
|
const loginUrl = await this.prepareForSSOLogin(siteUrl, undefined, launchUrl, redirectData, {
|
||||||
oauthsso: params.id,
|
oauthsso: params.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -642,6 +645,13 @@ export class CoreLoginHelperProvider {
|
||||||
CoreApp.closeApp();
|
CoreApp.closeApp();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
} catch (error) {
|
||||||
|
CoreDomUtils.showErrorModalDefault(error, 'Error opening browser');
|
||||||
|
} finally {
|
||||||
|
modal.dismiss();
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -653,14 +663,17 @@ export class CoreLoginHelperProvider {
|
||||||
* @param launchUrl The URL to open for SSO. If not defined, default tool mobile launch URL will be used.
|
* @param launchUrl The URL to open for SSO. If not defined, default tool mobile launch URL will be used.
|
||||||
* @param redirectData Data of the path/url to open once authenticated. If not defined, site initial page.
|
* @param redirectData Data of the path/url to open once authenticated. If not defined, site initial page.
|
||||||
*/
|
*/
|
||||||
openBrowserForSSOLogin(
|
async openBrowserForSSOLogin(
|
||||||
siteUrl: string,
|
siteUrl: string,
|
||||||
typeOfLogin: TypeOfLogin,
|
typeOfLogin: TypeOfLogin,
|
||||||
service?: string,
|
service?: string,
|
||||||
launchUrl?: string,
|
launchUrl?: string,
|
||||||
redirectData?: CoreRedirectPayload,
|
redirectData?: CoreRedirectPayload,
|
||||||
): void {
|
): Promise<void> {
|
||||||
const loginUrl = this.prepareForSSOLogin(siteUrl, service, launchUrl, redirectData);
|
const modal = await CoreDomUtils.showModalLoading();
|
||||||
|
|
||||||
|
try {
|
||||||
|
const loginUrl = await this.prepareForSSOLogin(siteUrl, service, launchUrl, redirectData);
|
||||||
|
|
||||||
this.logger.debug('openBrowserForSSOLogin loginUrl:', loginUrl);
|
this.logger.debug('openBrowserForSSOLogin loginUrl:', loginUrl);
|
||||||
|
|
||||||
|
@ -673,6 +686,11 @@ export class CoreLoginHelperProvider {
|
||||||
CoreUtils.openInBrowser(loginUrl, { showBrowserWarning: false });
|
CoreUtils.openInBrowser(loginUrl, { showBrowserWarning: false });
|
||||||
CoreApp.closeApp();
|
CoreApp.closeApp();
|
||||||
}
|
}
|
||||||
|
} catch (error) {
|
||||||
|
CoreDomUtils.showErrorModalDefault(error, 'Error opening browser');
|
||||||
|
} finally {
|
||||||
|
modal.dismiss();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -779,13 +797,13 @@ export class CoreLoginHelperProvider {
|
||||||
* @param urlParams Other params to add to the URL.
|
* @param urlParams Other params to add to the URL.
|
||||||
* @returns Login Url.
|
* @returns Login Url.
|
||||||
*/
|
*/
|
||||||
prepareForSSOLogin(
|
async prepareForSSOLogin(
|
||||||
siteUrl: string,
|
siteUrl: string,
|
||||||
service?: string,
|
service?: string,
|
||||||
launchUrl?: string,
|
launchUrl?: string,
|
||||||
redirectData: CoreRedirectPayload = {},
|
redirectData: CoreRedirectPayload = {},
|
||||||
urlParams?: CoreUrlParams,
|
urlParams?: CoreUrlParams,
|
||||||
): string {
|
): Promise<string> {
|
||||||
|
|
||||||
service = service || CoreConstants.CONFIG.wsservice;
|
service = service || CoreConstants.CONFIG.wsservice;
|
||||||
launchUrl = launchUrl || siteUrl + '/admin/tool/mobile/launch.php';
|
launchUrl = launchUrl || siteUrl + '/admin/tool/mobile/launch.php';
|
||||||
|
@ -802,7 +820,7 @@ export class CoreLoginHelperProvider {
|
||||||
|
|
||||||
// Store the siteurl and passport in CoreConfigProvider for persistence.
|
// Store the siteurl and passport in CoreConfigProvider for persistence.
|
||||||
// We are "configuring" the app to wait for an SSO. CoreConfigProvider shouldn't be used as a temporary storage.
|
// We are "configuring" the app to wait for an SSO. CoreConfigProvider shouldn't be used as a temporary storage.
|
||||||
CoreConfig.set(CoreConstants.LOGIN_LAUNCH_DATA, JSON.stringify(<StoredLoginLaunchData> {
|
await CoreConfig.set(CoreConstants.LOGIN_LAUNCH_DATA, JSON.stringify(<StoredLoginLaunchData> {
|
||||||
siteUrl: siteUrl,
|
siteUrl: siteUrl,
|
||||||
passport: passport,
|
passport: passport,
|
||||||
...redirectData,
|
...redirectData,
|
||||||
|
|
Loading…
Reference in New Issue