diff --git a/src/hooks/usePermission.ts b/src/hooks/usePermission.ts index a6a4e42..826693c 100644 --- a/src/hooks/usePermission.ts +++ b/src/hooks/usePermission.ts @@ -1,4 +1,6 @@ -import { useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; + +import { useDomainWhitelist } from './useDomainWhitelist'; export async function hasPermission() { return chrome.permissions.contains({ @@ -7,15 +9,17 @@ export async function hasPermission() { } export function usePermission() { + const { addDomain } = useDomainWhitelist(); const [permission, setPermission] = useState(false); - const grantPermission = async () => { + const grantPermission = useCallback(async (domain: string) => { const granted = await chrome.permissions.request({ origins: [''], }); setPermission(granted); + if (granted && domain) addDomain(domain); return granted; - }; + }, []); useEffect(() => { hasPermission().then((has) => setPermission(has)); diff --git a/src/tabs/PermissionGrant.tsx b/src/tabs/PermissionGrant.tsx index c7c2867..44e2643 100644 --- a/src/tabs/PermissionGrant.tsx +++ b/src/tabs/PermissionGrant.tsx @@ -1,19 +1,28 @@ +import { useDomainWhitelist } from '~hooks/useDomainWhitelist'; import { usePermission } from '~hooks/usePermission'; +import { makeUrlIntoDomain } from '~utils/domains'; import './PermissionGrant.css'; export default function PermissionGrant() { + const { domainWhitelist } = useDomainWhitelist(); const { hasPermission, grantPermission } = usePermission(); const queryParams = new URLSearchParams(window.location.search); const redirectUrl = queryParams.get('redirectUrl') ?? 'https://movie-web.app'; - const domain = new URL(redirectUrl).hostname; + const domain = makeUrlIntoDomain(redirectUrl); + + const permissionsGranted = domainWhitelist.includes(domain) && hasPermission; + + const redirectBack = () => { + chrome.tabs.getCurrent((tab) => { + chrome.tabs.update(tab.id, { url: queryParams.get('redirectUrl') ?? 'https://movie-web.app' }); + }); + }; const handleGrantPermission = () => { - grantPermission().then(() => { - chrome.tabs.getCurrent((tab) => { - chrome.tabs.update(tab.id, { url: queryParams.get('redirectUrl') ?? 'https://movie-web.app' }); - }); + grantPermission(domain).then(() => { + redirectBack(); }); }; @@ -30,7 +39,7 @@ export default function PermissionGrant() {

-
@@ -38,7 +47,7 @@ export default function PermissionGrant() { type="button" className="grant-permission-btn" onClick={handleGrantPermission} - disabled={hasPermission} + disabled={permissionsGranted} > Grant Permission