forked from security/hakurei
cmd/pkgserver: make report argument optional
This allows serving metadata only without a populated report. This also removes the out-of-bounds read on args when no arguments are passed. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
@@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
@@ -31,31 +32,43 @@ func main() {
|
|||||||
msg := message.New(log.Default())
|
msg := message.New(log.Default())
|
||||||
|
|
||||||
c := command.New(os.Stderr, log.Printf, "pkgserver", func(args []string) error {
|
c := command.New(os.Stderr, log.Printf, "pkgserver", func(args []string) error {
|
||||||
reportPath := args[0]
|
var (
|
||||||
|
cache *pkg.Cache
|
||||||
|
report *rosa.Report
|
||||||
|
)
|
||||||
|
switch len(args) {
|
||||||
|
case 0:
|
||||||
|
break
|
||||||
|
|
||||||
|
case 1:
|
||||||
baseDir, err := check.NewAbs(flagBaseDir)
|
baseDir, err := check.NewAbs(flagBaseDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cache, err := pkg.Open(ctx, msg, 0, baseDir)
|
|
||||||
|
cache, err = pkg.Open(ctx, msg, 0, baseDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer cache.Close()
|
defer cache.Close()
|
||||||
report, err := rosa.OpenReport(reportPath)
|
|
||||||
|
report, err = rosa.OpenReport(args[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
return errors.New("pkgserver requires 1 argument")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
var index packageIndex
|
var index packageIndex
|
||||||
if err = index.populate(cache, report); err != nil {
|
if err := index.populate(cache, report); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
uiRoutes(http.DefaultServeMux)
|
uiRoutes(http.DefaultServeMux)
|
||||||
apiRoutes(http.DefaultServeMux, &index)
|
apiRoutes(http.DefaultServeMux, &index)
|
||||||
err = http.ListenAndServe(fmt.Sprintf(":%d", flagPort), nil)
|
return http.ListenAndServe(fmt.Sprintf(":%d", flagPort), nil)
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}).Flag(
|
}).Flag(
|
||||||
&flagBaseDir,
|
&flagBaseDir,
|
||||||
"b", command.StringFlag(""),
|
"b", command.StringFlag(""),
|
||||||
|
|||||||
Reference in New Issue
Block a user