create and delete server initial setup

This commit is contained in:
Fran Jurmanović
2025-06-01 13:43:54 +02:00
parent d08695025a
commit 8a3b11b1ef
14 changed files with 929 additions and 38 deletions

View File

@@ -0,0 +1,106 @@
package service
import (
"acc-server-manager/local/utl/command"
"acc-server-manager/local/utl/logging"
"fmt"
)
type FirewallService struct {
executor *command.CommandExecutor
}
func NewFirewallService() *FirewallService {
return &FirewallService{
executor: &command.CommandExecutor{
ExePath: "netsh",
LogOutput: true,
},
}
}
func (s *FirewallService) CreateServerRules(serverName string, tcpPorts, udpPorts []int) error {
for _, port := range tcpPorts {
ruleName := fmt.Sprintf("%s-TCP-%d", serverName, port)
builder := command.NewCommandBuilder().
Add("advfirewall").
Add("firewall").
Add("add").
Add("rule").
AddPair("name", ruleName).
AddPair("dir", "in").
AddPair("action", "allow").
AddPair("protocol", "TCP").
AddFlag("localport", port)
if err := s.executor.ExecuteWithBuilder(builder); err != nil {
return fmt.Errorf("failed to create TCP firewall rule for port %d: %v", port, err)
}
logging.Info("Created TCP firewall rule: %s", ruleName)
}
for _, port := range udpPorts {
ruleName := fmt.Sprintf("%s-UDP-%d", serverName, port)
builder := command.NewCommandBuilder().
Add("advfirewall").
Add("firewall").
Add("add").
Add("rule").
AddPair("name", ruleName).
AddPair("dir", "in").
AddPair("action", "allow").
AddPair("protocol", "UDP").
AddFlag("localport", port)
if err := s.executor.ExecuteWithBuilder(builder); err != nil {
return fmt.Errorf("failed to create UDP firewall rule for port %d: %v", port, err)
}
logging.Info("Created UDP firewall rule: %s", ruleName)
}
return nil
}
func (s *FirewallService) DeleteServerRules(serverName string, tcpPorts, udpPorts []int) error {
for _, port := range tcpPorts {
ruleName := fmt.Sprintf("%s-TCP-%d", serverName, port)
builder := command.NewCommandBuilder().
Add("advfirewall").
Add("firewall").
Add("delete").
Add("rule").
AddPair("name", ruleName)
if err := s.executor.ExecuteWithBuilder(builder); err != nil {
return fmt.Errorf("failed to delete TCP firewall rule for port %d: %v", port, err)
}
logging.Info("Deleted TCP firewall rule: %s", ruleName)
}
for _, port := range udpPorts {
ruleName := fmt.Sprintf("%s-UDP-%d", serverName, port)
builder := command.NewCommandBuilder().
Add("advfirewall").
Add("firewall").
Add("delete").
Add("rule").
AddPair("name", ruleName)
if err := s.executor.ExecuteWithBuilder(builder); err != nil {
return fmt.Errorf("failed to delete UDP firewall rule for port %d: %v", port, err)
}
logging.Info("Deleted UDP firewall rule: %s", ruleName)
}
return nil
}
func (s *FirewallService) UpdateServerRules(serverName string, tcpPorts, udpPorts []int) error {
// First delete existing rules
if err := s.DeleteServerRules(serverName, tcpPorts, udpPorts); err != nil {
return err
}
// Then create new rules
return s.CreateServerRules(serverName, tcpPorts, udpPorts)
}