mirror-cockpit-project-cockpit/pkg/packagekit/utils.tsx
2026-10-29 11:57:58 +01:00

56 lines
2.2 KiB
TypeScript

// SPDX-License-Identifier: LGPL-2.1-or-later
import cockpit from "cockpit";
export function debug(...args: unknown[]) {
if (window.debugging === 'all' || window.debugging?.includes('packagekit'))
console.debug('packagekit:', ...args);
}
/**
* Check Red Hat subscription-manager if if this is an unregistered RHEL
* system. If subscription-manager is not installed or required (not a
* Red Hat product), nothing happens.
*
* callback: Called with a boolean (true: registered, false: not registered)
* after querying subscription-manager once, and whenever the value
* changes.
*/
export function watchRedHatSubscription(callback: (registered: boolean) => void) {
const sm = cockpit.dbus("com.redhat.RHSM1");
function check() {
sm.call(
"/com/redhat/RHSM1/Entitlement", "com.redhat.RHSM1.Entitlement", "GetStatus", ["", ""])
.then(([reply]) => {
const result = reply as string;
const status = JSON.parse(result);
callback(status.valid);
})
.catch(ex => console.warn("Failed to query RHEL subscription status:", JSON.stringify(ex)));
}
// check if subscription is required on this system, i.e. whether there are any installed products
sm.call("/com/redhat/RHSM1/Products", "com.redhat.RHSM1.Products", "ListInstalledProducts", ["", {}, ""])
.then(([reply]) => {
const result = reply as string;
const products = JSON.parse(result);
if (products.length === 0)
return;
// check if this is an unregistered RHEL system
sm.subscribe(
{
path: "/com/redhat/RHSM1/Entitlement",
interface: "com.redhat.RHSM1.Entitlement",
member: "EntitlementChanged"
},
() => check()
);
check();
})
.catch(ex => {
if (ex.problem !== "not-found")
console.warn("Failed to query RHSM products:", JSON.stringify(ex));
});
}