dashboard: Use gin-gonic instead of httprouter directly
This commit is contained in:
parent
8cb7bf8b96
commit
635e67c224
5 changed files with 193 additions and 215 deletions
|
@ -1,9 +1,8 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
@ -14,12 +13,10 @@ import (
|
|||
"strings"
|
||||
"syscall"
|
||||
|
||||
"srs.epita.fr/fic-server/dashboard/api"
|
||||
"srs.epita.fr/fic-server/libfic"
|
||||
"srs.epita.fr/fic-server/settings"
|
||||
)
|
||||
|
||||
var StaticDir string
|
||||
var DashboardDir string
|
||||
var TeamsDir string
|
||||
|
||||
|
@ -64,15 +61,16 @@ func StripPrefix(prefix string, h http.Handler) http.Handler {
|
|||
}
|
||||
|
||||
func main() {
|
||||
var baseURL string
|
||||
// Read paremeters from environment
|
||||
if v, exists := os.LookupEnv("FIC_BASEURL"); exists {
|
||||
BaseURL = v
|
||||
baseURL = v
|
||||
}
|
||||
|
||||
// Read parameters from command line
|
||||
var bind = flag.String("bind", "127.0.0.1:8082", "Bind port/socket")
|
||||
flag.StringVar(&BaseURL, "baseurl", BaseURL, "URL prepended to each URL")
|
||||
flag.StringVar(&StaticDir, "static", "./htdocs-dashboard/", "Directory containing static files")
|
||||
flag.StringVar(&baseURL, "baseurl", baseURL, "URL prepended to each URL")
|
||||
staticDir := flag.String("static", "./htdocs-dashboard/", "Directory containing static files")
|
||||
flag.StringVar(&fic.FilesDir, "files", fic.FilesDir, "Base directory where found challenges files, local part")
|
||||
flag.StringVar(&DashboardDir, "dashbord", "./DASHBOARD", "Base directory where save public JSON files")
|
||||
flag.StringVar(&TeamsDir, "teams", "./TEAMS", "Base directory where save teams JSON files")
|
||||
|
@ -86,8 +84,20 @@ func main() {
|
|||
// Sanitize options
|
||||
var err error
|
||||
log.Println("Checking paths...")
|
||||
if StaticDir, err = filepath.Abs(StaticDir); err != nil {
|
||||
log.Fatal(err)
|
||||
if staticDir != nil && *staticDir != "" {
|
||||
if sDir, err := filepath.Abs(*staticDir); err != nil {
|
||||
log.Fatal(err)
|
||||
} else {
|
||||
log.Println("Serving pages from", sDir)
|
||||
staticFS = http.Dir(sDir)
|
||||
}
|
||||
} else {
|
||||
sub, err := fs.Sub(assets, "static")
|
||||
if err != nil {
|
||||
log.Fatal("Unable to cd to static/ directory:", err)
|
||||
}
|
||||
log.Println("Serving pages from memory.")
|
||||
staticFS = http.FS(sub)
|
||||
}
|
||||
if fic.FilesDir, err = filepath.Abs(fic.FilesDir); err != nil {
|
||||
log.Fatal(err)
|
||||
|
@ -95,10 +105,10 @@ func main() {
|
|||
if settings.SettingsDir, err = filepath.Abs(settings.SettingsDir); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if BaseURL != "/" {
|
||||
BaseURL = path.Clean(BaseURL)
|
||||
if baseURL != "/" {
|
||||
baseURL = path.Clean(baseURL)
|
||||
} else {
|
||||
BaseURL = ""
|
||||
baseURL = ""
|
||||
}
|
||||
if fwdr != nil && len(*fwdr) > 0 {
|
||||
forwarder = fwdr
|
||||
|
@ -108,21 +118,13 @@ func main() {
|
|||
interrupt := make(chan os.Signal, 1)
|
||||
signal.Notify(interrupt, os.Interrupt, syscall.SIGTERM)
|
||||
|
||||
srv := &http.Server{
|
||||
Addr: *bind,
|
||||
Handler: StripPrefix(BaseURL, api.Router()),
|
||||
}
|
||||
|
||||
// Serve content
|
||||
go func() {
|
||||
log.Fatal(srv.ListenAndServe())
|
||||
}()
|
||||
log.Println(fmt.Sprintf("Ready, listening on %s", *bind))
|
||||
app := NewApp(baseURL, *bind)
|
||||
go app.Start()
|
||||
|
||||
// Wait shutdown signal
|
||||
<-interrupt
|
||||
|
||||
log.Print("The service is shutting down...")
|
||||
srv.Shutdown(context.Background())
|
||||
app.Stop()
|
||||
log.Println("done")
|
||||
}
|
||||
|
|
Reference in a new issue