package main import ( "encoding/json" "fmt" "io/ioutil" "log" "math/rand" "os" "path" "srs.epita.fr/fic-server/libfic" ) var ( allowRegistration = false canJoinTeam = false ) type uTeamRegistration struct { TeamName string JTeam int64 Members []fic.Member } func registrationProcess(team fic.Team, members []fic.Member, team_id string) { for _, m := range members { // Force Id to 0, as it shouldn't have been defined yet m.Id = 0 if err := team.GainMember(m); err != nil { log.Println("[WRN] Unable to add member (", m, ") to team (", team, "):", err) } } teamDirPath := fmt.Sprintf("%d", team.Id) // Create team directories into TEAMS if err := os.MkdirAll(path.Join(TeamsDir, teamDirPath), 0777); err != nil { log.Println("[ERR]", err) } if err := os.Symlink(teamDirPath, path.Join(TeamsDir, team_id)); err != nil { log.Println("[ERR]", err) } genTeamQueue <- &team appendGenQueue(genStruct{Type: GenTeams}) } func treatRegistration(pathname string, team_id string) { var nTeam uTeamRegistration if !allowRegistration { log.Println("[ERR] Registration received, whereas disabled. Skipped.") } else if cnt_raw, err := ioutil.ReadFile(pathname); err != nil { log.Println("[ERR]", err) } else if err := json.Unmarshal(cnt_raw, &nTeam); err != nil { log.Println("[ERR]", err) } else if nTeam.JTeam > 0 { if !canJoinTeam { log.Println("[ERR] Join team received, whereas disabled. Skipped.") } else if len(nTeam.Members) != 1 { log.Printf("[ERR] Join team received, with incorrect member length: %d. Skipped.\n", len(nTeam.Members)) } else if team, err := fic.GetTeam(nTeam.JTeam); err != nil { log.Printf("[ERR] Unable to join registered team %s: %s\n", nTeam.JTeam, err) } else { registrationProcess(team, nTeam.Members, team_id) if err := os.Remove(pathname); err != nil { log.Println("[WRN]", err) } } } else if validTeamName(nTeam.TeamName) { if team, err := fic.CreateTeam(nTeam.TeamName, uint32(rand.Int31n(16581376))); err != nil { log.Printf("[ERR] Unable to register new team %s: %s\n", nTeam.TeamName, err) } else { registrationProcess(team, nTeam.Members, team_id) if err := os.Remove(pathname); err != nil { log.Println("[WRN]", err) } if _, err := fic.NewEvent(fmt.Sprintf("Souhaitons bonne chance à l'équipe %s qui vient de nous rejoindre !", team.Name), "info"); err != nil { log.Println("[WRN] Unable to create event:", err) } appendGenQueue(genStruct{Type: GenEvents}) } } }