131 lines
3.3 KiB
Go
131 lines
3.3 KiB
Go
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, team.InitialName)
|
|
|
|
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 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 := 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)
|
|
}
|
|
}
|
|
}
|
|
}
|