Widget permissions customizations using module api (#10121)
* Using module api to customize widget permissions Signed-off-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net> * Revert type export and use ComponentProps instead. Signed-off-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net> --------- Signed-off-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net> Co-authored-by: Mikhail Aheichyk <mikhail.aheichyk@nordeck.net>
This commit is contained in:
parent
9a0e537916
commit
7b77f76486
11 changed files with 241 additions and 31 deletions
|
@ -39,6 +39,11 @@ import { Room } from "matrix-js-sdk/src/models/room";
|
|||
import { logger } from "matrix-js-sdk/src/logger";
|
||||
import { THREAD_RELATION_TYPE } from "matrix-js-sdk/src/models/thread";
|
||||
import { Direction } from "matrix-js-sdk/src/matrix";
|
||||
import {
|
||||
ApprovalOpts,
|
||||
CapabilitiesOpts,
|
||||
WidgetLifecycle,
|
||||
} from "@matrix-org/react-sdk-module-api/lib/lifecycles/WidgetLifecycle";
|
||||
|
||||
import SdkConfig, { DEFAULTS } from "../../SdkConfig";
|
||||
import { iterableDiff, iterableIntersection } from "../../utils/iterables";
|
||||
|
@ -55,6 +60,7 @@ import dis from "../../dispatcher/dispatcher";
|
|||
import { ElementWidgetCapabilities } from "./ElementWidgetCapabilities";
|
||||
import { navigateToPermalink } from "../../utils/permalinks/navigator";
|
||||
import { SdkContextClass } from "../../contexts/SDKContext";
|
||||
import { ModuleRunner } from "../../modules/ModuleRunner";
|
||||
|
||||
// TODO: Purge this from the universe
|
||||
|
||||
|
@ -171,15 +177,22 @@ export class StopGapWidgetDriver extends WidgetDriver {
|
|||
allowedSoFar.add(cap);
|
||||
missing.delete(cap);
|
||||
});
|
||||
|
||||
let approved: Set<string> | undefined;
|
||||
if (WidgetPermissionCustomisations.preapproveCapabilities) {
|
||||
const approved = await WidgetPermissionCustomisations.preapproveCapabilities(this.forWidget, requested);
|
||||
if (approved) {
|
||||
approved.forEach((cap) => {
|
||||
allowedSoFar.add(cap);
|
||||
missing.delete(cap);
|
||||
});
|
||||
}
|
||||
approved = await WidgetPermissionCustomisations.preapproveCapabilities(this.forWidget, requested);
|
||||
} else {
|
||||
const opts: CapabilitiesOpts = { approvedCapabilities: undefined };
|
||||
ModuleRunner.instance.invoke(WidgetLifecycle.CapabilitiesRequest, opts, this.forWidget, requested);
|
||||
approved = opts.approvedCapabilities;
|
||||
}
|
||||
if (approved) {
|
||||
approved.forEach((cap) => {
|
||||
allowedSoFar.add(cap);
|
||||
missing.delete(cap);
|
||||
});
|
||||
}
|
||||
|
||||
// TODO: Do something when the widget requests new capabilities not yet asked for
|
||||
let rememberApproved = false;
|
||||
if (missing.size > 0) {
|
||||
|
@ -366,6 +379,15 @@ export class StopGapWidgetDriver extends WidgetDriver {
|
|||
}
|
||||
|
||||
public async askOpenID(observer: SimpleObservable<IOpenIDUpdate>): Promise<void> {
|
||||
const opts: ApprovalOpts = { approved: undefined };
|
||||
ModuleRunner.instance.invoke(WidgetLifecycle.IdentityRequest, opts, this.forWidget);
|
||||
if (opts.approved) {
|
||||
return observer.update({
|
||||
state: OpenIDRequestState.Allowed,
|
||||
token: await MatrixClientPeg.get().getOpenIdToken(),
|
||||
});
|
||||
}
|
||||
|
||||
const oidcState = SdkContextClass.instance.widgetPermissionStore.getOIDCState(
|
||||
this.forWidget,
|
||||
this.forWidgetKind,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue