package main import ( "flag" "fmt" "log" "net/http" "os" "path/filepath" "srs.epita.fr/fic-server/libfic" ) var PKIDir string var SubmissionDir string var BaseURL string var CloudDAVBase string var CloudUsername string var CloudPassword string func main() { var bind = flag.String("bind", "0.0.0.0:8081", "Bind port/socket") var dsn = flag.String("dsn", "fic:fic@/fic", "DSN to connect to the MySQL server") flag.StringVar(&BaseURL, "baseurl", "http://fic.srs.epita.fr/", "URL prepended to each URL") flag.StringVar(&SubmissionDir, "submission", "./submissions/", "Base directory where save submissions") flag.StringVar(&PKIDir, "pki", "./pki/", "Base directory where found PKI scripts") flag.StringVar(&fic.FilesDir, "files", "./FILES/", "Base directory where found challenges files, local part") flag.StringVar(&CloudDAVBase, "clouddav", "https://srs.epita.fr/owncloud/remote.php/webdav/FIC 2016", "Base directory where found challenges files, cloud part") flag.StringVar(&CloudUsername, "clouduser", "fic", "Username used to sync") flag.StringVar(&CloudPassword, "cloudpass", "", "Password used to sync") flag.Parse() var staticDir string var err error log.Println("Checking paths...") if staticDir, err = filepath.Abs("./static/"); err != nil { log.Fatal(err) } if fic.FilesDir, err = filepath.Abs(fic.FilesDir); err != nil { log.Fatal(err) } if PKIDir, err = filepath.Abs(PKIDir); err != nil { log.Fatal(err) } if SubmissionDir, err = filepath.Abs(SubmissionDir); err != nil { log.Fatal(err) } if fic.FilesDir, err = filepath.Abs(fic.FilesDir); err != nil { log.Fatal(err) } log.Println("Opening database...") if err := fic.DBInit(fmt.Sprintf("%s?parseTime=true", *dsn)); err != nil { log.Fatal("Cannot open the database: ", err) } defer fic.DBClose() log.Println("Creating database...") if err := fic.DBCreate(); err != nil { log.Fatal("Cannot create database: ", err) } os.Chdir(PKIDir) log.Println("Registering handlers...") mux := http.NewServeMux() mux.Handle("/api/", http.StripPrefix("/api", ApiHandler())) mux.Handle("/teams/", StaticHandler(staticDir)) mux.Handle("/themes/", StaticHandler(staticDir)) mux.Handle("/", http.FileServer(http.Dir(staticDir))) log.Println(fmt.Sprintf("Ready, listening on %s", *bind)) if err := http.ListenAndServe(*bind, mux); err != nil { log.Fatal("Unable to listen and serve: ", err) } }