Skip to content

Commit eff6861

Browse files
committed
feat: add --no-timestamp option to sign commands
1 parent 9c82645 commit eff6861

3 files changed

Lines changed: 33 additions & 21 deletions

File tree

internal/signinit/signinit.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func Init(ctx context.Context, mod *signers.Signer, tok token.Token, keyName str
6868
} else if mod.CertTypes&signers.CertTypePgp != 0 {
6969
return nil, nil, sigerrors.ErrNoCertificate{Type: "pgp"}
7070
}
71-
if kconf.Timestamp {
71+
if kconf.Timestamp && !flags.GetBool("no-timestamp") {
7272
cert.Timestamper, err = GetTimestamper()
7373
if err != nil {
7474
return nil, nil, err

signers/options.go

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ import (
3535
"github.com/sassoftware/relic/v7/lib/pkcs9"
3636
)
3737

38+
var common *pflag.FlagSet
39+
40+
func init() {
41+
common = pflag.NewFlagSet("common", pflag.ExitOnError)
42+
common.Bool("no-timestamp", false, "Do not attach a trusted timestamp even if the selected key configures one")
43+
}
44+
3845
type SignOpts struct {
3946
Path string
4047
Hash crypto.Hash
@@ -89,6 +96,22 @@ type FlagValues struct {
8996
Values map[string]string
9097
}
9198

99+
func (v *FlagValues) mergeAll(defs *pflag.FlagSet, getter func(string) string) {
100+
if defs != nil {
101+
v.mergeSet(defs, getter)
102+
}
103+
v.mergeSet(common, getter)
104+
}
105+
106+
func (v *FlagValues) mergeSet(defs *pflag.FlagSet, getter func(string) string) {
107+
defs.VisitAll(func(flag *pflag.Flag) {
108+
value := getter(flag.Name)
109+
if value != "" {
110+
v.Values[flag.Name] = value
111+
}
112+
})
113+
}
114+
92115
// FlagsFromCmdline creates a FlagValues from the (merged) command-line options of a command
93116
func (s *Signer) FlagsFromCmdline(fs *pflag.FlagSet) (*FlagValues, error) {
94117
for flag, users := range flagMap {
@@ -106,43 +129,31 @@ func (s *Signer) FlagsFromCmdline(fs *pflag.FlagSet) (*FlagValues, error) {
106129
return nil, fmt.Errorf("flag \"%s\" is not allowed for signature type \"%s\"", flag, s.Name)
107130
}
108131
}
109-
if s.flags == nil {
110-
return nil, nil
111-
}
112132
values := &FlagValues{
113133
Defs: s.flags,
114134
Values: make(map[string]string),
115135
}
116-
s.flags.VisitAll(func(flag *pflag.Flag) {
117-
if fs.Changed(flag.Name) {
118-
values.Values[flag.Name] = fs.Lookup(flag.Name).Value.String()
136+
values.mergeAll(s.flags, func(name string) string {
137+
if !fs.Changed(name) {
138+
return ""
119139
}
140+
return fs.Lookup(name).Value.String()
120141
})
121142
return values, nil
122143
}
123144

124145
// FlagsFromQuery creates a FlagValues from URL query parameters
125146
func (s *Signer) FlagsFromQuery(q url.Values) (*FlagValues, error) {
126-
if s.flags == nil {
127-
return nil, nil
128-
}
129147
values := &FlagValues{
130148
Defs: s.flags,
131149
Values: make(map[string]string),
132150
}
133-
s.flags.VisitAll(func(flag *pflag.Flag) {
134-
if value := q.Get(flag.Name); value != "" {
135-
values.Values[flag.Name] = value
136-
}
137-
})
151+
values.mergeAll(s.flags, q.Get)
138152
return values, nil
139153
}
140154

141155
// ToQuery appends query parameters to a URL for each option in the flag set
142156
func (values *FlagValues) ToQuery(q url.Values) error {
143-
if values == nil {
144-
return nil
145-
}
146157
for key, value := range values.Values {
147158
q.Set(key, value)
148159
}
@@ -151,10 +162,10 @@ func (values *FlagValues) ToQuery(q url.Values) error {
151162

152163
// GetString returns the flag's value as a string
153164
func (values *FlagValues) GetString(name string) string {
154-
if values == nil {
155-
panic("flag " + name + " not defined for signer module")
165+
flag := common.Lookup(name)
166+
if flag == nil && values.Defs != nil {
167+
flag = values.Defs.Lookup(name)
156168
}
157-
flag := values.Defs.Lookup(name)
158169
if flag == nil {
159170
panic("flag " + name + " not defined for signer module")
160171
}

signers/signers.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ func MergeFlags(cmd *cobra.Command) {
185185
flagMap = make(map[string][]string)
186186
}
187187
fs := cmd.Flags()
188+
fs.AddFlagSet(common)
188189
for _, s := range registered {
189190
if s.flags == nil {
190191
continue

0 commit comments

Comments
 (0)