From 49b2196c7be3b0f8f2d61fa9ef79837d4a3e29bd Mon Sep 17 00:00:00 2001 From: Gianluca Zuccarelli Date: Fri, 2 May 2025 13:50:40 +0100 Subject: [PATCH] test/mocks/cockpit: add permission function Add the types relevant types for the `cockpit.permission` function so that we can establish whether the user has the correct privileges to run the frontend on-prem. --- src/Utilities/useIsCockpitAdmin.tsx | 26 +++++++++++++++++++++ src/test/mocks/cockpit/cockpitPermission.ts | 15 ++++++++++++ src/test/mocks/cockpit/index.ts | 2 ++ 3 files changed, 43 insertions(+) create mode 100644 src/Utilities/useIsCockpitAdmin.tsx create mode 100644 src/test/mocks/cockpit/cockpitPermission.ts diff --git a/src/Utilities/useIsCockpitAdmin.tsx b/src/Utilities/useIsCockpitAdmin.tsx new file mode 100644 index 00000000..7aa843e1 --- /dev/null +++ b/src/Utilities/useIsCockpitAdmin.tsx @@ -0,0 +1,26 @@ +import { useEffect, useState } from 'react'; + +import cockpit from 'cockpit'; + +export const useIsCockpitAdmin = () => { + const [isAdmin, setIsAdmin] = useState(false); + + useEffect(() => { + const permission = cockpit.permission({ admin: true }); + + const onChangeListener = () => { + setIsAdmin(permission.allowed); + }; + + permission.addEventListener('changed', onChangeListener); + + // Check the initial state + onChangeListener(); + + return () => { + permission.removeEventListener('changed', onChangeListener); + }; + }, []); + + return isAdmin; +}; diff --git a/src/test/mocks/cockpit/cockpitPermission.ts b/src/test/mocks/cockpit/cockpitPermission.ts new file mode 100644 index 00000000..4e0305d8 --- /dev/null +++ b/src/test/mocks/cockpit/cockpitPermission.ts @@ -0,0 +1,15 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ + +type PermissionObject = { + allowed: boolean; + addEventListener(eventType: string, callback: () => void): void; + removeEventListener(eventType: string, callback: () => void): void; +}; + +export const cockpitPermission = ({ admin = false }): PermissionObject => { + return { + allowed: admin, + addEventListener: (eventType: string, callback: () => void) => {}, + removeEventListener: (eventType: string, callback: () => void) => {}, + }; +}; diff --git a/src/test/mocks/cockpit/index.ts b/src/test/mocks/cockpit/index.ts index 0b7f733b..c813c390 100644 --- a/src/test/mocks/cockpit/index.ts +++ b/src/test/mocks/cockpit/index.ts @@ -4,6 +4,7 @@ import path from 'path'; import { cockpitFile } from './cockpitFile'; import { cockpitHTTP } from './cockpitHTTP'; +import { cockpitPermission } from './cockpitPermission'; type userinfo = { home: string; @@ -31,4 +32,5 @@ export default { }); }, http: cockpitHTTP, + permission: cockpitPermission, };