From 7ac5abe048704f1bcf50afc0ed95c7abe0f3497c Mon Sep 17 00:00:00 2001
From: Dan Lorenc <dlorenc@google.com>
Date: Wed, 13 Jan 2021 13:16:42 -0600
Subject: [PATCH] Add a flag for signature format.

This supports pgp and minisign right now. We can add logic to try to detect these later.
---
 cmd/cli/app/pflags.go | 33 ++++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

diff --git a/cmd/cli/app/pflags.go b/cmd/cli/app/pflags.go
index a22b530..304f68d 100644
--- a/cmd/cli/app/pflags.go
+++ b/cmd/cli/app/pflags.go
@@ -38,6 +38,7 @@ import (
 
 func addArtifactPFlags(cmd *cobra.Command) error {
 	cmd.Flags().Var(&fileOrURLFlag{}, "signature", "path or URL to detached signature file")
+	cmd.Flags().Var(&sigFormatFlag{value: "pgp"}, "signature-format", "format of the signature")
 
 	cmd.Flags().Var(&fileOrURLFlag{}, "public-key", "path or URL to public key file")
 
@@ -160,7 +161,13 @@ func CreateRekordFromPFlags() (models.ProposedEntry, error) {
 		}
 
 		re.RekordObj.Signature = &models.RekordV001SchemaSignature{}
-		re.RekordObj.Signature.Format = models.RekordV001SchemaSignatureFormatPgp
+		sigFormat := viper.GetString("signature-format")
+		switch sigFormat {
+		case "pgp":
+			re.RekordObj.Signature.Format = models.RekordV001SchemaSignatureFormatPgp
+		case "minisign":
+			re.RekordObj.Signature.Format = models.RekordV001SchemaSignatureFormatMinisign
+		}
 		signature := viper.GetString("signature")
 		sigURL, err := url.Parse(signature)
 		if err == nil && sigURL.IsAbs() {
@@ -231,6 +238,30 @@ func (f *fileOrURLFlag) Type() string {
 	return "fileOrURLFlag"
 }
 
+type sigFormatFlag struct {
+	value string
+}
+
+func (f *sigFormatFlag) Type() string {
+	return "sigFormat"
+}
+
+func (f *sigFormatFlag) String() string {
+	return f.value
+}
+
+func (f *sigFormatFlag) Set(s string) error {
+	set := map[string]struct{}{
+		"pgp":      {},
+		"minisign": {},
+	}
+	if _, ok := set[s]; ok {
+		f.value = s
+		return nil
+	}
+	return fmt.Errorf("value specified is invalid: [%s] supported values are: [pgp, minisign]", s)
+}
+
 type shaFlag struct {
 	hash string
 }
-- 
GitLab