71 lines
1.4 KiB
Go
71 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 = 8585
|
|
defaulStoreDir = "./store"
|
|
version = "0.1.0"
|
|
)
|
|
|
|
var (
|
|
isSecure = os.Getenv("API_SECURE") == "true"
|
|
|
|
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, isSecure)
|
|
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()
|
|
}
|