diff --git a/src/server/api/routers/dns-hole/router.ts b/src/server/api/routers/dns-hole/router.ts
index 8c7f73553..8f02ea981 100644
--- a/src/server/api/routers/dns-hole/router.ts
+++ b/src/server/api/routers/dns-hole/router.ts
@@ -7,10 +7,10 @@ import { PiHoleClient } from '~/tools/server/sdk/pihole/piHole';
import { ConfigAppType } from '~/types/app';
import { AdStatistics } from '~/widgets/dnshole/type';
-import { createTRPCRouter, publicProcedure } from '../../trpc';
+import { adminProcedure, createTRPCRouter, publicProcedure } from '../../trpc';
export const dnsHoleRouter = createTRPCRouter({
- control: publicProcedure
+ control: adminProcedure
.input(
z.object({
action: z.enum(['enable', 'disable']),
diff --git a/src/widgets/dnshole/DnsHoleControls.tsx b/src/widgets/dnshole/DnsHoleControls.tsx
index a695455a3..872f891c3 100644
--- a/src/widgets/dnshole/DnsHoleControls.tsx
+++ b/src/widgets/dnshole/DnsHoleControls.tsx
@@ -68,16 +68,17 @@ const dnsLightStatus = (
};
function DnsHoleControlsWidgetTile({ widget }: DnsHoleControlsWidgetProps) {
- const utils = api.useContext();
const { data: sessionData } = useSession();
const { isInitialLoading, data, isFetching: fetchingDnsSummary } = useDnsHoleSummeryQuery();
const { mutateAsync, isLoading: changingStatus } = useDnsHoleControlMutation();
const { width, ref } = useElementSize();
const { t } = useTranslation(['common', 'modules/dns-hole-controls']);
+ const enableControls = sessionData?.user.isAdmin ?? false;
+
const { name: configName, config } = useConfigContext();
- const trpcUtils = api.useContext();
+ const trpcUtils = api.useUtils();
if (isInitialLoading || !data || !configName) {
return ;
@@ -123,13 +124,24 @@ function DnsHoleControlsWidgetTile({ widget }: DnsHoleControlsWidgetProps) {
return dnsList;
};
- const reFetchSummaryDns = () => {
- trpcUtils.dnsHole.summary.invalidate();
+ const toggleDns = async (action: 'enable' | 'disable', appsToChange?: string[]) => {
+ await mutateAsync(
+ {
+ action,
+ configName,
+ appsToChange,
+ },
+ {
+ onSettled: () => {
+ trpcUtils.dnsHole.summary.invalidate();
+ },
+ }
+ );
};
return (
- {sessionData?.user?.isAdmin && widget.properties.showToggleAllButtons && (
+ {enableControls && widget.properties.showToggleAllButtons && (
275 ? 2 : 1}
@@ -137,20 +149,7 @@ function DnsHoleControlsWidgetTile({ widget }: DnsHoleControlsWidgetProps) {
spacing="0.25rem"
>