56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
|
//go:generate goversioninfo -manifest=setup.exe.manifest
|
||
|
//Add new firewall rule in Go.
|
||
|
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"os/exec"
|
||
|
"io/ioutil"
|
||
|
"syscall"
|
||
|
"fmt"
|
||
|
"log"
|
||
|
"static" // Your fileb0x.
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
|
||
|
// Grab files from virtual filesystem
|
||
|
files, err := static.WalkDirs("", false)
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
log.Println("ALL FILES", files)
|
||
|
}
|
||
|
|
||
|
// here we'll read the file from the virtual file system
|
||
|
b, err := static.ReadFile("server.exe")
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
|
||
|
// Copy file from virtual filesystem to real filesystem
|
||
|
err = ioutil.WriteFile("server.exe", b, 0644)
|
||
|
if err != nil {
|
||
|
fmt.Println("Error creating", "server.exe")
|
||
|
fmt.Println(err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// Get current working directory and set it to 'dir'.
|
||
|
dir, err := os.Getwd()
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
|
||
|
// Set server file path to 'file'
|
||
|
var file = "-Program '" + dir + "\\server.exe'"
|
||
|
//Create firewall rule
|
||
|
cmdinstance := exec.Command("powershell.exe", "-WindowStyle", "Hidden", "-Command", "New-NetFirewallRule", "-DisplayName", "'Go Web Server'", "-Direction", "Inbound", file, "-Action", "Allow")
|
||
|
cmdinstance.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} // Make it silent.
|
||
|
cmdoutput, cmderr := cmdinstance.Output()
|
||
|
if cmderr != nil {
|
||
|
fmt.Println(cmderr)
|
||
|
fmt.Println(cmdoutput)
|
||
|
}
|
||
|
}
|