go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/mondoo_eol.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package resources
     5  
     6  import (
     7  	"context"
     8  	"errors"
     9  	"time"
    10  
    11  	"go.mondoo.com/cnquery/llx"
    12  	"go.mondoo.com/cnquery/providers-sdk/v1/resources"
    13  	"go.mondoo.com/cnquery/providers-sdk/v1/upstream/mvd"
    14  )
    15  
    16  func (s *mqlMondooEol) id() (string, error) {
    17  	return "product:" + s.Product.Data + ":" + s.Version.Data, nil
    18  }
    19  
    20  func (s *mqlMondooEol) date() (*time.Time, error) {
    21  	name := s.Product.Data
    22  	version := s.Version.Data
    23  
    24  	upstream := s.MqlRuntime.Upstream
    25  	if upstream == nil || upstream.ApiEndpoint == "" {
    26  		return nil, resources.MissingUpstreamError{}
    27  	}
    28  
    29  	// get new advisory report
    30  	// start scanner client
    31  	scannerClient, err := newAdvisoryScannerHttpClient(upstream.ApiEndpoint, upstream.Plugins, upstream.HttpClient)
    32  	if err != nil {
    33  		return nil, err
    34  	}
    35  
    36  	platformEolInfo, err := scannerClient.IsEol(context.Background(), &mvd.Platform{
    37  		Name:    name,
    38  		Release: version,
    39  	})
    40  	if err != nil {
    41  		return nil, err
    42  	}
    43  
    44  	if platformEolInfo == nil {
    45  		return nil, errors.New("no platform eol information available")
    46  	}
    47  
    48  	var eolDate *time.Time
    49  
    50  	if platformEolInfo.EolDate != "" {
    51  		parsedEolDate, err := time.Parse(time.RFC3339, platformEolInfo.EolDate)
    52  		if err != nil {
    53  			return nil, errors.New("could not parse eol date: " + platformEolInfo.EolDate)
    54  		}
    55  		eolDate = &parsedEolDate
    56  	} else {
    57  		eolDate = &llx.NeverFutureTime
    58  	}
    59  
    60  	return eolDate, nil
    61  }