Define global default value at initialisation
This commit is contained in:
parent
bf86e40db0
commit
cd5a9d06ea
9 changed files with 31 additions and 33 deletions
|
@ -17,10 +17,10 @@ import (
|
||||||
"github.com/dchest/blake2b"
|
"github.com/dchest/blake2b"
|
||||||
)
|
)
|
||||||
|
|
||||||
var CloudDAVBase string
|
var CloudDAVBase string = "https://srs.epita.fr/owncloud/remote.php/webdav/FIC 2018"
|
||||||
var CloudUsername string
|
var CloudUsername string = "fic"
|
||||||
var CloudPassword string
|
var CloudPassword string = ""
|
||||||
var RapidImport bool
|
var RapidImport bool = false
|
||||||
|
|
||||||
type uploadedFile struct {
|
type uploadedFile struct {
|
||||||
URI string
|
URI string
|
||||||
|
|
|
@ -12,8 +12,6 @@ import (
|
||||||
"github.com/julienschmidt/httprouter"
|
"github.com/julienschmidt/httprouter"
|
||||||
)
|
)
|
||||||
|
|
||||||
var SettingsDir string
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
router.GET("/api/settings.json", apiHandler(getSettings))
|
router.GET("/api/settings.json", apiHandler(getSettings))
|
||||||
router.PUT("/api/settings.json", apiHandler(saveSettings))
|
router.PUT("/api/settings.json", apiHandler(saveSettings))
|
||||||
|
@ -22,8 +20,8 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSettings(_ httprouter.Params, body []byte) (interface{}, error) {
|
func getSettings(_ httprouter.Params, body []byte) (interface{}, error) {
|
||||||
if settings.ExistsSettings(path.Join(SettingsDir, settings.SettingsFile)) {
|
if settings.ExistsSettings(path.Join(settings.SettingsDir, settings.SettingsFile)) {
|
||||||
return settings.ReadSettings(path.Join(SettingsDir, settings.SettingsFile))
|
return settings.ReadSettings(path.Join(settings.SettingsDir, settings.SettingsFile))
|
||||||
} else {
|
} 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
|
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
|
||||||
}
|
}
|
||||||
|
@ -35,7 +33,7 @@ func saveSettings(_ httprouter.Params, body []byte) (interface{}, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := settings.SaveSettings(path.Join(SettingsDir, settings.SettingsFile), config); err != nil {
|
if err := settings.SaveSettings(path.Join(settings.SettingsDir, settings.SettingsFile), config); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
return config, err
|
return config, err
|
||||||
|
|
|
@ -14,6 +14,7 @@ import (
|
||||||
|
|
||||||
"srs.epita.fr/fic-server/admin/api"
|
"srs.epita.fr/fic-server/admin/api"
|
||||||
"srs.epita.fr/fic-server/libfic"
|
"srs.epita.fr/fic-server/libfic"
|
||||||
|
"srs.epita.fr/fic-server/settings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var PKIDir string
|
var PKIDir string
|
||||||
|
@ -66,15 +67,15 @@ func main() {
|
||||||
flag.StringVar(&PKIDir, "pki", "./pki/", "Base directory where found PKI scripts")
|
flag.StringVar(&PKIDir, "pki", "./pki/", "Base directory where found PKI scripts")
|
||||||
flag.StringVar(&StaticDir, "static", "./htdocs-admin/", "Directory containing static files")
|
flag.StringVar(&StaticDir, "static", "./htdocs-admin/", "Directory containing static files")
|
||||||
flag.StringVar(&api.TeamsDir, "teams", "./TEAMS", "Base directory where save teams JSON files")
|
flag.StringVar(&api.TeamsDir, "teams", "./TEAMS", "Base directory where save teams JSON files")
|
||||||
flag.StringVar(&api.SettingsDir, "settings", "./SETTINGS", "Base directory where load and save settings")
|
flag.StringVar(&settings.SettingsDir, "settings", settings.SettingsDir, "Base directory where load and save settings")
|
||||||
flag.StringVar(&fic.FilesDir, "files", "./FILES/", "Base directory where found challenges files, local part")
|
flag.StringVar(&fic.FilesDir, "files", fic.FilesDir, "Base directory where found challenges files, local part")
|
||||||
flag.StringVar(&api.CloudDAVBase, "clouddav", "https://srs.epita.fr/owncloud/remote.php/webdav/FIC 2016",
|
flag.StringVar(&api.CloudDAVBase, "clouddav", api.CloudDAVBase,
|
||||||
"Base directory where found challenges files, cloud part")
|
"Base directory where found challenges files, cloud part")
|
||||||
flag.StringVar(&api.CloudUsername, "clouduser", "fic", "Username used to sync")
|
flag.StringVar(&api.CloudUsername, "clouduser", api.CloudUsername, "Username used to sync")
|
||||||
flag.StringVar(&api.CloudPassword, "cloudpass", "", "Password used to sync")
|
flag.StringVar(&api.CloudPassword, "cloudpass", api.CloudPassword, "Password used to sync")
|
||||||
flag.BoolVar(&api.RapidImport, "rapidimport", false, "Don't try to reimport an existing file")
|
flag.BoolVar(&api.RapidImport, "rapidimport", api.RapidImport, "Don't try to reimport an existing file")
|
||||||
flag.BoolVar(&fic.OptionalDigest, "optionaldigest", false, "Is the digest required when importing files?")
|
flag.BoolVar(&fic.OptionalDigest, "optionaldigest", fic.OptionalDigest, "Is the digest required when importing files?")
|
||||||
flag.BoolVar(&fic.StrongDigest, "strongdigest", false, "Are BLAKE2b digests required instead of SHA-1 or BLAKE2b?")
|
flag.BoolVar(&fic.StrongDigest, "strongdigest", fic.StrongDigest, "Are BLAKE2b digests required instead of SHA-1 or BLAKE2b?")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
log.SetPrefix("[admin] ")
|
log.SetPrefix("[admin] ")
|
||||||
|
@ -94,7 +95,7 @@ func main() {
|
||||||
if api.TeamsDir, err = filepath.Abs(api.TeamsDir); err != nil {
|
if api.TeamsDir, err = filepath.Abs(api.TeamsDir); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
if api.SettingsDir, err = filepath.Abs(api.SettingsDir); err != nil {
|
if settings.SettingsDir, err = filepath.Abs(settings.SettingsDir); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
if fic.FilesDir, err = filepath.Abs(fic.FilesDir); err != nil {
|
if fic.FilesDir, err = filepath.Abs(fic.FilesDir); err != nil {
|
||||||
|
|
|
@ -14,7 +14,7 @@ import (
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
api.Router().GET("/time.json", func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
api.Router().GET("/time.json", func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
if config, err := settings.ReadSettings(path.Join(api.SettingsDir, settings.SettingsFile)); err != nil {
|
if config, err := settings.ReadSettings(path.Join(settings.SettingsDir, settings.SettingsFile)); err != nil {
|
||||||
http.Error(w, fmt.Sprintf("{\"errmsg\":%q}", err), http.StatusInternalServerError)
|
http.Error(w, fmt.Sprintf("{\"errmsg\":%q}", err), http.StatusInternalServerError)
|
||||||
} else {
|
} else {
|
||||||
time.ChallengeStart = config.Start
|
time.ChallengeStart = config.Start
|
||||||
|
|
|
@ -17,7 +17,6 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var TeamsDir string
|
var TeamsDir string
|
||||||
var SettingsDir string
|
|
||||||
var SubmissionDir string
|
var SubmissionDir string
|
||||||
|
|
||||||
func watchsubdir(watcher *fsnotify.Watcher, pathname string) error {
|
func watchsubdir(watcher *fsnotify.Watcher, pathname string) error {
|
||||||
|
@ -67,7 +66,7 @@ func reloadSettings(config settings.FICSettings) {
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var dsn = flag.String("dsn", fic.DSNGenerator(), "DSN to connect to the MySQL server")
|
var dsn = flag.String("dsn", fic.DSNGenerator(), "DSN to connect to the MySQL server")
|
||||||
flag.StringVar(&SettingsDir, "settings", "./SETTINGS", "Base directory where load and save settings")
|
flag.StringVar(&settings.SettingsDir, "settings", settings.SettingsDir, "Base directory where load and save settings")
|
||||||
flag.StringVar(&SubmissionDir, "submission", "./submissions", "Base directory where save submissions")
|
flag.StringVar(&SubmissionDir, "submission", "./submissions", "Base directory where save submissions")
|
||||||
flag.StringVar(&TeamsDir, "teams", "./TEAMS", "Base directory where save teams JSON files")
|
flag.StringVar(&TeamsDir, "teams", "./TEAMS", "Base directory where save teams JSON files")
|
||||||
flag.StringVar(&fic.FilesDir, "files", "/files", "Request path prefix to reach files")
|
flag.StringVar(&fic.FilesDir, "files", "/files", "Request path prefix to reach files")
|
||||||
|
@ -76,7 +75,7 @@ func main() {
|
||||||
|
|
||||||
log.SetPrefix("[backend] ")
|
log.SetPrefix("[backend] ")
|
||||||
|
|
||||||
SettingsDir = path.Clean(SettingsDir)
|
settings.SettingsDir = path.Clean(settings.SettingsDir)
|
||||||
SubmissionDir = path.Clean(SubmissionDir)
|
SubmissionDir = path.Clean(SubmissionDir)
|
||||||
TeamsDir = path.Clean(TeamsDir)
|
TeamsDir = path.Clean(TeamsDir)
|
||||||
|
|
||||||
|
@ -96,7 +95,7 @@ func main() {
|
||||||
defer fic.DBClose()
|
defer fic.DBClose()
|
||||||
|
|
||||||
// Load configuration
|
// Load configuration
|
||||||
settings.LoadAndWatchSettings(path.Join(SettingsDir, settings.SettingsFile), reloadSettings)
|
settings.LoadAndWatchSettings(path.Join(settings.SettingsDir, settings.SettingsFile), reloadSettings)
|
||||||
|
|
||||||
log.Println("Registering directory events...")
|
log.Println("Registering directory events...")
|
||||||
watcher, err := fsnotify.NewWatcher()
|
watcher, err := fsnotify.NewWatcher()
|
||||||
|
|
|
@ -17,7 +17,7 @@ func main() {
|
||||||
var bind = flag.String("bind", "127.0.0.1:8080", "Bind port/socket")
|
var bind = flag.String("bind", "127.0.0.1:8080", "Bind port/socket")
|
||||||
var prefix = flag.String("prefix", "/", "Request path prefix to strip (from proxy)")
|
var prefix = flag.String("prefix", "/", "Request path prefix to strip (from proxy)")
|
||||||
var teamsDir = flag.String("teams", "./TEAMS/", "Base directory where find existing teams")
|
var teamsDir = flag.String("teams", "./TEAMS/", "Base directory where find existing teams")
|
||||||
flag.StringVar(&SettingsDir, "settings", "./SETTINGS/", "Base directory where load and save settings")
|
flag.StringVar(&settings.SettingsDir, "settings", settings.SettingsDir, "Base directory where load and save settings")
|
||||||
flag.StringVar(&SubmissionDir, "submission", "./submissions/", "Base directory where save submissions")
|
flag.StringVar(&SubmissionDir, "submission", "./submissions/", "Base directory where save submissions")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ func main() {
|
||||||
*prefix = strings.TrimRight(*prefix, "/")
|
*prefix = strings.TrimRight(*prefix, "/")
|
||||||
|
|
||||||
// Load configuration
|
// Load configuration
|
||||||
settings.LoadAndWatchSettings(path.Join(SettingsDir, settings.SettingsFile), reloadSettings)
|
settings.LoadAndWatchSettings(path.Join(settings.SettingsDir, settings.SettingsFile), reloadSettings)
|
||||||
|
|
||||||
// Register handlers
|
// Register handlers
|
||||||
http.Handle(fmt.Sprintf("%s/chname/", *prefix), http.StripPrefix(fmt.Sprintf("%s/chname/", *prefix), submissionTeamChecker{"name change", ChNameHandler, *teamsDir}))
|
http.Handle(fmt.Sprintf("%s/chname/", *prefix), http.StripPrefix(fmt.Sprintf("%s/chname/", *prefix), submissionTeamChecker{"name change", ChNameHandler, *teamsDir}))
|
||||||
|
|
|
@ -12,12 +12,10 @@ import (
|
||||||
|
|
||||||
const startedFile = "started"
|
const startedFile = "started"
|
||||||
|
|
||||||
var SettingsDir string
|
|
||||||
|
|
||||||
var touchTimer *time.Timer = nil
|
var touchTimer *time.Timer = nil
|
||||||
|
|
||||||
func touchStartedFile() {
|
func touchStartedFile() {
|
||||||
if fd, err := os.Create(path.Join(SettingsDir, startedFile)); err == nil {
|
if fd, err := os.Create(path.Join(settings.SettingsDir, startedFile)); err == nil {
|
||||||
log.Println("Started! Go, Go, Go!!")
|
log.Println("Started! Go, Go, Go!!")
|
||||||
fd.Close()
|
fd.Close()
|
||||||
} else {
|
} else {
|
||||||
|
@ -34,8 +32,8 @@ func reloadSettings(config settings.FICSettings) {
|
||||||
if startSub > 0 {
|
if startSub > 0 {
|
||||||
log.Println("Challenge will starts at", config.Start, "in", startSub)
|
log.Println("Challenge will starts at", config.Start, "in", startSub)
|
||||||
|
|
||||||
if _, err := os.Stat(path.Join(SettingsDir, startedFile)); !os.IsNotExist(err) {
|
if _, err := os.Stat(path.Join(settings.SettingsDir, startedFile)); !os.IsNotExist(err) {
|
||||||
os.Remove(path.Join(SettingsDir, startedFile))
|
os.Remove(path.Join(settings.SettingsDir, startedFile))
|
||||||
}
|
}
|
||||||
|
|
||||||
touchTimer = time.AfterFunc(config.Start.Sub(time.Now().Add(time.Duration(1 * time.Second))), touchStartedFile)
|
touchTimer = time.AfterFunc(config.Start.Sub(time.Now().Add(time.Duration(1 * time.Second))), touchStartedFile)
|
||||||
|
|
|
@ -13,9 +13,9 @@ import (
|
||||||
"github.com/dchest/blake2b"
|
"github.com/dchest/blake2b"
|
||||||
)
|
)
|
||||||
|
|
||||||
var FilesDir string
|
var FilesDir string = "./FILES/"
|
||||||
var OptionalDigest bool
|
var OptionalDigest bool = false
|
||||||
var StrongDigest bool
|
var StrongDigest bool = false
|
||||||
|
|
||||||
type EFile struct {
|
type EFile struct {
|
||||||
Id int64 `json:"id"`
|
Id int64 `json:"id"`
|
||||||
|
|
|
@ -12,6 +12,8 @@ import (
|
||||||
|
|
||||||
const SettingsFile = "settings.json"
|
const SettingsFile = "settings.json"
|
||||||
|
|
||||||
|
var SettingsDir string = "./SETTINGS"
|
||||||
|
|
||||||
type FICSettings struct {
|
type FICSettings struct {
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
Authors string `json:"authors"`
|
Authors string `json:"authors"`
|
||||||
|
|
Reference in a new issue