-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.go
More file actions
134 lines (105 loc) · 2.71 KB
/
main.go
File metadata and controls
134 lines (105 loc) · 2.71 KB
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
// varuh - command line encryption program written in Go.
package main
import (
"fmt"
getopt "github.com/pborman/getopt/v2"
"os"
)
const VERSION = 0.2
const APP = "varuh"
type actionFunc func(string) error
type actionFunc2 func(string) (error, string)
type voidFunc func() error
// Print the program's usage string and exit
func printUsage() error {
getopt.Usage()
os.Exit(0)
return nil
}
// Print the program's version info and exit
func printVersionInfo() error {
fmt.Printf("%s version %.2f\n", APP, VERSION)
os.Exit(0)
return nil
}
// Perform an action by using the command line options map
func performAction(optMap map[string]interface{}, optionMap map[string]interface{}) {
var flag bool
boolActionsMap := map[string]voidFunc{
"add": WrapperMaxKryptVoidFunc(addNewEntry),
"version": printVersionInfo,
"help": printUsage,
"path": showActiveDatabasePath,
"list-all": WrapperMaxKryptVoidFunc(listAllEntries),
"encrypt": encryptActiveDatabase,
}
stringActionsMap := map[string]actionFunc{
"edit": WrapperMaxKryptStringFunc(editCurrentEntry),
"init": initNewDatabase,
"list-entry": WrapperMaxKryptStringFunc(listCurrentEntry),
"find": WrapperMaxKryptStringFunc(findCurrentEntry),
"remove": WrapperMaxKryptStringFunc(removeCurrentEntry),
"clone": WrapperMaxKryptStringFunc(copyCurrentEntry),
"use-db": setActiveDatabasePath,
"export": exportToFile,
}
stringActions2Map := map[string]actionFunc2{
"decrypt": decryptDatabase,
}
flagsActionsMap := map[string]voidFunc{
"show": setShowPasswords,
"copy": setCopyPasswordToClipboard,
}
// Flag actions - always done
for key, mappedFunc := range flagsActionsMap {
if *optMap[key].(*bool) {
mappedFunc()
break
}
}
// One of bool or string actions
for key, mappedFunc := range boolActionsMap {
if *optMap[key].(*bool) {
mappedFunc()
flag = true
break
}
}
if flag {
return
}
for key, mappedFunc := range stringActionsMap {
option := optionMap[key].(Option)
if *optMap[key].(*string) != option.Path {
var val = *(optMap[key].(*string))
mappedFunc(val)
flag = true
break
}
}
if flag {
return
}
for key, mappedFunc := range stringActions2Map {
option := optionMap[key].(Option)
if *optMap[key].(*string) != option.Path {
var val = *(optMap[key].(*string))
mappedFunc(val)
break
}
}
}
// Main routine
func main() {
if len(os.Args) == 1 {
os.Args = append(os.Args, "-h")
}
optMap, optionMap := initializeCommandLine()
getopt.SetUsage(func() {
usageString(optionMap)
})
getopt.Parse()
getOrCreateLocalConfig(APP)
performAction(optMap, optionMap)
}