57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"box-manifest/server/internal/httpapi"
|
|
"box-manifest/server/internal/tree"
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
func main() {
|
|
address := flag.String("address", ":8080", "HTTP listen address")
|
|
databasePath := flag.String("database", "data/box-manifest.db", "SQLite database path")
|
|
webPath := flag.String("web", "../web", "web client directory")
|
|
flag.Parse()
|
|
|
|
if err := os.MkdirAll(filepath.Dir(*databasePath), 0o755); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
db, err := sql.Open("sqlite", *databasePath)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer db.Close()
|
|
|
|
store := tree.NewStore(db)
|
|
if err := store.Initialize(context.Background()); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
if _, err := os.Stat(filepath.Join(*webPath, "index.html")); err != nil {
|
|
log.Fatalf("web client not found at %s: %v", *webPath, err)
|
|
}
|
|
|
|
mux := http.NewServeMux()
|
|
apiHandler := httpapi.New(store)
|
|
mux.Handle("/api/", apiHandler)
|
|
mux.Handle("/n/", apiHandler)
|
|
mux.Handle("/", http.FileServer(http.Dir(*webPath)))
|
|
|
|
server := &http.Server{
|
|
Addr: *address,
|
|
Handler: mux,
|
|
}
|
|
fmt.Printf("Box Manifest server listening on %s\n", *address)
|
|
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
|
log.Fatal(err)
|
|
}
|
|
}
|