Implementation of MSC3824 to make the client OIDC-aware (#8681)
This commit is contained in:
parent
32bd350b7e
commit
d698193196
11 changed files with 240 additions and 29 deletions
|
@ -22,6 +22,7 @@ import { encodeUnpaddedBase64 } from "matrix-js-sdk/src/crypto/olmlib";
|
|||
import { logger } from "matrix-js-sdk/src/logger";
|
||||
import { MatrixEvent } from "matrix-js-sdk/src/models/event";
|
||||
import { Room } from "matrix-js-sdk/src/models/room";
|
||||
import { SSOAction } from "matrix-js-sdk/src/@types/auth";
|
||||
|
||||
import dis from "./dispatcher/dispatcher";
|
||||
import BaseEventIndexManager from "./indexing/BaseEventIndexManager";
|
||||
|
@ -308,9 +309,9 @@ export default abstract class BasePlatform {
|
|||
return null;
|
||||
}
|
||||
|
||||
protected getSSOCallbackUrl(fragmentAfterLogin: string): URL {
|
||||
protected getSSOCallbackUrl(fragmentAfterLogin = ""): URL {
|
||||
const url = new URL(window.location.href);
|
||||
url.hash = fragmentAfterLogin || "";
|
||||
url.hash = fragmentAfterLogin;
|
||||
return url;
|
||||
}
|
||||
|
||||
|
@ -319,13 +320,15 @@ export default abstract class BasePlatform {
|
|||
* @param {MatrixClient} mxClient the matrix client using which we should start the flow
|
||||
* @param {"sso"|"cas"} loginType the type of SSO it is, CAS/SSO.
|
||||
* @param {string} fragmentAfterLogin the hash to pass to the app during sso callback.
|
||||
* @param {SSOAction} action the SSO flow to indicate to the IdP, optional.
|
||||
* @param {string} idpId The ID of the Identity Provider being targeted, optional.
|
||||
*/
|
||||
public startSingleSignOn(
|
||||
mxClient: MatrixClient,
|
||||
loginType: "sso" | "cas",
|
||||
fragmentAfterLogin: string,
|
||||
fragmentAfterLogin?: string,
|
||||
idpId?: string,
|
||||
action?: SSOAction,
|
||||
): void {
|
||||
// persist hs url and is url for when the user is returned to the app with the login token
|
||||
localStorage.setItem(SSO_HOMESERVER_URL_KEY, mxClient.getHomeserverUrl());
|
||||
|
@ -336,7 +339,7 @@ export default abstract class BasePlatform {
|
|||
localStorage.setItem(SSO_IDP_ID_KEY, idpId);
|
||||
}
|
||||
const callbackUrl = this.getSSOCallbackUrl(fragmentAfterLogin);
|
||||
window.location.href = mxClient.getSsoLoginUrl(callbackUrl.toString(), loginType, idpId); // redirect to SSO
|
||||
window.location.href = mxClient.getSsoLoginUrl(callbackUrl.toString(), loginType, idpId, action); // redirect to SSO
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue