package api import ( "encoding/json" "errors" "path" "time" "srs.epita.fr/fic-server/libfic" "srs.epita.fr/fic-server/settings" "github.com/julienschmidt/httprouter" ) var TeamsDir string func init() { router.GET("/api/settings.json", apiHandler(getSettings)) router.PUT("/api/settings.json", apiHandler(saveSettings)) router.POST("/api/reset", apiHandler(reset)) } func getSettings(_ httprouter.Params, body []byte) (interface{}, error) { if settings.ExistsSettings(path.Join(TeamsDir, settings.SettingsFile)) { return settings.ReadSettings(path.Join(TeamsDir, settings.SettingsFile)) } else { return settings.FICSettings{"Challenge FIC", "Laboratoire SRS, ÉPITA", time.Unix(0,0), time.Unix(0,0), time.Unix(0,0), fic.FirstBlood, fic.SubmissionCostBase, false, false, false, true, true}, nil } } func saveSettings(_ httprouter.Params, body []byte) (interface{}, error) { var config settings.FICSettings if err := json.Unmarshal(body, &config); err != nil { return nil, err } if err := settings.SaveSettings(path.Join(TeamsDir, settings.SettingsFile), config); err != nil { return nil, err } else { return config, err } } func reset(_ httprouter.Params, body []byte) (interface{}, error) { var m map[string]string if err := json.Unmarshal(body, &m); err != nil { return nil, err } if t, ok := m["type"]; !ok { return nil, errors.New("Field type not found") } else if t == "teams" { return true, fic.ResetTeams() } else if t == "challenges" { return true, fic.ResetExercices() } else if t == "game" { return true, fic.ResetGame() } else { return nil, errors.New("Unknown reset type") } }