package api import ( "encoding/json" "errors" "path" "srs.epita.fr/fic-server/admin/sync" "srs.epita.fr/fic-server/libfic" "srs.epita.fr/fic-server/settings" "github.com/julienschmidt/httprouter" ) func init() { router.GET("/api/settings-ro.json", apiHandler(getROSettings)) router.GET("/api/settings.json", apiHandler(getSettings)) router.PUT("/api/settings.json", apiHandler(saveSettings)) router.POST("/api/reset", apiHandler(reset)) } func getROSettings(_ httprouter.Params, body []byte) (interface{}, error) { syncMtd := "Disabled" if sync.GlobalImporter != nil { syncMtd = sync.GlobalImporter.Kind() } return map[string]interface{}{ "sync": syncMtd, }, nil } func getSettings(_ httprouter.Params, body []byte) (interface{}, error) { return settings.ReadSettings(path.Join(settings.SettingsDir, settings.SettingsFile)) } 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(settings.SettingsDir, settings.SettingsFile), config); err != nil { return nil, err } else { ApplySettings(config) return config, err } } func ApplySettings(config settings.FICSettings) { fic.PartialValidation = config.PartialValidation fic.UnlockedChallenges = !config.EnableExerciceDepend fic.FirstBlood = config.FirstBlood fic.SubmissionCostBase = config.SubmissionCostBase fic.HintCoefficient = config.HintCurCoefficient fic.WChoiceCoefficient = config.WChoiceCurCoefficient fic.SubmissionCostBase = config.SubmissionCostBase fic.SubmissionUniqueness = config.SubmissionUniqueness } 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") } }