mirror of
https://github.com/movie-web/extension.git
synced 2025-09-13 13:33:25 +00:00
permission grant with domains
This commit is contained in:
@@ -1,4 +1,6 @@
|
|||||||
import { useEffect, useState } from 'react';
|
import { useCallback, useEffect, useState } from 'react';
|
||||||
|
|
||||||
|
import { useDomainWhitelist } from './useDomainWhitelist';
|
||||||
|
|
||||||
export async function hasPermission() {
|
export async function hasPermission() {
|
||||||
return chrome.permissions.contains({
|
return chrome.permissions.contains({
|
||||||
@@ -7,15 +9,17 @@ export async function hasPermission() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function usePermission() {
|
export function usePermission() {
|
||||||
|
const { addDomain } = useDomainWhitelist();
|
||||||
const [permission, setPermission] = useState(false);
|
const [permission, setPermission] = useState(false);
|
||||||
|
|
||||||
const grantPermission = async () => {
|
const grantPermission = useCallback(async (domain: string) => {
|
||||||
const granted = await chrome.permissions.request({
|
const granted = await chrome.permissions.request({
|
||||||
origins: ['<all_urls>'],
|
origins: ['<all_urls>'],
|
||||||
});
|
});
|
||||||
setPermission(granted);
|
setPermission(granted);
|
||||||
|
if (granted && domain) addDomain(domain);
|
||||||
return granted;
|
return granted;
|
||||||
};
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
hasPermission().then((has) => setPermission(has));
|
hasPermission().then((has) => setPermission(has));
|
||||||
|
@@ -1,19 +1,28 @@
|
|||||||
|
import { useDomainWhitelist } from '~hooks/useDomainWhitelist';
|
||||||
import { usePermission } from '~hooks/usePermission';
|
import { usePermission } from '~hooks/usePermission';
|
||||||
|
import { makeUrlIntoDomain } from '~utils/domains';
|
||||||
|
|
||||||
import './PermissionGrant.css';
|
import './PermissionGrant.css';
|
||||||
|
|
||||||
export default function PermissionGrant() {
|
export default function PermissionGrant() {
|
||||||
|
const { domainWhitelist } = useDomainWhitelist();
|
||||||
const { hasPermission, grantPermission } = usePermission();
|
const { hasPermission, grantPermission } = usePermission();
|
||||||
|
|
||||||
const queryParams = new URLSearchParams(window.location.search);
|
const queryParams = new URLSearchParams(window.location.search);
|
||||||
const redirectUrl = queryParams.get('redirectUrl') ?? 'https://movie-web.app';
|
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 = () => {
|
const handleGrantPermission = () => {
|
||||||
grantPermission().then(() => {
|
grantPermission(domain).then(() => {
|
||||||
chrome.tabs.getCurrent((tab) => {
|
redirectBack();
|
||||||
chrome.tabs.update(tab.id, { url: queryParams.get('redirectUrl') ?? 'https://movie-web.app' });
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -30,7 +39,7 @@ export default function PermissionGrant() {
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="footer">
|
<div className="footer">
|
||||||
<button type="button" className="go-back-btn">
|
<button type="button" className="go-back-btn" onClick={redirectBack}>
|
||||||
Go back
|
Go back
|
||||||
</button>
|
</button>
|
||||||
<div style={{ flex: 1 }} />
|
<div style={{ flex: 1 }} />
|
||||||
@@ -38,7 +47,7 @@ export default function PermissionGrant() {
|
|||||||
type="button"
|
type="button"
|
||||||
className="grant-permission-btn"
|
className="grant-permission-btn"
|
||||||
onClick={handleGrantPermission}
|
onClick={handleGrantPermission}
|
||||||
disabled={hasPermission}
|
disabled={permissionsGranted}
|
||||||
>
|
>
|
||||||
Grant Permission
|
Grant Permission
|
||||||
</button>
|
</button>
|
||||||
|
Reference in New Issue
Block a user