|
@@ -7,6 +7,7 @@ package main
|
7
|
7
|
|
8
|
8
|
import (
|
9
|
9
|
"bufio"
|
|
10
|
+ "encoding/json"
|
10
|
11
|
"fmt"
|
11
|
12
|
"log"
|
12
|
13
|
"os"
|
|
@@ -20,6 +21,7 @@ import (
|
20
|
21
|
"github.com/ergochat/ergo/irc"
|
21
|
22
|
"github.com/ergochat/ergo/irc/logger"
|
22
|
23
|
"github.com/ergochat/ergo/irc/mkcerts"
|
|
24
|
+ "github.com/ergochat/ergo/irc/passwd"
|
23
|
25
|
)
|
24
|
26
|
|
25
|
27
|
// set via linker flags, either by make or by goreleaser:
|
|
@@ -91,6 +93,23 @@ func doMkcerts(configFile string, quiet bool) {
|
91
|
93
|
}
|
92
|
94
|
}
|
93
|
95
|
|
|
96
|
+func doCheckPasswd() (returnCode int) {
|
|
97
|
+ reader := bufio.NewReader(os.Stdin)
|
|
98
|
+ text, err := reader.ReadBytes('\n')
|
|
99
|
+ if err != nil {
|
|
100
|
+ log.Fatal(err)
|
|
101
|
+ }
|
|
102
|
+ var hashAndPassword [2]string
|
|
103
|
+ err = json.Unmarshal(text, &hashAndPassword)
|
|
104
|
+ if err != nil {
|
|
105
|
+ log.Fatal(err)
|
|
106
|
+ }
|
|
107
|
+ if passwd.CompareHashAndPassword([]byte(hashAndPassword[0]), []byte(hashAndPassword[1])) != nil {
|
|
108
|
+ return 1
|
|
109
|
+ }
|
|
110
|
+ return 0
|
|
111
|
+}
|
|
112
|
+
|
94
|
113
|
func main() {
|
95
|
114
|
irc.SetVersionString(version, commit)
|
96
|
115
|
usage := `ergo.
|
|
@@ -100,6 +119,7 @@ Usage:
|
100
|
119
|
ergo importdb <database.json> [--conf <filename>] [--quiet]
|
101
|
120
|
ergo genpasswd [--conf <filename>] [--quiet]
|
102
|
121
|
ergo mkcerts [--conf <filename>] [--quiet]
|
|
122
|
+ ergo checkpasswd
|
103
|
123
|
ergo run [--conf <filename>] [--quiet] [--smoke]
|
104
|
124
|
ergo -h | --help
|
105
|
125
|
ergo --version
|
|
@@ -144,6 +164,8 @@ Options:
|
144
|
164
|
} else if arguments["mkcerts"].(bool) {
|
145
|
165
|
doMkcerts(arguments["--conf"].(string), arguments["--quiet"].(bool))
|
146
|
166
|
return
|
|
167
|
+ } else if arguments["checkpasswd"].(bool) {
|
|
168
|
+ os.Exit(doCheckPasswd())
|
147
|
169
|
}
|
148
|
170
|
|
149
|
171
|
configfile := arguments["--conf"].(string)
|