get.porter.sh/porter@v1.3.0/pkg/pkgmgmt/download_options.go (about)

     1  package pkgmgmt
     2  
     3  import (
     4  	"fmt"
     5  	"net/url"
     6  )
     7  
     8  // DefaultPackageMirror is the default location from which to download Porter assets, such as binaries, atom feeds and package indexes.
     9  const DefaultPackageMirror = "https://cdn.porter.sh"
    10  
    11  // GetDefaultPackageMirrorURL returns DefaultPackageMirror parsed as a url.URL
    12  func GetDefaultPackageMirrorURL() url.URL {
    13  	defaultMirror, _ := url.Parse(DefaultPackageMirror)
    14  	return *defaultMirror
    15  }
    16  
    17  // PackageDownloadOptions are options for downloading Porter packages, such as mixins and plugins.
    18  type PackageDownloadOptions struct {
    19  	Mirror       string
    20  	parsedMirror *url.URL
    21  }
    22  
    23  func (o *PackageDownloadOptions) Validate() error {
    24  	if o.Mirror == "" {
    25  		o.Mirror = DefaultPackageMirror
    26  	}
    27  
    28  	mirrorURL, err := url.Parse(o.Mirror)
    29  	if err != nil {
    30  		return fmt.Errorf("invalid --mirror %s: %w", o.Mirror, err)
    31  	}
    32  	o.parsedMirror = mirrorURL
    33  
    34  	return nil
    35  }
    36  
    37  // GetMirror returns a copy of of the parsed Mirror that is safe to modify.
    38  func (o *PackageDownloadOptions) GetMirror() url.URL {
    39  	if o.parsedMirror == nil {
    40  		return GetDefaultPackageMirrorURL()
    41  	}
    42  
    43  	return *o.parsedMirror
    44  }