Merge pull request #6685 from matrix-org/travis/fix-widget-remember
Fix client forgetting which capabilities a widget was approved for
This commit is contained in:
commit
22a78cf481
2 changed files with 19 additions and 16 deletions
|
@ -31,14 +31,6 @@ import LabelledToggleSwitch from "../elements/LabelledToggleSwitch";
|
||||||
import { CapabilityText } from "../../../widgets/CapabilityText";
|
import { CapabilityText } from "../../../widgets/CapabilityText";
|
||||||
import { replaceableComponent } from "../../../utils/replaceableComponent";
|
import { replaceableComponent } from "../../../utils/replaceableComponent";
|
||||||
|
|
||||||
export function getRememberedCapabilitiesForWidget(widget: Widget): Capability[] {
|
|
||||||
return JSON.parse(localStorage.getItem(`widget_${widget.id}_approved_caps`) || "[]");
|
|
||||||
}
|
|
||||||
|
|
||||||
function setRememberedCapabilitiesForWidget(widget: Widget, caps: Capability[]) {
|
|
||||||
localStorage.setItem(`widget_${widget.id}_approved_caps`, JSON.stringify(caps));
|
|
||||||
}
|
|
||||||
|
|
||||||
interface IProps extends IDialogProps {
|
interface IProps extends IDialogProps {
|
||||||
requestedCapabilities: Set<Capability>;
|
requestedCapabilities: Set<Capability>;
|
||||||
widget: Widget;
|
widget: Widget;
|
||||||
|
@ -95,10 +87,7 @@ export default class WidgetCapabilitiesPromptDialog extends React.PureComponent<
|
||||||
};
|
};
|
||||||
|
|
||||||
private closeAndTryRemember(approved: Capability[]) {
|
private closeAndTryRemember(approved: Capability[]) {
|
||||||
if (this.state.rememberSelection) {
|
this.props.onFinished({ approved, remember: this.state.rememberSelection });
|
||||||
setRememberedCapabilitiesForWidget(this.props.widget, approved);
|
|
||||||
}
|
|
||||||
this.props.onFinished({ approved });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public render() {
|
public render() {
|
||||||
|
|
|
@ -33,9 +33,7 @@ import { MatrixClientPeg } from "../../MatrixClientPeg";
|
||||||
import ActiveRoomObserver from "../../ActiveRoomObserver";
|
import ActiveRoomObserver from "../../ActiveRoomObserver";
|
||||||
import Modal from "../../Modal";
|
import Modal from "../../Modal";
|
||||||
import WidgetOpenIDPermissionsDialog from "../../components/views/dialogs/WidgetOpenIDPermissionsDialog";
|
import WidgetOpenIDPermissionsDialog from "../../components/views/dialogs/WidgetOpenIDPermissionsDialog";
|
||||||
import WidgetCapabilitiesPromptDialog, {
|
import WidgetCapabilitiesPromptDialog from "../../components/views/dialogs/WidgetCapabilitiesPromptDialog";
|
||||||
getRememberedCapabilitiesForWidget,
|
|
||||||
} from "../../components/views/dialogs/WidgetCapabilitiesPromptDialog";
|
|
||||||
import { WidgetPermissionCustomisations } from "../../customisations/WidgetPermissions";
|
import { WidgetPermissionCustomisations } from "../../customisations/WidgetPermissions";
|
||||||
import { OIDCState, WidgetPermissionStore } from "./WidgetPermissionStore";
|
import { OIDCState, WidgetPermissionStore } from "./WidgetPermissionStore";
|
||||||
import { WidgetType } from "../../widgets/WidgetType";
|
import { WidgetType } from "../../widgets/WidgetType";
|
||||||
|
@ -48,6 +46,14 @@ import { MatrixEvent } from "matrix-js-sdk/src/models/event";
|
||||||
|
|
||||||
// TODO: Purge this from the universe
|
// TODO: Purge this from the universe
|
||||||
|
|
||||||
|
function getRememberedCapabilitiesForWidget(widget: Widget): Capability[] {
|
||||||
|
return JSON.parse(localStorage.getItem(`widget_${widget.id}_approved_caps`) || "[]");
|
||||||
|
}
|
||||||
|
|
||||||
|
function setRememberedCapabilitiesForWidget(widget: Widget, caps: Capability[]) {
|
||||||
|
localStorage.setItem(`widget_${widget.id}_approved_caps`, JSON.stringify(caps));
|
||||||
|
}
|
||||||
|
|
||||||
export class StopGapWidgetDriver extends WidgetDriver {
|
export class StopGapWidgetDriver extends WidgetDriver {
|
||||||
private allowedCapabilities: Set<Capability>;
|
private allowedCapabilities: Set<Capability>;
|
||||||
|
|
||||||
|
@ -100,6 +106,7 @@ export class StopGapWidgetDriver extends WidgetDriver {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO: Do something when the widget requests new capabilities not yet asked for
|
// TODO: Do something when the widget requests new capabilities not yet asked for
|
||||||
|
let rememberApproved = false;
|
||||||
if (missing.size > 0) {
|
if (missing.size > 0) {
|
||||||
try {
|
try {
|
||||||
const [result] = await Modal.createTrackedDialog(
|
const [result] = await Modal.createTrackedDialog(
|
||||||
|
@ -111,12 +118,19 @@ export class StopGapWidgetDriver extends WidgetDriver {
|
||||||
widgetKind: this.forWidgetKind,
|
widgetKind: this.forWidgetKind,
|
||||||
}).finished;
|
}).finished;
|
||||||
(result.approved || []).forEach(cap => allowedSoFar.add(cap));
|
(result.approved || []).forEach(cap => allowedSoFar.add(cap));
|
||||||
|
rememberApproved = result.remember;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error("Non-fatal error getting capabilities: ", e);
|
console.error("Non-fatal error getting capabilities: ", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Set(iterableUnion(allowedSoFar, requested));
|
const allAllowed = new Set(iterableUnion(allowedSoFar, requested));
|
||||||
|
|
||||||
|
if (rememberApproved) {
|
||||||
|
setRememberedCapabilitiesForWidget(this.forWidget, Array.from(allAllowed));
|
||||||
|
}
|
||||||
|
|
||||||
|
return allAllowed;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async sendEvent(eventType: string, content: any, stateKey: string = null): Promise<ISendEventDetails> {
|
public async sendEvent(eventType: string, content: any, stateKey: string = null): Promise<ISendEventDetails> {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue