Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 22a78cf

Browse files
authored
Merge pull request #6685 from matrix-org/travis/fix-widget-remember
Fix client forgetting which capabilities a widget was approved for
2 parents a1a7de0 + 76cc5bf commit 22a78cf

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

src/components/views/dialogs/WidgetCapabilitiesPromptDialog.tsx

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,6 @@ import LabelledToggleSwitch from "../elements/LabelledToggleSwitch";
3131
import { CapabilityText } from "../../../widgets/CapabilityText";
3232
import { replaceableComponent } from "../../../utils/replaceableComponent";
3333

34-
export function getRememberedCapabilitiesForWidget(widget: Widget): Capability[] {
35-
return JSON.parse(localStorage.getItem(`widget_${widget.id}_approved_caps`) || "[]");
36-
}
37-
38-
function setRememberedCapabilitiesForWidget(widget: Widget, caps: Capability[]) {
39-
localStorage.setItem(`widget_${widget.id}_approved_caps`, JSON.stringify(caps));
40-
}
41-
4234
interface IProps extends IDialogProps {
4335
requestedCapabilities: Set<Capability>;
4436
widget: Widget;
@@ -95,10 +87,7 @@ export default class WidgetCapabilitiesPromptDialog extends React.PureComponent<
9587
};
9688

9789
private closeAndTryRemember(approved: Capability[]) {
98-
if (this.state.rememberSelection) {
99-
setRememberedCapabilitiesForWidget(this.props.widget, approved);
100-
}
101-
this.props.onFinished({ approved });
90+
this.props.onFinished({ approved, remember: this.state.rememberSelection });
10291
}
10392

10493
public render() {

src/stores/widgets/StopGapWidgetDriver.ts

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,7 @@ import { MatrixClientPeg } from "../../MatrixClientPeg";
3333
import ActiveRoomObserver from "../../ActiveRoomObserver";
3434
import Modal from "../../Modal";
3535
import WidgetOpenIDPermissionsDialog from "../../components/views/dialogs/WidgetOpenIDPermissionsDialog";
36-
import WidgetCapabilitiesPromptDialog, {
37-
getRememberedCapabilitiesForWidget,
38-
} from "../../components/views/dialogs/WidgetCapabilitiesPromptDialog";
36+
import WidgetCapabilitiesPromptDialog from "../../components/views/dialogs/WidgetCapabilitiesPromptDialog";
3937
import { WidgetPermissionCustomisations } from "../../customisations/WidgetPermissions";
4038
import { OIDCState, WidgetPermissionStore } from "./WidgetPermissionStore";
4139
import { WidgetType } from "../../widgets/WidgetType";
@@ -48,6 +46,14 @@ import { MatrixEvent } from "matrix-js-sdk/src/models/event";
4846

4947
// TODO: Purge this from the universe
5048

49+
function getRememberedCapabilitiesForWidget(widget: Widget): Capability[] {
50+
return JSON.parse(localStorage.getItem(`widget_${widget.id}_approved_caps`) || "[]");
51+
}
52+
53+
function setRememberedCapabilitiesForWidget(widget: Widget, caps: Capability[]) {
54+
localStorage.setItem(`widget_${widget.id}_approved_caps`, JSON.stringify(caps));
55+
}
56+
5157
export class StopGapWidgetDriver extends WidgetDriver {
5258
private allowedCapabilities: Set<Capability>;
5359

@@ -100,6 +106,7 @@ export class StopGapWidgetDriver extends WidgetDriver {
100106
}
101107
}
102108
// TODO: Do something when the widget requests new capabilities not yet asked for
109+
let rememberApproved = false;
103110
if (missing.size > 0) {
104111
try {
105112
const [result] = await Modal.createTrackedDialog(
@@ -111,12 +118,19 @@ export class StopGapWidgetDriver extends WidgetDriver {
111118
widgetKind: this.forWidgetKind,
112119
}).finished;
113120
(result.approved || []).forEach(cap => allowedSoFar.add(cap));
121+
rememberApproved = result.remember;
114122
} catch (e) {
115123
console.error("Non-fatal error getting capabilities: ", e);
116124
}
117125
}
118126

119-
return new Set(iterableUnion(allowedSoFar, requested));
127+
const allAllowed = new Set(iterableUnion(allowedSoFar, requested));
128+
129+
if (rememberApproved) {
130+
setRememberedCapabilitiesForWidget(this.forWidget, Array.from(allAllowed));
131+
}
132+
133+
return allAllowed;
120134
}
121135

122136
public async sendEvent(eventType: string, content: any, stateKey: string = null): Promise<ISendEventDetails> {

0 commit comments

Comments
 (0)