5
5
"errors"
6
6
"net"
7
7
"net/http"
8
+ "os"
8
9
"os/signal"
9
10
"strings"
10
11
"time"
@@ -24,14 +25,18 @@ import (
24
25
25
26
func serverFlags () (addFlags func (cmd * cobra.Command ), opts * storage.Options ) {
26
27
opts = & storage.Options {}
27
- var sign bool
28
+ var certificates []string
29
+ var signingKeyFile string
28
30
return func (cmd * cobra.Command ) {
29
31
cmd .Flags ().StringVar (& opts .ExtDir , "extensions-dir" , "" , "The path to extensions." )
30
32
cmd .Flags ().StringVar (& opts .Artifactory , "artifactory" , "" , "Artifactory server URL." )
31
33
cmd .Flags ().StringVar (& opts .Repo , "repo" , "" , "Artifactory repository." )
32
- cmd .Flags ().BoolVar (& sign , "sign" , false , "Sign extensions." )
33
- _ = cmd .Flags ().MarkHidden ("sign" ) // This flag needs to import a key, not just be a bool
34
-
34
+ cmd .Flags ().DurationVar (& opts .ListCacheDuration , "list-cache-duration" , time .Minute , "The duration of the extension cache." )
35
+ cmd .Flags ().StringArrayVar (& certificates , "certs" , []string {}, "The path to certificates that match the signing key." )
36
+ cmd .Flags ().StringVar (& signingKeyFile , "key" , "" , "The path to signing key file in PEM format." )
37
+ cmd .Flags ().BoolVar (& opts .SaveSigZips , "save-sigs" , false , "Save signed extensions to disk for debugging." )
38
+ _ = cmd .Flags ().MarkHidden ("save-sigs" )
39
+
35
40
if cmd .Use == "server" {
36
41
// Server only flags
37
42
cmd .Flags ().DurationVar (& opts .ListCacheDuration , "list-cache-duration" , time .Minute , "The duration of the extension cache." )
@@ -54,8 +59,21 @@ func serverFlags() (addFlags func(cmd *cobra.Command), opts *storage.Options) {
54
59
if before != nil {
55
60
return before (cmd , args )
56
61
}
57
- if sign { // TODO: Remove this for an actual key import
58
- opts .Signer , _ = extensionsign .GenerateKey ()
62
+ if signingKeyFile != "" { // TODO: Remove this for an actual key import
63
+ signingKey , err := os .ReadFile (signingKeyFile )
64
+ if err != nil {
65
+ return xerrors .Errorf ("read signing key: %w" , err )
66
+ }
67
+
68
+ signer , err := extensionsign .LoadKey (signingKey )
69
+ if err != nil {
70
+ return xerrors .Errorf ("load signing key: %w" , err )
71
+ }
72
+ opts .Signer = signer
73
+ opts .Certificates , err = extensionsign .LoadCertificatesFromDisk (cmd .Context (), opts .Logger , certificates )
74
+ if err != nil {
75
+ return xerrors .Errorf ("load certificates: %w" , err )
76
+ }
59
77
}
60
78
return nil
61
79
}
0 commit comments