@@ -10,82 +10,94 @@ import (
1010 "github.com/spf13/cobra"
1111)
1212
13- // createKeysCmd represents the createKeys command
14- var cmd = & cobra.Command {
15- Use : "key-gen" ,
16- Short : "Generate root/work/random key files" ,
17- Long : "Generate root keys (rootKey/root_part_*.key + rootKey/root.salt), a work key encrypted by the root key, or a random key file." ,
18- RunE : runCmd ,
19- }
20-
21- var keyType string
2213var forceFlag bool
2314var workKeyFile string
2415var keyBaseDir string
2516
26- func init () {
27- cmd .Flags ().StringVarP (& keyType , "type" , "t" , "" , "Key Type: root, work, random." )
28- cmd .Flags ().StringVarP (& workKeyFile , "name" , "n" , "work.key" , "Work Key File Name. eg: work.key" )
29- cmd .Flags ().StringVarP (& keyBaseDir , "dir" , "d" , "" , "Key base directory. Will create rootKey/workKey under it." )
30- cmd .Flags ().BoolVarP (& forceFlag , "force" , "f" , false , "Force Create RootKey, Ignore Exist key." )
31- if err := cmd .MarkFlagRequired ("type" ); err != nil {
32- panic (err )
17+ func GetCmds () []* cobra.Command {
18+ return []* cobra.Command {
19+ newGenRootKeyCmd (),
20+ newGenWorkKeyCmd (),
21+ newGenRandomKeyCmd (),
3322 }
3423}
3524
36- func GetCmd () * cobra.Command {
37- return cmd
25+ func applyBaseFlags ( cmd * cobra.Command ) {
26+ cmd . Flags (). StringVarP ( & keyBaseDir , "dir" , "d" , "" , "Key base directory. Will create rootKey/workKey under it." )
3827}
3928
40- func runCmd (cmd * cobra.Command , args []string ) error {
41- if keyType == "" {
42- return fmt .Errorf ("type is required" )
29+ func newGenRootKeyCmd () * cobra.Command {
30+ rootCmd := & cobra.Command {
31+ Use : "gen-root-key" ,
32+ Short : "Generate root key files" ,
33+ Long : "Generate root keys (rootKey/root_part_*.key + rootKey/root.salt)." ,
34+ RunE : func (cmd * cobra.Command , args []string ) error {
35+ common .SetKeyBaseDir (keyBaseDir )
36+ if forceFlag {
37+ common .ClearAllKeys ()
38+ }
39+ if err := common .CreateRootKeySalt (); err != nil {
40+ return err
41+ }
42+ fmt .Println ("Create Root Key Salt Done" )
43+ if err := common .CreateRootKeyParts (); err != nil {
44+ return err
45+ }
46+ fmt .Println ("Create Root Key Done" )
47+ return nil
48+ },
4349 }
44- common .SetKeyBaseDir (keyBaseDir )
45- switch keyType {
46- case "root" :
47- if forceFlag {
48- common .ClearAllKeys ()
49- }
50- err := common .CreateRootKeySalt ()
51- if err != nil {
52- return err
53- }
54- fmt .Println ("Create Root Key Salt Done" )
55- err = common .CreateRootKeyParts ()
56- if err != nil {
57- return err
58- }
59- fmt .Println ("Create Root Key Done" )
60- case "work" :
61- var err error
62- if forceFlag {
63- err = common .ClearWorkKey (workKeyFile )
64- }
65- if err != nil {
66- return err
67- }
68- err = common .CreateWorkKey (workKeyFile )
69- if err != nil {
70- return err
71- }
72- fmt .Printf ("Create Work Key: %s Done\n " , workKeyFile )
73- case "random" :
74- var err error
75- if forceFlag {
76- err = common .ClearWorkKey (workKeyFile )
77- }
78- if err != nil {
79- return err
80- }
81- err = common .CreateRandomKeyFile (workKeyFile )
82- if err != nil {
83- return err
84- }
85- fmt .Printf ("Create Random Key File: %s Done\n " , workKeyFile )
86- default :
87- return fmt .Errorf ("unknown type: %s" , keyType )
50+ applyBaseFlags (rootCmd )
51+ rootCmd .Flags ().BoolVarP (& forceFlag , "force" , "f" , false , "Force Create RootKey, Ignore Exist key." )
52+ return rootCmd
53+ }
54+
55+ func newGenWorkKeyCmd () * cobra.Command {
56+ workCmd := & cobra.Command {
57+ Use : "gen-work-key" ,
58+ Short : "Generate a work key file" ,
59+ Long : "Generate a work key encrypted by the root key." ,
60+ RunE : func (cmd * cobra.Command , args []string ) error {
61+ common .SetKeyBaseDir (keyBaseDir )
62+ if forceFlag {
63+ if err := common .ClearWorkKey (workKeyFile ); err != nil {
64+ return err
65+ }
66+ }
67+ if err := common .CreateWorkKey (workKeyFile ); err != nil {
68+ return err
69+ }
70+ fmt .Printf ("Create Work Key: %s Done\n " , workKeyFile )
71+ return nil
72+ },
8873 }
74+ applyBaseFlags (workCmd )
75+ workCmd .Flags ().StringVarP (& workKeyFile , "name" , "n" , "work.key" , "Work Key File Name. eg: work.key" )
76+ workCmd .Flags ().BoolVarP (& forceFlag , "force" , "f" , false , "Force Create WorkKey, Ignore Exist key." )
77+ return workCmd
78+ }
8979
90- return nil
80+ func newGenRandomKeyCmd () * cobra.Command {
81+ randomCmd := & cobra.Command {
82+ Use : "gen-random-key" ,
83+ Short : "Generate a random key file" ,
84+ Long : "Generate a random key file (Base64, 32 bytes) in workKey directory." ,
85+ RunE : func (cmd * cobra.Command , args []string ) error {
86+ common .SetKeyBaseDir (keyBaseDir )
87+ if forceFlag {
88+ if err := common .ClearWorkKey (workKeyFile ); err != nil {
89+ return err
90+ }
91+ }
92+ if err := common .CreateRandomKeyFile (workKeyFile ); err != nil {
93+ return err
94+ }
95+ fmt .Printf ("Create Random Key File: %s Done\n " , workKeyFile )
96+ return nil
97+ },
98+ }
99+ applyBaseFlags (randomCmd )
100+ randomCmd .Flags ().StringVarP (& workKeyFile , "name" , "n" , "random.key" , "Random Key File Name. eg: random.key" )
101+ randomCmd .Flags ().BoolVarP (& forceFlag , "force" , "f" , false , "Force Create RandomKey, Ignore Exist key." )
102+ return randomCmd
91103}
0 commit comments