add delegatedauthentication to validated server config (#11053)
parent
d5d1ec775c
commit
41dfec20bf
|
@ -16,8 +16,10 @@ limitations under the License.
|
||||||
|
|
||||||
import React, { ReactNode } from "react";
|
import React, { ReactNode } from "react";
|
||||||
import { AutoDiscovery, ClientConfig } from "matrix-js-sdk/src/autodiscovery";
|
import { AutoDiscovery, ClientConfig } from "matrix-js-sdk/src/autodiscovery";
|
||||||
|
import { IDelegatedAuthConfig, M_AUTHENTICATION } from "matrix-js-sdk/src/client";
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
import { IClientWellKnown } from "matrix-js-sdk/src/matrix";
|
import { IClientWellKnown } from "matrix-js-sdk/src/matrix";
|
||||||
|
import { ValidatedIssuerConfig } from "matrix-js-sdk/src/oidc/validate";
|
||||||
|
|
||||||
import { _t, UserFriendlyError } from "../languageHandler";
|
import { _t, UserFriendlyError } from "../languageHandler";
|
||||||
import SdkConfig from "../SdkConfig";
|
import SdkConfig from "../SdkConfig";
|
||||||
|
@ -260,6 +262,20 @@ export default class AutoDiscoveryUtils {
|
||||||
throw new UserFriendlyError("Unexpected error resolving homeserver configuration");
|
throw new UserFriendlyError("Unexpected error resolving homeserver configuration");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let delegatedAuthentication = undefined;
|
||||||
|
if (discoveryResult[M_AUTHENTICATION.stable!]?.state === AutoDiscovery.SUCCESS) {
|
||||||
|
const { authorizationEndpoint, registrationEndpoint, tokenEndpoint, account, issuer } = discoveryResult[
|
||||||
|
M_AUTHENTICATION.stable!
|
||||||
|
] as IDelegatedAuthConfig & ValidatedIssuerConfig;
|
||||||
|
delegatedAuthentication = {
|
||||||
|
authorizationEndpoint,
|
||||||
|
registrationEndpoint,
|
||||||
|
tokenEndpoint,
|
||||||
|
account,
|
||||||
|
issuer,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
hsUrl: preferredHomeserverUrl,
|
hsUrl: preferredHomeserverUrl,
|
||||||
hsName: preferredHomeserverName,
|
hsName: preferredHomeserverName,
|
||||||
|
@ -268,6 +284,7 @@ export default class AutoDiscoveryUtils {
|
||||||
isDefault: false,
|
isDefault: false,
|
||||||
warning: hsResult.error,
|
warning: hsResult.error,
|
||||||
isNameResolvable: !isSynthetic,
|
isNameResolvable: !isSynthetic,
|
||||||
|
delegatedAuthentication,
|
||||||
} as ValidatedServerConfig;
|
} as ValidatedServerConfig;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,9 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { IDelegatedAuthConfig } from "matrix-js-sdk/src/client";
|
||||||
|
import { ValidatedIssuerConfig } from "matrix-js-sdk/src/oidc/validate";
|
||||||
|
|
||||||
export interface ValidatedServerConfig {
|
export interface ValidatedServerConfig {
|
||||||
hsUrl: string;
|
hsUrl: string;
|
||||||
hsName: string;
|
hsName: string;
|
||||||
|
@ -26,4 +29,6 @@ export interface ValidatedServerConfig {
|
||||||
isNameResolvable: boolean;
|
isNameResolvable: boolean;
|
||||||
|
|
||||||
warning: string | Error;
|
warning: string | Error;
|
||||||
|
|
||||||
|
delegatedAuthentication?: IDelegatedAuthConfig & ValidatedIssuerConfig;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ limitations under the License.
|
||||||
|
|
||||||
import { AutoDiscovery, AutoDiscoveryAction, ClientConfig } from "matrix-js-sdk/src/autodiscovery";
|
import { AutoDiscovery, AutoDiscoveryAction, ClientConfig } from "matrix-js-sdk/src/autodiscovery";
|
||||||
import { logger } from "matrix-js-sdk/src/logger";
|
import { logger } from "matrix-js-sdk/src/logger";
|
||||||
|
import { M_AUTHENTICATION } from "matrix-js-sdk/src/client";
|
||||||
|
|
||||||
import AutoDiscoveryUtils from "../../src/utils/AutoDiscoveryUtils";
|
import AutoDiscoveryUtils from "../../src/utils/AutoDiscoveryUtils";
|
||||||
|
|
||||||
|
@ -186,5 +187,50 @@ describe("AutoDiscoveryUtils", () => {
|
||||||
warning: "Homeserver URL does not appear to be a valid Matrix homeserver",
|
warning: "Homeserver URL does not appear to be a valid Matrix homeserver",
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("ignores delegated auth config when discovery was not successful", () => {
|
||||||
|
const discoveryResult = {
|
||||||
|
...validIsConfig,
|
||||||
|
...validHsConfig,
|
||||||
|
[M_AUTHENTICATION.stable!]: {
|
||||||
|
state: AutoDiscoveryAction.FAIL_ERROR,
|
||||||
|
error: "",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const syntaxOnly = true;
|
||||||
|
expect(
|
||||||
|
AutoDiscoveryUtils.buildValidatedConfigFromDiscovery(serverName, discoveryResult, syntaxOnly),
|
||||||
|
).toEqual({
|
||||||
|
...expectedValidatedConfig,
|
||||||
|
delegatedAuthentication: undefined,
|
||||||
|
warning: undefined,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("sets delegated auth config when discovery was successful", () => {
|
||||||
|
const authConfig = {
|
||||||
|
issuer: "https://test.com/",
|
||||||
|
authorizationEndpoint: "https://test.com/auth",
|
||||||
|
registrationEndpoint: "https://test.com/registration",
|
||||||
|
tokenEndpoint: "https://test.com/token",
|
||||||
|
};
|
||||||
|
const discoveryResult = {
|
||||||
|
...validIsConfig,
|
||||||
|
...validHsConfig,
|
||||||
|
[M_AUTHENTICATION.stable!]: {
|
||||||
|
state: AutoDiscoveryAction.SUCCESS,
|
||||||
|
error: null,
|
||||||
|
...authConfig,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const syntaxOnly = true;
|
||||||
|
expect(
|
||||||
|
AutoDiscoveryUtils.buildValidatedConfigFromDiscovery(serverName, discoveryResult, syntaxOnly),
|
||||||
|
).toEqual({
|
||||||
|
...expectedValidatedConfig,
|
||||||
|
delegatedAuthentication: authConfig,
|
||||||
|
warning: undefined,
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue