librapi/main.go

69 lines
1.4 KiB
Go

package main
import (
"context"
"librapi/server"
"librapi/services"
"os"
"os/signal"
"strconv"
"sync"
"github.com/rs/zerolog/log"
"librapi/handlers/download"
"librapi/handlers/home"
"librapi/handlers/login"
"librapi/handlers/upload"
)
const (
defaultPort = 8080
defaulStoreDir = "./store"
version = "0.1.0"
)
var (
port = sync.OnceValue[int](func() int {
port, err := strconv.Atoi(os.Getenv("API_PORT"))
if err != nil {
log.Warn().Err(err).Int("default", defaultPort).Msg("unable to load API_PORT, set to default")
return defaultPort
}
return port
})
storeDir = sync.OnceValue[string](func() string {
storeDir := os.Getenv("API_STORE_DIR")
if storeDir == "" {
log.Warn().Str("default", defaulStoreDir).Msg("API_STORE_DIR env var empty, set to default")
return defaulStoreDir
}
return storeDir
})
)
func main() {
log.Info().Str("version", version).Msg("")
ctx, fnCancel := signal.NotifyContext(context.Background(), os.Kill, os.Interrupt)
defer fnCancel()
auth := services.NewAuthentication(ctx)
bs := services.NewStore(storeDir())
srv := server.NewServer(
ctx,
port(),
server.NewHandler(home.URL, home.Handler(bs)),
server.NewHandler(upload.URL, upload.Handler(auth, bs)),
server.NewHandler(login.URL, login.Handler(auth)),
server.NewHandler(download.URL, download.Handler(bs)),
)
srv.Serve()
<-srv.Done()
<-auth.Done()
<-bs.Done()
}