aboutsummaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorNiall Sheridan <nsheridan@gmail.com>2016-05-28 19:59:04 +0100
committerNiall Sheridan <nsheridan@gmail.com>2016-05-29 00:14:34 +0100
commit369c103c58ada110e0f48ae864d2cec9a6e435f4 (patch)
tree31d90b62531013de7ca1ce819e5fbf777448560c /cmd
parent054e32ed3ab3d4102c9447ed0089387206587ed2 (diff)
Use a simple config file for configuring the client.
Diffstat (limited to 'cmd')
-rw-r--r--cmd/cashier/config.go33
-rw-r--r--cmd/cashier/main.go35
2 files changed, 54 insertions, 14 deletions
diff --git a/cmd/cashier/config.go b/cmd/cashier/config.go
new file mode 100644
index 0000000..b6e583a
--- /dev/null
+++ b/cmd/cashier/config.go
@@ -0,0 +1,33 @@
+package main
+
+import (
+ "github.com/spf13/viper"
+)
+
+type config struct {
+ CA string `mapstructure:"ca"`
+ Keytype string `mapstructure:"key_type"`
+ Keysize int `mapstructure:"key_size"`
+ Validity string `mapstructure:"validity"`
+}
+
+func setDefaults() {
+ viper.SetDefault("ca", "http://localhost:10000")
+ viper.SetDefault("key_type", "rsa")
+ viper.SetDefault("key_size", 2048)
+ viper.SetDefault("validity", "24h")
+}
+
+func readConfig(path string) (*config, error) {
+ setDefaults()
+ viper.SetConfigFile(path)
+ viper.SetConfigType("hcl")
+ if err := viper.ReadInConfig(); err != nil {
+ return nil, err
+ }
+ c := &config{}
+ if err := viper.Unmarshal(c); err != nil {
+ return nil, err
+ }
+ return c, nil
+}
diff --git a/cmd/cashier/main.go b/cmd/cashier/main.go
index 8bcc3e7..2bac63a 100644
--- a/cmd/cashier/main.go
+++ b/cmd/cashier/main.go
@@ -10,6 +10,8 @@ import (
"net"
"net/http"
"os"
+ "os/user"
+ "path"
"time"
"github.com/nsheridan/cashier/lib"
@@ -19,10 +21,8 @@ import (
)
var (
- ca = flag.String("ca", "http://localhost:10000", "CA server")
- keybits = flag.Int("bits", 2048, "Key size. Ignored for ed25519 keys")
- validity = flag.Duration("validity", time.Hour*24, "Key validity")
- keytype = flag.String("key_type", "rsa", "Type of private key to generate - rsa, ecdsa or ed25519")
+ u, _ = user.Current()
+ cfg = flag.String("config", path.Join(u.HomeDir, ".cashier.cfg"), "Path to config file")
)
func installCert(a agent.Agent, cert *ssh.Certificate, key key) error {
@@ -37,8 +37,8 @@ func installCert(a agent.Agent, cert *ssh.Certificate, key key) error {
return nil
}
-func send(s []byte, token string) (*lib.SignResponse, error) {
- req, err := http.NewRequest("POST", *ca+"/sign", bytes.NewReader(s))
+func send(s []byte, token, ca string) (*lib.SignResponse, error) {
+ req, err := http.NewRequest("POST", ca+"/sign", bytes.NewReader(s))
if err != nil {
return nil, err
}
@@ -65,17 +65,21 @@ func send(s []byte, token string) (*lib.SignResponse, error) {
return c, nil
}
-func sign(pub ssh.PublicKey, token string) (*ssh.Certificate, error) {
+func sign(pub ssh.PublicKey, token string, conf *config) (*ssh.Certificate, error) {
+ validity, err := time.ParseDuration(conf.Validity)
+ if err != nil {
+ return nil, err
+ }
marshaled := ssh.MarshalAuthorizedKey(pub)
marshaled = marshaled[:len(marshaled)-1]
s, err := json.Marshal(&lib.SignRequest{
Key: string(marshaled),
- ValidUntil: time.Now().Add(*validity),
+ ValidUntil: time.Now().Add(validity),
})
if err != nil {
return nil, err
}
- resp, err := send(s, token)
+ resp, err := send(s, token, conf.CA)
if err != nil {
return nil, err
}
@@ -95,13 +99,16 @@ func sign(pub ssh.PublicKey, token string) (*ssh.Certificate, error) {
func main() {
flag.Parse()
-
- fmt.Printf("Your browser has been opened to visit %s\n", *ca)
- if err := browser.OpenURL(*ca); err != nil {
+ c, err := readConfig(*cfg)
+ if err != nil {
+ log.Fatalf("Error parsing config file: %v\n", err)
+ }
+ fmt.Printf("Your browser has been opened to visit %s\n", c.CA)
+ if err := browser.OpenURL(c.CA); err != nil {
fmt.Println("Error launching web browser. Go to the link in your web browser")
}
fmt.Println("Generating new key pair")
- priv, pub, err := generateKey(*keytype, *keybits)
+ priv, pub, err := generateKey(c.Keytype, c.Keysize)
if err != nil {
log.Fatalln("Error generating key pair: ", err)
}
@@ -110,7 +117,7 @@ func main() {
var token string
fmt.Scanln(&token)
- cert, err := sign(pub, token)
+ cert, err := sign(pub, token, c)
if err != nil {
log.Fatalln(err)
}