Files
overlord/Overlord-Client/cmd/agent/sysinfo/darwin_permissions_cgo.go
T

80 lines
2.2 KiB
Go
Raw Normal View History

2026-06-04 20:07:31 -05:00
//go:build darwin && cgo
package sysinfo
/*
2026-06-04 20:54:33 -05:00
#cgo LDFLAGS: -framework ApplicationServices -framework CoreGraphics -framework CoreFoundation -framework IOKit
2026-06-04 20:07:31 -05:00
#include <ApplicationServices/ApplicationServices.h>
2026-06-04 20:41:10 -05:00
#include <CoreFoundation/CoreFoundation.h>
2026-06-04 20:07:31 -05:00
#include <CoreGraphics/CoreGraphics.h>
2026-06-04 20:54:33 -05:00
#include <IOKit/hidsystem/IOHIDLib.h>
2026-06-04 20:07:31 -05:00
#include <stdbool.h>
extern bool CGPreflightScreenCaptureAccess(void) __attribute__((weak_import));
2026-06-04 20:41:10 -05:00
extern bool CGRequestScreenCaptureAccess(void) __attribute__((weak_import));
2026-06-04 20:07:31 -05:00
static int checkAccessibilityPermission(void) {
return AXIsProcessTrusted() ? 1 : 0;
}
static int checkScreenRecordingPermission(void) {
if (CGPreflightScreenCaptureAccess == NULL) return 0;
return CGPreflightScreenCaptureAccess() ? 1 : 0;
}
2026-06-04 20:41:10 -05:00
2026-06-04 20:54:33 -05:00
static int checkInputMonitoringPermission(void) {
return IOHIDCheckAccess(kIOHIDRequestTypeListenEvent) == kIOHIDAccessTypeGranted ? 1 : 0;
}
2026-06-04 20:41:10 -05:00
static int requestAccessibilityPermission(void) {
const void *keys[] = { kAXTrustedCheckOptionPrompt };
const void *values[] = { kCFBooleanTrue };
CFDictionaryRef opts = CFDictionaryCreate(
kCFAllocatorDefault,
keys,
values,
1,
&kCFCopyStringDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks
);
Boolean trusted = AXIsProcessTrustedWithOptions(opts);
if (opts != NULL) CFRelease(opts);
return trusted ? 1 : 0;
}
static int requestScreenRecordingPermission(void) {
if (CGRequestScreenCaptureAccess == NULL) return checkScreenRecordingPermission();
return CGRequestScreenCaptureAccess() ? 1 : 0;
}
2026-06-04 20:54:33 -05:00
static int requestInputMonitoringPermission(void) {
return IOHIDRequestAccess(kIOHIDRequestTypeListenEvent) == kIOHIDAccessTypeGranted ? 1 : 0;
}
2026-06-04 20:07:31 -05:00
*/
import "C"
func darwinAccessibilityPermission() bool {
return C.checkAccessibilityPermission() == 1
}
func darwinScreenRecordingPermission() bool {
return C.checkScreenRecordingPermission() == 1
}
2026-06-04 20:41:10 -05:00
2026-06-04 20:54:33 -05:00
func darwinInputMonitoringPermission() bool {
return C.checkInputMonitoringPermission() == 1
}
2026-06-04 20:41:10 -05:00
func darwinRequestAccessibilityPermission() bool {
return C.requestAccessibilityPermission() == 1
}
func darwinRequestScreenRecordingPermission() bool {
return C.requestScreenRecordingPermission() == 1
}
2026-06-04 20:54:33 -05:00
func darwinRequestInputMonitoringPermission() bool {
return C.requestInputMonitoringPermission() == 1
}