summaryrefslogtreecommitdiff
path: root/src/webex/pages
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2020-06-03 16:21:09 +0530
committerFlorian Dold <florian.dold@gmail.com>2020-06-03 16:21:21 +0530
commite15e56c65a07b5b39c9f781099909469d65eefba (patch)
tree8559db0839b0f5c881da08d9501f63c8c7eee38c /src/webex/pages
parenta3354306c629ab3ab5f45617f31b90976416105a (diff)
downloadwallet-core-e15e56c65a07b5b39c9f781099909469d65eefba.tar.gz
wallet-core-e15e56c65a07b5b39c9f781099909469d65eefba.tar.bz2
wallet-core-e15e56c65a07b5b39c9f781099909469d65eefba.zip
make permissions work for firefox
Diffstat (limited to 'src/webex/pages')
-rw-r--r--src/webex/pages/welcome.tsx43
1 files changed, 37 insertions, 6 deletions
diff --git a/src/webex/pages/welcome.tsx b/src/webex/pages/welcome.tsx
index 6e445e431..8d4920cac 100644
--- a/src/webex/pages/welcome.tsx
+++ b/src/webex/pages/welcome.tsx
@@ -25,6 +25,8 @@ import { getDiagnostics } from "../wxApi";
import { PageLink } from "../renderHtml";
import { WalletDiagnostics } from "../../types/walletTypes";
import * as wxApi from "../wxApi";
+import { getPermissionsApi } from "../compat";
+import { extendedPermissions } from "../permissions";
function Diagnostics(): JSX.Element | null {
const [timedOut, setTimedOut] = useState(false);
@@ -97,22 +99,51 @@ function Diagnostics(): JSX.Element | null {
}
export function PermissionsCheckbox(): JSX.Element {
- const [extendedPermissions, setExtendedPermissions] = useState(false);
- async function handleExtendedPerm(newVal: boolean): Promise<void> {
- const res = await wxApi.setExtendedPermissions(newVal);
- setExtendedPermissions(res.newValue);
+ const [extendedPermissionsEnabled, setExtendedPermissionsEnabled] = useState(
+ false,
+ );
+ async function handleExtendedPerm(requestedVal: boolean): Promise<void> {
+ let nextVal: boolean | undefined;
+ if (requestedVal) {
+ const granted = await new Promise<boolean>((resolve, reject) => {
+ // We set permissions here, since apparently FF wants this to be done
+ // as the result of an input event ...
+ getPermissionsApi().request(
+ extendedPermissions,
+ (granted: boolean) => {
+ if (chrome.runtime.lastError) {
+ console.error("error requesting permissions");
+ console.error(chrome.runtime.lastError);
+ reject(chrome.runtime.lastError);
+ return;
+ }
+ console.log("permissions granted:", granted);
+ resolve(granted);
+ },
+ );
+ });
+ const res = await wxApi.setExtendedPermissions(granted);
+ console.log(res);
+ nextVal = res.newValue;
+ } else {
+ const res = await wxApi.setExtendedPermissions(false);
+ console.log(res);
+ nextVal = res.newValue;
+ }
+ console.log("new permissions applied:", nextVal);
+ setExtendedPermissionsEnabled(nextVal ?? false);
}
useEffect(() => {
async function getExtendedPermValue(): Promise<void> {
const res = await wxApi.getExtendedPermissions();
- setExtendedPermissions(res.newValue);
+ setExtendedPermissionsEnabled(res.newValue);
}
getExtendedPermValue();
});
return (
<div>
<input
- checked={extendedPermissions}
+ checked={extendedPermissionsEnabled}
onChange={(x) => handleExtendedPerm(x.target.checked)}
type="checkbox"
id="checkbox-perm"