41 lines
846 B
Go
41 lines
846 B
Go
package commands
|
|
|
|
import (
|
|
"fmt"
|
|
"slices"
|
|
|
|
"gitea.codeblob.work/pk/hoster/internals/conf"
|
|
"gitea.codeblob.work/pk/hoster/internals/helpers"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
func CmdCheckPort(c *cli.Context) error {
|
|
sitesAvail := conf.App.MustString("nginx.sitesAvailable")
|
|
existingProjects, err := helpers.FindHostConfigs(sitesAvail)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
usedPorts := []int{}
|
|
for _, project := range existingProjects {
|
|
usedPorts = append(usedPorts, project.InternalPort)
|
|
}
|
|
|
|
port := conf.App.Int("nginx.portRangeStart")
|
|
freePort := 0
|
|
for port <= conf.App.Int("nginx.portRangeEnd") {
|
|
if !slices.Contains(usedPorts, port) && helpers.IsFreePort(port) {
|
|
freePort = port
|
|
break
|
|
}
|
|
port++
|
|
}
|
|
|
|
if freePort == 0 {
|
|
return fmt.Errorf("no free port available")
|
|
}
|
|
|
|
fmt.Printf("Free port: %d\n", freePort)
|
|
return nil
|
|
}
|