feat: init nightly vuls for blackhat
This commit is contained in:
108
pkg/server/server.go
Normal file
108
pkg/server/server.go
Normal file
@@ -0,0 +1,108 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/labstack/echo/v4"
|
||||
|
||||
"github.com/future-architect/vuls/pkg/cmd/version"
|
||||
"github.com/future-architect/vuls/pkg/config"
|
||||
"github.com/future-architect/vuls/pkg/detect"
|
||||
"github.com/future-architect/vuls/pkg/scan/os"
|
||||
"github.com/future-architect/vuls/pkg/scan/ospkg/apk"
|
||||
"github.com/future-architect/vuls/pkg/scan/ospkg/dpkg"
|
||||
"github.com/future-architect/vuls/pkg/scan/ospkg/rpm"
|
||||
"github.com/future-architect/vuls/pkg/scan/systeminfo"
|
||||
"github.com/future-architect/vuls/pkg/types"
|
||||
)
|
||||
|
||||
type scanContents struct {
|
||||
Contents []struct {
|
||||
ContentType string `json:"type,omitempty"`
|
||||
Content string `json:"content,omitempty"`
|
||||
} `json:"contents,omitempty"`
|
||||
}
|
||||
|
||||
func Scan() echo.HandlerFunc {
|
||||
return func(c echo.Context) error {
|
||||
s := new(scanContents)
|
||||
if err := c.Bind(s); err != nil {
|
||||
return c.JSON(http.StatusBadRequest, "bad request")
|
||||
}
|
||||
|
||||
h := types.Host{Name: uuid.NewString()}
|
||||
|
||||
for _, cont := range s.Contents {
|
||||
switch cont.ContentType {
|
||||
case "os-release":
|
||||
family, release, err := os.ParseOSRelease(cont.Content)
|
||||
if err != nil {
|
||||
h.ScanError = err.Error()
|
||||
return c.JSON(http.StatusInternalServerError, h)
|
||||
}
|
||||
h.Family = family
|
||||
h.Release = release
|
||||
case "systeminfo":
|
||||
family, release, kbs, err := systeminfo.ParseSysteminfo(cont.Content)
|
||||
if err != nil {
|
||||
h.ScanError = err.Error()
|
||||
return c.JSON(http.StatusInternalServerError, h)
|
||||
}
|
||||
h.Family = family
|
||||
h.Release = release
|
||||
h.Packages.KB = kbs
|
||||
case "apk":
|
||||
pkgs, err := apk.ParseInstalledPackage(cont.Content)
|
||||
if err != nil {
|
||||
h.ScanError = err.Error()
|
||||
return c.JSON(http.StatusInternalServerError, h)
|
||||
}
|
||||
h.Packages.OSPkg = pkgs
|
||||
case "dpkg":
|
||||
pkgs, err := dpkg.ParseInstalledPackage(cont.Content)
|
||||
if err != nil {
|
||||
h.ScanError = err.Error()
|
||||
return c.JSON(http.StatusInternalServerError, h)
|
||||
}
|
||||
h.Packages.OSPkg = pkgs
|
||||
case "rpm":
|
||||
pkgs, err := rpm.ParseInstalledPackage(cont.Content)
|
||||
if err != nil {
|
||||
h.ScanError = err.Error()
|
||||
return c.JSON(http.StatusInternalServerError, h)
|
||||
}
|
||||
h.Packages.OSPkg = pkgs
|
||||
}
|
||||
}
|
||||
|
||||
t := time.Now()
|
||||
h.ScannedAt = &t
|
||||
h.ScannedVersion = version.Version
|
||||
h.ScannedRevision = version.Revision
|
||||
return c.JSON(http.StatusOK, h)
|
||||
}
|
||||
}
|
||||
|
||||
func Detect(dbpath string) echo.HandlerFunc {
|
||||
return func(c echo.Context) error {
|
||||
h := new(types.Host)
|
||||
if err := c.Bind(h); err != nil {
|
||||
return c.JSON(http.StatusBadRequest, "bad request")
|
||||
}
|
||||
|
||||
if h.Config.Detect == nil {
|
||||
h.Config.Detect = &config.Detect{}
|
||||
}
|
||||
h.Config.Detect.Path = dbpath
|
||||
|
||||
if err := detect.Detect(context.Background(), h); err != nil {
|
||||
h.DetectError = err.Error()
|
||||
return c.JSON(http.StatusInternalServerError, h)
|
||||
}
|
||||
|
||||
return c.JSON(http.StatusOK, h)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user