package utils import ( "fmt" "os" "os/exec" "runtime" "strings" "gitea.tecamino.com/paadi/tecamino-logger/logging" ) func OpenBrowser(logger *logging.Logger, url string) error { var commands [][]string switch runtime.GOOS { case "windows": logger.Debug("OpenBrowser", "os: windows") commands = [][]string{ // Chrome (most common) {`C:\Program Files\Google\Chrome\Application\chrome.exe`, "--kiosk", url}, {`C:\Program Files (x86)\Google\Chrome\Application\chrome.exe`, "--kiosk", url}, // Edge (default on modern Windows) {`C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe`, "--kiosk", url}, {`C:\Program Files\Microsoft\Edge\Application\msedge.exe`, "--kiosk", url}, // Firefox (no true kiosk, but fullscreen) {`C:\Program Files\Mozilla Firefox\firefox.exe`, "--kiosk", url}, {`C:\Program Files (x86)\Mozilla Firefox\firefox.exe`, "--kiosk", url}, // System default browser (always works) {"rundll32", "url.dll,FileProtocolHandler", url}, } case "darwin": logger.Debug("OpenBrowser", "os: windows") commands = [][]string{ // Chrome {"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", "--kiosk", url}, // Edge {"/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", "--kiosk", url}, // Firefox {"/Applications/Firefox.app/Contents/MacOS/firefox", "--kiosk", url}, // Safari (no kiosk flag, opens normally) {"open", "-a", "Safari", url}, // System default browser {"open", url}, } default: // Linux logger.Debug("OpenBrowser", "os: linux") if os.Getenv("DISPLAY") == "" && os.Getenv("WAYLAND_DISPLAY") == "" && os.Getenv("XDG_SESSION_TYPE") != "wayland" { return fmt.Errorf("os is running in headless mode; do not start browser") } commands = [][]string{ // Chromium / Chrome {"chromium-browser", "--kiosk", url}, {"chromium", "--kiosk", url}, {"google-chrome", "--kiosk", url}, // Firefox {"firefox", "--kiosk", url}, // System default browser (best universal fallback) {"xdg-open", url}, } } for _, cmd := range commands { execCmd := exec.Command(cmd[0], cmd[1:]...) if err := execCmd.Start(); err == nil { logger.Debug("OpenBrowser", "browser started with command: "+strings.Join(cmd, ", ")) return nil } else { return err } } return fmt.Errorf("could not open browser") }