github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/detection/peek.go (about)

     1  package detection
     2  
     3  import (
     4  	"archive/tar"
     5  	"compress/gzip"
     6  	"errors"
     7  	"io"
     8  	"strings"
     9  )
    10  
    11  func IsHelmChartArchive(path string, file io.Reader) bool {
    12  
    13  	if !IsArchive(path) {
    14  		return false
    15  	}
    16  
    17  	var err error
    18  	var fr = file
    19  
    20  	if IsZip(path) {
    21  		if fr, err = gzip.NewReader(file); err != nil {
    22  			return false
    23  		}
    24  	}
    25  	tr := tar.NewReader(fr)
    26  
    27  	if tr == nil {
    28  		return false
    29  	}
    30  
    31  	for {
    32  		header, err := tr.Next()
    33  		if err != nil {
    34  			if errors.Is(err, io.EOF) {
    35  				break
    36  			}
    37  			return false
    38  		}
    39  
    40  		if header.Typeflag == tar.TypeReg && strings.HasSuffix(header.Name, "Chart.yaml") {
    41  			return true
    42  		}
    43  	}
    44  	return false
    45  }
    46  
    47  func IsArchive(path string) bool {
    48  	if strings.HasSuffix(path, ".tar") || IsZip(path) {
    49  		return true
    50  	}
    51  	return false
    52  }
    53  
    54  func IsZip(path string) bool {
    55  	if strings.HasSuffix(path, ".tgz") ||
    56  		strings.HasSuffix(path, ".tar.gz") {
    57  		return true
    58  	}
    59  	return false
    60  }