54 lines
1023 B
Go
54 lines
1023 B
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"librapi/server"
|
|
"librapi/services"
|
|
"os"
|
|
"os/signal"
|
|
"strconv"
|
|
"sync"
|
|
|
|
"github.com/rs/zerolog"
|
|
"github.com/rs/zerolog/log"
|
|
|
|
"librapi/handlers/login"
|
|
"librapi/handlers/upload"
|
|
)
|
|
|
|
const DefaultPort = 8585
|
|
|
|
var APIPort = sync.OnceValue[int](func() int {
|
|
port, err := strconv.Atoi(os.Getenv("API_PORT"))
|
|
if err != nil {
|
|
log.Debug().Err(err).Msg("unable to load API_PORT")
|
|
return DefaultPort
|
|
}
|
|
return port
|
|
})
|
|
|
|
func initLogger() {
|
|
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
|
|
log.Logger = log.With().Caller().Logger().Output(zerolog.ConsoleWriter{Out: os.Stderr})
|
|
}
|
|
|
|
func main() {
|
|
initLogger()
|
|
|
|
ctx, fnCancel := signal.NotifyContext(context.Background(), os.Kill, os.Interrupt)
|
|
defer fnCancel()
|
|
|
|
sessionStore := services.NewSessionStore(ctx)
|
|
|
|
srv := server.NewServer(
|
|
ctx,
|
|
APIPort(),
|
|
server.NewHandler("/upload", upload.Handler(sessionStore)),
|
|
server.NewHandler("/login", login.Handler(sessionStore)),
|
|
)
|
|
srv.Serve()
|
|
|
|
<-srv.Done()
|
|
<-sessionStore.Done()
|
|
}
|