Skip to content

Commit 4ea1ef8

Browse files
authored
Merge pull request #34 from uw-labs/decrypt-single-file
Add flags to enable decryption of a single file
2 parents 574964c + 52b89be commit 4ea1ef8

File tree

1 file changed

+41
-9
lines changed

1 file changed

+41
-9
lines changed

strongbox.go

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,14 @@ var (
3434
// flags
3535
flagGitConfig = flag.Bool("git-config", false, "Configure git for strongbox use")
3636
flagGenKey = flag.String("gen-key", "", "Generate a new key and add it to your strongbox keyring")
37-
flagClean = flag.String("clean", "", "intended to be called internally by git")
38-
flagSmudge = flag.String("smudge", "", "intended to be called internally by git")
39-
flagDiff = flag.String("diff", "", "intended to be called internally by git")
40-
flagVersion = flag.Bool("version", false, "Strongbox version")
37+
flagDecrypt = flag.Bool("decrypt", false, "Decrypt single resource")
38+
flagKey = flag.String("key", "", "Private key to use to decrypt")
39+
40+
flagClean = flag.String("clean", "", "intended to be called internally by git")
41+
flagSmudge = flag.String("smudge", "", "intended to be called internally by git")
42+
flagDiff = flag.String("diff", "", "intended to be called internally by git")
43+
44+
flagVersion = flag.Bool("version", false, "Strongbox version")
4145

4246
version = ""
4347
)
@@ -46,6 +50,8 @@ func usage() {
4650
fmt.Fprintf(os.Stderr, "Usage:\n\n")
4751
fmt.Fprintf(os.Stderr, "\tstrongbox -git-config\n")
4852
fmt.Fprintf(os.Stderr, "\tstrongbox -gen-key key-name\n")
53+
fmt.Fprintf(os.Stderr, "\tstrongbox -decrypt\n")
54+
fmt.Fprintf(os.Stderr, "\tstrongbox -key\n")
4955
fmt.Fprintf(os.Stderr, "\tstrongbox -version\n")
5056
os.Exit(2)
5157
}
@@ -78,11 +84,6 @@ func main() {
7884
return
7985
}
8086

81-
// only a single flag has been set
82-
if flag.NFlag() != 1 {
83-
usage()
84-
}
85-
8687
if *flagGitConfig {
8788
gitConfig()
8889
return
@@ -93,6 +94,14 @@ func main() {
9394
return
9495
}
9596

97+
if *flagDecrypt {
98+
if *flagKey == "" {
99+
log.Fatalf("Must provide a key when using -decrypt")
100+
}
101+
decryptCLI()
102+
return
103+
}
104+
96105
if *flagClean != "" {
97106
clean(os.Stdin, os.Stdout, *flagClean)
98107
return
@@ -107,6 +116,29 @@ func main() {
107116
}
108117
}
109118

119+
func decryptCLI() {
120+
var fn string
121+
if flag.Arg(0) == "" {
122+
// no file passed, try to read stdin
123+
fn = "/dev/stdin"
124+
} else {
125+
fn = flag.Arg(0)
126+
}
127+
fb, err := ioutil.ReadFile(fn)
128+
if err != nil {
129+
log.Fatalf("Unable to read file to decrypt %v", err)
130+
}
131+
dk, err := decode([]byte(*flagKey))
132+
if err != nil {
133+
log.Fatalf("Unable to decode private key %v", err)
134+
}
135+
out, err := decrypt(fb, dk)
136+
if err != nil {
137+
log.Fatalf("Unable to decrupt %v", err)
138+
}
139+
fmt.Printf("%s", out)
140+
}
141+
110142
func gitConfig() {
111143
args := [][]string{
112144
{"config", "--global", "--replace-all", "filter.strongbox.clean", "strongbox -clean %f"},

0 commit comments

Comments
 (0)