package main import ( "encoding/json" "errors" "fmt" "io/ioutil" "log" "os" "path" "srs.epita.fr/fic-server/libfic" ) // Check if the challenge is started or not func isStarted() bool { if _, err := os.Stat(path.Join(SubmissionDir, "started")); os.IsNotExist(err) { return false } return true } // Generate my.json and wait.json for a given team func genTeamMyFile(team fic.Team) error { dirPath := path.Join(TeamsDir, fmt.Sprintf("%d", team.Id)) if s, err := os.Stat(dirPath); os.IsNotExist(err) { os.MkdirAll(dirPath, 0777) } else if !s.IsDir() { return errors.New(fmt.Sprintf("%s is not a directory", dirPath)) } if my, err := fic.MyJSONTeam(&team, true); err != nil { return err } else if j, err := json.Marshal(my); err != nil { return err } else if err := ioutil.WriteFile(path.Join(dirPath, "my.json"), j, 0666); err != nil { return err } // Speed up generation when challenge is started if !isStarted() { if my, err := fic.MyJSONTeam(&team, false); err != nil { return err } else if j, err := json.Marshal(my); err != nil { return err } else if err := ioutil.WriteFile(path.Join(dirPath, "wait.json"), j, 0666); err != nil { return err } } return nil } // Generate public my.json file func genMyPublicFile() error { dirPath := path.Join(TeamsDir, "public") if s, err := os.Stat(dirPath); os.IsNotExist(err) { os.MkdirAll(dirPath, 0777) } else if !s.IsDir() { return errors.New(fmt.Sprintf("%s is not a directory", dirPath)) } if my, err := fic.MyJSONTeam(nil, true); err != nil { return err } else if j, err := json.Marshal(my); err != nil { return err } else if err := ioutil.WriteFile(path.Join(dirPath, "my.json"), j, 0666); err != nil { return err } os.Symlink("my.json", path.Join(dirPath, "wait.json")) return nil } // Generate general evemts.json file func genEventsFile() error { if evts, err := fic.GetLastEvents(); err != nil { return err } else if j, err := json.Marshal(evts); err != nil { return err } else if err := ioutil.WriteFile(path.Join(TeamsDir, "events.json"), j, 0666); err != nil { return err } return nil } // Generate general teams.json file func genTeamsFile() error { if teams, err := fic.ExportTeams(); err != nil { return err } else if j, err := json.Marshal(teams); err != nil { return err } else if err := ioutil.WriteFile(path.Join(TeamsDir, "teams.json"), j, 0666); err != nil { return err } return nil } // Generate general themes.json file func genThemesFile() error { if themes, err := fic.ExportThemes(); err != nil { return err } else if j, err := json.Marshal(themes); err != nil { return err } else if err := ioutil.WriteFile(path.Join(TeamsDir, "themes.json"), j, 0666); err != nil { return err } return nil } func genTeamAll(team fic.Team) { if err := genThemesFile(); err != nil { log.Println("themes.json generation error: ", err) } else if err := genTeamsFile(); err != nil { log.Println("teams.json generation error: ", err) } else if err := genTeamMyFile(team); err != nil { log.Println("my.json(", team.Id, ") generation error: ", err) } } func genAll() { if err := genThemesFile(); err != nil { log.Println("themes.json generation error: ", err) } else if err := genTeamsFile(); err != nil { log.Println("teams.json generation error: ", err) } else if err := genEventsFile(); err != nil { log.Println("events.json generation error: ", err) } else if err := genMyPublicFile(); err != nil { log.Println("MyPublic generation error: ", err) } else if teams, err := fic.GetTeams(); err != nil { log.Println("Team retrieval error: ", err) } else { for _, team := range(teams) { if err := genTeamMyFile(team); err != nil { log.Println("Team generation error: ", err) } } } }