mirror of https://github.com/docker/docs.git
				
				
				
			
		
			
				
	
	
		
			115 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Go
		
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"os"
 | 
						|
	"os/user"
 | 
						|
	"path/filepath"
 | 
						|
 | 
						|
	"github.com/Sirupsen/logrus"
 | 
						|
	"github.com/spf13/cobra"
 | 
						|
	"github.com/spf13/viper"
 | 
						|
 | 
						|
	"github.com/docker/notary/pkg/passphrase"
 | 
						|
	"github.com/docker/notary/version"
 | 
						|
)
 | 
						|
 | 
						|
const configFileName string = "config"
 | 
						|
const defaultTrustDir string = ".notary/"
 | 
						|
const defaultServerURL = "https://notary-server:4443"
 | 
						|
 | 
						|
var rawOutput bool
 | 
						|
var trustDir string
 | 
						|
var remoteTrustServer string
 | 
						|
var verbose bool
 | 
						|
var retriever passphrase.Retriever
 | 
						|
 | 
						|
func init() {
 | 
						|
	retriever = passphrase.PromptRetriever()
 | 
						|
}
 | 
						|
 | 
						|
func parseConfig() {
 | 
						|
	if verbose {
 | 
						|
		logrus.SetLevel(logrus.DebugLevel)
 | 
						|
		logrus.SetOutput(os.Stderr)
 | 
						|
	}
 | 
						|
 | 
						|
	if trustDir == "" {
 | 
						|
		// Retrieve current user to get home directory
 | 
						|
		usr, err := user.Current()
 | 
						|
		if err != nil {
 | 
						|
			fatalf("cannot get current user: %v", err)
 | 
						|
		}
 | 
						|
 | 
						|
		// Get home directory for current user
 | 
						|
		homeDir := usr.HomeDir
 | 
						|
		if homeDir == "" {
 | 
						|
			fatalf("cannot get current user home directory")
 | 
						|
		}
 | 
						|
		trustDir = filepath.Join(homeDir, filepath.Dir(defaultTrustDir))
 | 
						|
 | 
						|
		logrus.Debugf("no trust directory provided, using default: %s", trustDir)
 | 
						|
	} else {
 | 
						|
		logrus.Debugf("trust directory provided: %s", trustDir)
 | 
						|
	}
 | 
						|
 | 
						|
	// Setup the configuration details
 | 
						|
	viper.SetConfigName(configFileName)
 | 
						|
	viper.AddConfigPath(trustDir)
 | 
						|
	viper.SetConfigType("json")
 | 
						|
 | 
						|
	// Find and read the config file
 | 
						|
	err := viper.ReadInConfig()
 | 
						|
	if err != nil {
 | 
						|
		logrus.Debugf("configuration file not found, using defaults")
 | 
						|
		// Ignore if the configuration file doesn't exist, we can use the defaults
 | 
						|
		if !os.IsNotExist(err) {
 | 
						|
			fatalf("fatal error config file: %v", err)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func main() {
 | 
						|
	var notaryCmd = &cobra.Command{
 | 
						|
		Use:   "notary",
 | 
						|
		Short: "notary allows the creation of trusted collections.",
 | 
						|
		Long:  "notary allows the creation and management of collections of signed targets, allowing the signing and validation of arbitrary content.",
 | 
						|
	}
 | 
						|
 | 
						|
	var versionCmd = &cobra.Command{
 | 
						|
		Use:   "version",
 | 
						|
		Short: "Print the version number of notary",
 | 
						|
		Long:  `print the version number of notary`,
 | 
						|
		Run: func(cmd *cobra.Command, args []string) {
 | 
						|
			fmt.Printf("notary\n Version:    %s\n Git commit: %s\n", version.NotaryVersion, version.GitCommit)
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	notaryCmd.AddCommand(versionCmd)
 | 
						|
 | 
						|
	notaryCmd.PersistentFlags().StringVarP(&trustDir, "trustdir", "d", "", "directory where the trust data is persisted to")
 | 
						|
	notaryCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "verbose output")
 | 
						|
 | 
						|
	notaryCmd.AddCommand(cmdKey)
 | 
						|
	notaryCmd.AddCommand(cmdTufInit)
 | 
						|
	cmdTufInit.Flags().StringVarP(&remoteTrustServer, "server", "s", defaultServerURL, "Remote trust server location")
 | 
						|
	notaryCmd.AddCommand(cmdTufList)
 | 
						|
	cmdTufList.Flags().BoolVarP(&rawOutput, "raw", "", false, "Instructs notary list to output a nonpretty printed version of the targets list. Useful if you need to parse the list.")
 | 
						|
	cmdTufList.Flags().StringVarP(&remoteTrustServer, "server", "s", defaultServerURL, "Remote trust server location")
 | 
						|
	notaryCmd.AddCommand(cmdTufAdd)
 | 
						|
	notaryCmd.AddCommand(cmdTufRemove)
 | 
						|
	notaryCmd.AddCommand(cmdTufPublish)
 | 
						|
	cmdTufPublish.Flags().StringVarP(&remoteTrustServer, "server", "s", defaultServerURL, "Remote trust server location")
 | 
						|
	notaryCmd.AddCommand(cmdTufLookup)
 | 
						|
	cmdTufLookup.Flags().BoolVarP(&rawOutput, "raw", "", false, "Instructs notary lookup to output a nonpretty printed version of the targets list. Useful if you need to parse the list.")
 | 
						|
	cmdTufLookup.Flags().StringVarP(&remoteTrustServer, "server", "s", defaultServerURL, "Remote trust server location")
 | 
						|
	notaryCmd.AddCommand(cmdVerify)
 | 
						|
 | 
						|
	notaryCmd.Execute()
 | 
						|
}
 | 
						|
 | 
						|
func fatalf(format string, args ...interface{}) {
 | 
						|
	fmt.Printf("* fatal: "+format+"\n", args...)
 | 
						|
	os.Exit(1)
 | 
						|
}
 |