server/frontend/main.go

57 lines
2.5 KiB
Go
Raw Normal View History

2016-01-06 18:30:57 +00:00
package main
import (
"flag"
"fmt"
"log"
"net/http"
"os"
2016-01-23 11:26:20 +00:00
"path"
"strings"
fronttime "srs.epita.fr/fic-server/frontend/time"
"srs.epita.fr/fic-server/settings"
2016-01-06 18:30:57 +00:00
)
func main() {
2016-11-19 15:17:53 +00:00
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)")
2017-11-22 00:52:08 +00:00
var teamsDir = flag.String("teams", "./TEAMS/", "Base directory where find existing teams")
flag.StringVar(&settings.SettingsDir, "settings", settings.SettingsDir, "Base directory where read settings")
flag.StringVar(&startedFile, "startedFile", startedFile, "Path to the file to create/remove whether or not the challenge is running")
2016-01-06 18:30:57 +00:00
flag.StringVar(&SubmissionDir, "submission", "./submissions/", "Base directory where save submissions")
flag.Parse()
2016-10-13 17:02:41 +00:00
log.SetPrefix("[frontend] ")
startedFile = path.Clean(startedFile)
SubmissionDir = path.Clean(SubmissionDir)
TmpSubmissionDir = path.Join(SubmissionDir, ".tmp")
2016-01-06 18:30:57 +00:00
log.Println("Creating submission directory...")
if _, err := os.Stat(TmpSubmissionDir); os.IsNotExist(err) {
if err := os.MkdirAll(TmpSubmissionDir, 0700); err != nil {
2016-01-06 18:30:57 +00:00
log.Fatal("Unable to create submission directory: ", err)
}
}
*prefix = strings.TrimRight(*prefix, "/")
// Load configuration
settings.LoadAndWatchSettings(path.Join(settings.SettingsDir, settings.SettingsFile), reloadSettings)
2016-01-23 11:26:20 +00:00
// Register handlers
2017-11-22 00:52:08 +00:00
http.Handle(fmt.Sprintf("%s/chname/", *prefix), http.StripPrefix(fmt.Sprintf("%s/chname/", *prefix), submissionTeamChecker{"name change", ChNameHandler, *teamsDir}))
http.Handle(fmt.Sprintf("%s/openhint/", *prefix), http.StripPrefix(fmt.Sprintf("%s/openhint/", *prefix), submissionTeamChecker{"opening hint", HintHandler, *teamsDir}))
2017-12-21 21:18:18 +00:00
http.Handle(fmt.Sprintf("%s/registration/", *prefix), http.StripPrefix(fmt.Sprintf("%s/registration/", *prefix), submissionChecker{"registration", RegistrationHandler}))
http.Handle(fmt.Sprintf("%s/resolution/", *prefix), http.StripPrefix(fmt.Sprintf("%s/resolution/", *prefix), ResolutionHandler{}))
2017-11-22 00:52:08 +00:00
http.Handle(fmt.Sprintf("%s/submission/", *prefix), http.StripPrefix(fmt.Sprintf("%s/submission/", *prefix), submissionTeamChecker{"submission", SubmissionHandler, *teamsDir}))
http.Handle(fmt.Sprintf("%s/time.json", *prefix), http.StripPrefix(*prefix, fronttime.TimeHandler{}))
2016-01-06 18:30:57 +00:00
// Serve pages
2016-01-06 18:30:57 +00:00
log.Println(fmt.Sprintf("Ready, listening on %s", *bind))
if err := http.ListenAndServe(*bind, nil); err != nil {
log.Fatal("Unable to listen and serve: ", err)
}
}