Skip to content

Commit

Permalink
Fix team serialization argument, update YAML tags, and enhance networ…
Browse files Browse the repository at this point in the history
…k configuration

FIX : now generate working yaml file for a team
  • Loading branch information
Lolozendev committed Nov 3, 2024
1 parent 09f9206 commit 7020dc6
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 23 deletions.
2 changes: 1 addition & 1 deletion cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ func main() {

logger.Info("creating team ", os.Args[3])

serialized, err := serializer.SerializeTeam(1, os.Args[3], []string{"user1", "user2"})
serialized, err := serializer.SerializeTeam(1, os.Args[4], []string{"user1", "user2"})
if err != nil {
logger.Error("Error: ", err)
return
Expand Down
7 changes: 4 additions & 3 deletions internal/model/network/network.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package network

type Network struct {
TeamNetwork TeamNetwork `yaml:"<TEAM_NUMBER>-Network"`
TeamNetwork TeamNetwork `yaml:"<TEAM_NAME>-Network"`
}

type TeamNetwork struct {
Expand All @@ -10,11 +10,12 @@ type TeamNetwork struct {
}

type Ipam struct {
Config Config `yaml:"config"`
Config []Config `yaml:"config"`
}

type Config struct {
Subnet string `yaml:"subnet"`
Subnet string `yaml:"subnet"`
Gateway string `yaml:"gateway"`
}

/*
Expand Down
4 changes: 2 additions & 2 deletions internal/model/services/challenge.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package services

type Challenge struct {
Name string
Name string `yaml:"-"`
Build string `yaml:"build"`
ContainerName string `yaml:"<TEAM_NAME>-<CHALLENGE_NAME>"`
ContainerName string `yaml:"container_name"`
EnvFile string `yaml:"env_file,omitempty"`
Networks ChallengeNetworks `yaml:"networks"`
}
Expand Down
4 changes: 2 additions & 2 deletions internal/model/services/dnsmasq.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@ type Dnsmasq struct {
}

type DnsmasqNetworks struct {
TeamNetwork DnsmasqTeamNetwork `yaml:"<TEAM_NAME>-Network"`
TeamNetwork DnsmasqNetwork `yaml:"<TEAM_NAME>-Network"`
}

type DnsmasqTeamNetwork struct {
type DnsmasqNetwork struct {
Ipv4Address string `yaml:"ipv4_address"`
}

Expand Down
3 changes: 1 addition & 2 deletions internal/model/services/services.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,12 @@ package services
type Services struct {
Wireguard Wireguard `yaml:"wireguard"`
Dnsmasq Dnsmasq `yaml:"dnsmasq"`
Challenge []Challenge
}

/*
services:
{wireguard ...}
{dnsmasq ...}
{challenges ...}
{challenges ...} // This is a list of challenges it is concatenated in the template that's why it's not here
[ challenge ... ]
*/
2 changes: 1 addition & 1 deletion internal/model/services/wiregard.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package services

type Wireguard struct {
ServerAddress string
ServerAddress string `yaml:"-"`
Image string `yaml:"image"`
ContainerName string `yaml:"container_name"`
Ports []string `yaml:"ports"`
Expand Down
6 changes: 3 additions & 3 deletions internal/model/team.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ type Member struct {
}

type Team struct {
Name string
Number int
Members []Member
Name string `yaml:"-"`
Number int `yaml:"-"`
Members []Member `yaml:"-"`
Network network.Network `yaml:"networks"`
Services services.Services `yaml:"services"`
}
Expand Down
44 changes: 35 additions & 9 deletions serializer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,19 +53,24 @@ func makeChallengeSection(challenges []services.Challenge, teamName string) (str
logger.Errorf("Error: %v", err)
return "", err
}
challengeYaml := string(challengeBytes)

_, err = fmt.Fprintln(&challengesSection, strings.ReplaceAll(challengeYaml, "<TEAM_NAME>", teamName))
_, err = fmt.Fprintln(&challengesSection, fmt.Sprintf("%s:", challenge.Name))
if err != nil {
logger.Error("Error: Cannot append challenge to challenges section")
logger.Error("Error: Cannot append challenge name key to challenges section")
return "", err
}

_, err = fmt.Fprintln(&challengesSection, strings.ReplaceAll(challengeYaml, "<CHALLENGE_NAME>", challenge.Name))
challengeYaml := string(challengeBytes)
challengeYaml = strings.ReplaceAll(challengeYaml, "<TEAM_NAME>", teamName)
challengeYaml = strings.ReplaceAll(challengeYaml, "<CHALLENGE_NAME>", challenge.Name)
challengeYaml = indentText(challengeYaml, 4)

_, err = fmt.Fprintln(&challengesSection, challengeYaml)
if err != nil {
logger.Error("Error: Cannot append challenge to challenges section")
return "", err
}

}

challengesYaml := indentText(challengesSection.String(), 4)
Expand All @@ -81,7 +86,8 @@ func makeTeamSection(team *model.Team) (string, error) {
}
teamYaml := string(teamBytes)

teamYaml = strings.ReplaceAll(teamYaml, "<TEAM_NAME>", teamYaml)
teamYaml = strings.ReplaceAll(teamYaml, "<TEAM_NAME>", team.Name)
teamYaml = strings.ReplaceAll(teamYaml, "<TEAM_NUMBER>", string(team.Number))

return teamYaml, nil
}
Expand Down Expand Up @@ -133,8 +139,11 @@ func makeTeamStructure(teamNumber int, teamName string, teamMembers []string) (*
TeamNetwork: network.TeamNetwork{
Driver: "bridge",
Ipam: network.Ipam{
Config: network.Config{
Subnet: fmt.Sprintf("10.0.%d.0/24", teamNumber),
Config: []network.Config{
{
Subnet: fmt.Sprintf("10.0.%d.0/24", teamNumber),
Gateway: fmt.Sprintf("10.0.%d.254", teamNumber),
},
},
},
},
Expand All @@ -143,14 +152,31 @@ func makeTeamStructure(teamNumber int, teamName string, teamMembers []string) (*
Wireguard: services.Wireguard{
Image: "linuxserver/wireguard",
ContainerName: fmt.Sprintf("%s-wireguard", teamName),
Ports: []string{fmt.Sprintf("50%3d:51820/udp", teamNumber)},
Ports: []string{fmt.Sprintf("50%03d:51820/udp", teamNumber)},
Environment: []string{
"PUID=1000",
"PGID=1000",
"TZ=Europe/Paris",
fmt.Sprintf("PEERS=%d", len(teamMembers)), //TODO: make teamMembers a list of team members like: "user1, user2, user3"
fmt.Sprintf("PEERDNS=10.0.%d.253", teamNumber),
fmt.Sprintf("ALLOWEDIPS=10.0.%d.0/24", teamNumber),
"SERVERURL=127.0.0.1", //replace with the server's IP
fmt.Sprintf("SERVERPORT=50%03d", teamNumber),
},
Volumes: []string{"./config:/config"},
CapAdd: []string{"NET_ADMIN"},
Network: services.WiregardNetwork{
TeamNetwork: services.WiregardTeamNetwork{
Ipv4Address: fmt.Sprintf("10.0.%d.252", teamNumber),
},
},
},
Dnsmasq: services.Dnsmasq{
Image: "strm/dnsmasq",
ContainerName: fmt.Sprintf("%s-dnsmasq", teamName),
Volumes: []string{"./dns/dnsmasq.conf:/etc/dnsmasq.conf"},
Network: services.DnsmasqNetworks{
TeamNetwork: services.DnsmasqTeamNetwork{
TeamNetwork: services.DnsmasqNetwork{
Ipv4Address: fmt.Sprintf("10.0.%d.253", teamNumber),
},
},
Expand Down

0 comments on commit 7020dc6

Please sign in to comment.