forked from security/hakurei
71 lines
1.3 KiB
Go
71 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"hakurei.app/command"
|
|
"hakurei.app/container/check"
|
|
"hakurei.app/internal/pkg"
|
|
"hakurei.app/internal/rosa"
|
|
"hakurei.app/message"
|
|
)
|
|
|
|
func main() {
|
|
log.SetFlags(0)
|
|
log.SetPrefix("pkgserver: ")
|
|
|
|
var (
|
|
flagBaseDir string
|
|
flagPort int
|
|
)
|
|
|
|
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP)
|
|
defer stop()
|
|
msg := message.New(log.Default())
|
|
|
|
c := command.New(os.Stderr, log.Printf, "pkgserver", func(args []string) error {
|
|
reportPath := args[0]
|
|
baseDir, err := check.NewAbs(flagBaseDir)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
cache, err := pkg.Open(ctx, msg, 0, baseDir)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
report, err := rosa.OpenReport(reportPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
index, err := createPackageIndex(cache, report)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
uiRoutes()
|
|
apiRoutes(index)
|
|
err = http.ListenAndServe(fmt.Sprintf(":%d", flagPort), nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}).Flag(
|
|
&flagBaseDir,
|
|
"b", command.StringFlag(""),
|
|
"base directory for cache",
|
|
).Flag(
|
|
&flagPort,
|
|
"p", command.IntFlag(8067),
|
|
"http listen port",
|
|
)
|
|
c.MustParse(os.Args[1:], func(e error) {
|
|
log.Fatal(e)
|
|
})
|
|
|
|
}
|