-
-
Notifications
You must be signed in to change notification settings - Fork 7
/
watch.go
135 lines (113 loc) · 3.57 KB
/
watch.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package cmd
import (
"github.com/digitorus/pdfsigner/files"
"github.com/digitorus/pdfsigner/license"
"github.com/digitorus/pdfsigner/signer"
log "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
)
// watchCmd represents the watch command
var watchCmd = &cobra.Command{
Use: "watch",
Short: "Watch folder for new files, sign and put to another folder",
Long: `Watch folder for new PDF documents, sign it using PEM or PKSC11 or preconfigured signer`,
}
// watchPEMCmd watches folders and signs files with PEM using flags only
var watchPEMCmd = &cobra.Command{
Use: "pem",
Short: "Watch and sign with PEM formatted certificate",
Run: func(cmd *cobra.Command, args []string) {
// require license
err := requireLicense()
if err != nil {
log.Fatal(err)
}
// create signer config
c := signerConfig{}
// bind signer flags to config
bindSignerFlagsToConfig(cmd, &c)
// set sign data
c.SignData.SetPEM(c.CrtPath, c.KeyPath, c.CrtChainPath)
// start watch
startWatch(c.SignData)
},
}
// watchPKSC11Cmd watches folders and signs files with PEM using flags only
var watchPKSC11Cmd = &cobra.Command{
Use: "pksc11",
Short: "Watch and sign with PSKC11",
Run: func(cmd *cobra.Command, args []string) {
// require license
err := requireLicense()
if err != nil {
log.Fatal(err)
}
// create signer config
c := signerConfig{}
// bind signer flags to config
bindSignerFlagsToConfig(cmd, &c)
// set sign data
c.SignData.SetPKSC11(c.LibPath, c.Pass, c.CrtChainPath)
// start watch
startWatch(c.SignData)
},
}
// watchBySignerNameCmd wathces folders and signs files using singer from the config with possibility to override it with flags
var watchBySignerNameCmd = &cobra.Command{
Use: "signer",
Short: "Watch and sign with preconfigured signer",
Run: func(cmd *cobra.Command, args []string) {
// require license
err := requireLicense()
if err != nil {
log.Fatal(err)
}
// get signer config from the config file by name
c := getSignerConfigByName(signerNameFlag)
// bind signer flags to config
bindSignerFlagsToConfig(cmd, &c)
// set sign data
switch c.Type {
case "pem":
c.SignData.SetPEM(c.CrtPath, c.KeyPath, c.CrtChainPath)
case "pksc11":
c.SignData.SetPKSC11(c.LibPath, c.Pass, c.CrtChainPath)
}
// start watch
startWatch(c.SignData)
},
}
// startWatch starts watcher
func startWatch(signData signer.SignData) {
license.LD.AutoSave()
files.Watch(inputPathFlag, func(filePath string, left int) {
signedFilePath := getOutputFilePathByInputFilePath(filePath, outputPathFlag)
if err := signer.SignFile(filePath, signedFilePath, signData, validateSignature); err != nil {
log.Errorln(err)
}
})
}
func init() {
RootCmd.AddCommand(watchCmd)
// add PEM sign command and parse related flags
watchCmd.AddCommand(watchPEMCmd)
parseCommonFlags(watchPEMCmd)
parseInputPathFlag(watchPEMCmd)
parseOutputPathFlag(watchPEMCmd)
parsePEMCertificateFlags(watchPEMCmd)
// add PKSC11 sign command and parse related flags
watchCmd.AddCommand(watchPKSC11Cmd)
parseCommonFlags(watchPKSC11Cmd)
parseOutputPathFlag(watchPKSC11Cmd)
parseInputPathFlag(watchPKSC11Cmd)
parsePKSC11CertificateFlags(watchPKSC11Cmd)
// add watch command with signer signer from config and parse related flags
watchCmd.AddCommand(watchBySignerNameCmd)
parseConfigFlag(watchBySignerNameCmd)
parseSignerName(watchBySignerNameCmd)
parseCommonFlags(watchBySignerNameCmd)
parseInputPathFlag(watchBySignerNameCmd)
parseOutputPathFlag(watchBySignerNameCmd)
parsePEMCertificateFlags(watchBySignerNameCmd)
parsePKSC11CertificateFlags(watchBySignerNameCmd)
}