1package ospkg
2
3import (
4	"context"
5	"time"
6
7	"github.com/google/wire"
8	"golang.org/x/xerrors"
9
10	detector "github.com/aquasecurity/trivy/pkg/detector/ospkg"
11	"github.com/aquasecurity/trivy/pkg/log"
12	"github.com/aquasecurity/trivy/pkg/rpc"
13	"github.com/aquasecurity/trivy/pkg/vulnerability"
14	proto "github.com/aquasecurity/trivy/rpc/detector"
15)
16
17var SuperSet = wire.NewSet(
18	detector.SuperSet,
19	vulnerability.SuperSet,
20	NewServer,
21)
22
23// Server is for backward compatibility
24type Server struct {
25	detector   detector.Operation
26	vulnClient vulnerability.Operation
27}
28
29func NewServer(detector detector.Operation, vulnClient vulnerability.Operation) *Server {
30	return &Server{detector: detector, vulnClient: vulnClient}
31}
32
33// Detect is for backward compatibility
34func (s *Server) Detect(_ context.Context, req *proto.OSDetectRequest) (res *proto.DetectResponse, err error) {
35	vulns, eosl, err := s.detector.Detect("", req.OsFamily, req.OsName, time.Time{}, rpc.ConvertFromRpcPkgs(req.Packages))
36	if err != nil {
37		err = xerrors.Errorf("failed to detect vulnerabilities of OS packages: %w", err)
38		log.Logger.Error(err)
39		return nil, err
40	}
41
42	s.vulnClient.FillInfo(vulns, "")
43
44	return &proto.DetectResponse{Vulnerabilities: rpc.ConvertToRpcVulns(vulns), Eosl: eosl}, nil
45}
46