aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/util/std.go
diff options
context:
space:
mode:
authorOphestra Umiker <cat@ophivana.moe>2024-09-04 01:20:12 +0900
committerOphestra Umiker <cat@ophivana.moe>2024-09-04 01:20:12 +0900
commitd8f76f3b2594db4687c0203c4f2be8d3e4ef7740 (patch)
treeb1d8bfb5250d71094e397f8afa87710de1f1ca2f /internal/util/std.go
parent7e6eb82195c650bc34829e5cca2d2296e78c0707 (diff)
rename to fortify and restructure
More sandbox features will be added and this will no longer track ego's features and behaviour. Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
Diffstat (limited to 'internal/util/std.go')
-rw-r--r--internal/util/std.go75
1 files changed, 75 insertions, 0 deletions
diff --git a/internal/util/std.go b/internal/util/std.go
new file mode 100644
index 00000000..5c37a0d7
--- /dev/null
+++ b/internal/util/std.go
@@ -0,0 +1,75 @@
+package util
+
+import (
+ "errors"
+ "fmt"
+ "io/fs"
+ "os"
+ "path"
+
+ "git.ophivana.moe/cat/fortify/internal/state"
+ "git.ophivana.moe/cat/fortify/internal/system"
+)
+
+const (
+ systemdCheckPath = "/run/systemd/system"
+
+ home = "HOME"
+ xdgConfigHome = "XDG_CONFIG_HOME"
+
+ PulseServer = "PULSE_SERVER"
+ PulseCookie = "PULSE_COOKIE"
+)
+
+// SdBooted implements https://www.freedesktop.org/software/systemd/man/sd_booted.html
+func SdBooted() bool {
+ _, err := os.Stat(systemdCheckPath)
+ if err != nil {
+ if system.V.Verbose {
+ if errors.Is(err, fs.ErrNotExist) {
+ fmt.Println("System not booted through systemd")
+ } else {
+ fmt.Println("Error accessing", systemdCheckPath+":", err.Error())
+ }
+ }
+ return false
+ }
+ return true
+}
+
+// DiscoverPulseCookie try various standard methods to discover the current user's PulseAudio authentication cookie
+func DiscoverPulseCookie() string {
+ if p, ok := os.LookupEnv(PulseCookie); ok {
+ return p
+ }
+
+ if p, ok := os.LookupEnv(home); ok {
+ p = path.Join(p, ".pulse-cookie")
+ if s, err := os.Stat(p); err != nil {
+ if !errors.Is(err, fs.ErrNotExist) {
+ state.Fatal("Error accessing PulseAudio cookie:", err)
+ // unreachable
+ return p
+ }
+ } else if !s.IsDir() {
+ return p
+ }
+ }
+
+ if p, ok := os.LookupEnv(xdgConfigHome); ok {
+ p = path.Join(p, "pulse", "cookie")
+ if s, err := os.Stat(p); err != nil {
+ if !errors.Is(err, fs.ErrNotExist) {
+ state.Fatal("Error accessing PulseAudio cookie:", err)
+ // unreachable
+ return p
+ }
+ } else if !s.IsDir() {
+ return p
+ }
+ }
+
+ state.Fatal(fmt.Sprintf("Cannot locate PulseAudio cookie (tried $%s, $%s/pulse/cookie, $%s/.pulse-cookie)",
+ PulseCookie, xdgConfigHome, home))
+ return ""
+}