aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiall Sheridan <nsheridan@gmail.com>2017-02-12 18:34:41 +0000
committerNiall Sheridan <nsheridan@gmail.com>2017-02-12 18:34:41 +0000
commit6e00d0000e54f21a4a393e67fd914bda4d394f4a (patch)
treeb832e50c45aadc0bf4d0e0d8c45ca32754e8733c
parented8bc523fd0d1a66acf3fa449c453508035efdfc (diff)
Minor fixups
Correct some flag strings and some format strings Don't fatal when the client config file is missing Make keysigner, certstore and authprovider package-level
-rw-r--r--cmd/cashier/main.go10
-rw-r--r--cmd/cashierd/handlers_test.go14
-rw-r--r--cmd/cashierd/main.go47
3 files changed, 33 insertions, 38 deletions
diff --git a/cmd/cashier/main.go b/cmd/cashier/main.go
index 53deffd..77a0b4b 100644
--- a/cmd/cashier/main.go
+++ b/cmd/cashier/main.go
@@ -19,9 +19,9 @@ var (
u, _ = user.Current()
cfg = pflag.String("config", path.Join(u.HomeDir, ".cashier.conf"), "Path to config file")
ca = pflag.String("ca", "http://localhost:10000", "CA server")
- keysize = pflag.Int("key_size", 2048, "Key size. Ignored for ed25519 keys")
- validity = pflag.Duration("validity", time.Hour*24, "Key validity")
- keytype = pflag.String("key_type", "rsa", "Type of private key to generate - rsa, ecdsa or ed25519")
+ keysize = pflag.Int("key_size", 0, "Size of key to generate. Ignored for ed25519 keys. (default 2048 for rsa keys, 256 for ecdsa keys)")
+ validity = pflag.Duration("validity", time.Hour*24, "Key lifetime. May be overridden by the CA at signing time")
+ keytype = pflag.String("key_type", "", "Type of private key to generate - rsa, ecdsa or ed25519. (default \"rsa\")")
publicFilePrefix = pflag.String("public_file_prefix", "", "Prefix for filename for public key and cert (optional, no default)")
)
@@ -30,7 +30,7 @@ func main() {
c, err := client.ReadConfig(*cfg)
if err != nil {
- log.Fatalf("Error parsing config file: %v\n", err)
+ log.Printf("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 {
@@ -52,7 +52,7 @@ func main() {
}
sock, err := net.Dial("unix", os.Getenv("SSH_AUTH_SOCK"))
if err != nil {
- log.Fatalln("Error connecting to agent: %s", err)
+ log.Fatalf("Error connecting to agent: %v\n", err)
}
defer sock.Close()
a := agent.NewClient(sock)
diff --git a/cmd/cashierd/handlers_test.go b/cmd/cashierd/handlers_test.go
index a6bd113..934d5d0 100644
--- a/cmd/cashierd/handlers_test.go
+++ b/cmd/cashierd/handlers_test.go
@@ -34,19 +34,17 @@ func newContext(t *testing.T) *appContext {
defer os.Remove(f.Name())
f.Write(testdata.Priv)
f.Close()
- signer, err := signer.New(&config.SSH{
+ if keysigner, err = signer.New(&config.SSH{
SigningKey: f.Name(),
MaxAge: "1h",
- })
- if err != nil {
+ }); err != nil {
t.Error(err)
}
+ authprovider = testprovider.New()
+ certstore = store.NewMemoryStore()
return &appContext{
- cookiestore: sessions.NewCookieStore([]byte("secret")),
- authprovider: testprovider.New(),
- certstore: store.NewMemoryStore(),
- authsession: &auth.Session{AuthURL: "https://www.example.com/auth"},
- sshKeySigner: signer,
+ cookiestore: sessions.NewCookieStore([]byte("secret")),
+ authsession: &auth.Session{AuthURL: "https://www.example.com/auth"},
}
}
diff --git a/cmd/cashierd/main.go b/cmd/cashierd/main.go
index 85c2d81..8164cf7 100644
--- a/cmd/cashierd/main.go
+++ b/cmd/cashierd/main.go
@@ -46,15 +46,16 @@ import (
var (
cfg = flag.String("config_file", "cashierd.conf", "Path to configuration file.")
-)
-// appContext contains local context - cookiestore, authprovider, authsession etc.
-type appContext struct {
- cookiestore *sessions.CookieStore
authprovider auth.Provider
- authsession *auth.Session
- sshKeySigner *signer.KeySigner
certstore store.CertStorer
+ keysigner *signer.KeySigner
+)
+
+// appContext contains local context - cookiestore, authsession etc.
+type appContext struct {
+ cookiestore *sessions.CookieStore
+ authsession *auth.Session
}
// getAuthTokenCookie retrieves a cookie from the request.
@@ -116,7 +117,7 @@ func (a *appContext) setCurrentURL(w http.ResponseWriter, r *http.Request) {
func (a *appContext) isLoggedIn(w http.ResponseWriter, r *http.Request) bool {
tok := a.getAuthTokenCookie(r)
- if !tok.Valid() || !a.authprovider.Valid(tok) {
+ if !tok.Valid() || !authprovider.Valid(tok) {
return false
}
return true
@@ -152,7 +153,7 @@ func signHandler(a *appContext, w http.ResponseWriter, r *http.Request) (int, er
token := &oauth2.Token{
AccessToken: t,
}
- ok := a.authprovider.Valid(token)
+ ok := authprovider.Valid(token)
if !ok {
return http.StatusUnauthorized, errors.New(http.StatusText(http.StatusUnauthorized))
}
@@ -162,13 +163,13 @@ func signHandler(a *appContext, w http.ResponseWriter, r *http.Request) (int, er
if err != nil {
return http.StatusBadRequest, errors.Wrap(err, "unable to extract key from request")
}
- username := a.authprovider.Username(token)
- a.authprovider.Revoke(token) // We don't need this anymore.
- cert, err := a.sshKeySigner.SignUserKey(req, username)
+ username := authprovider.Username(token)
+ authprovider.Revoke(token) // We don't need this anymore.
+ cert, err := keysigner.SignUserKey(req, username)
if err != nil {
return http.StatusInternalServerError, errors.Wrap(err, "error signing key")
}
- if err := a.certstore.SetCert(cert); err != nil {
+ if err := certstore.SetCert(cert); err != nil {
log.Printf("Error recording cert: %v", err)
}
if err := json.NewEncoder(w).Encode(&lib.SignResponse{
@@ -184,7 +185,7 @@ func signHandler(a *appContext, w http.ResponseWriter, r *http.Request) (int, er
func loginHandler(a *appContext, w http.ResponseWriter, r *http.Request) (int, error) {
state := newState()
a.setAuthStateCookie(w, r, state)
- a.authsession = a.authprovider.StartSession(state)
+ a.authsession = authprovider.StartSession(state)
http.Redirect(w, r, a.authsession.AuthURL, http.StatusFound)
return http.StatusFound, nil
}
@@ -195,7 +196,7 @@ func callbackHandler(a *appContext, w http.ResponseWriter, r *http.Request) (int
return http.StatusUnauthorized, errors.New(http.StatusText(http.StatusUnauthorized))
}
code := r.FormValue("code")
- if err := a.authsession.Authorize(a.authprovider, code); err != nil {
+ if err := a.authsession.Authorize(authprovider, code); err != nil {
return http.StatusInternalServerError, err
}
a.setAuthTokenCookie(w, r, a.authsession.Token)
@@ -219,11 +220,11 @@ func rootHandler(a *appContext, w http.ResponseWriter, r *http.Request) (int, er
}
func listRevokedCertsHandler(a *appContext, w http.ResponseWriter, r *http.Request) (int, error) {
- revoked, err := a.certstore.GetRevoked()
+ revoked, err := certstore.GetRevoked()
if err != nil {
return http.StatusInternalServerError, err
}
- rl, err := a.sshKeySigner.GenerateRevocationList(revoked)
+ rl, err := keysigner.GenerateRevocationList(revoked)
if err != nil {
return http.StatusInternalServerError, errors.Wrap(err, "unable to generate KRL")
}
@@ -248,7 +249,7 @@ func listCertsJSONHandler(a *appContext, w http.ResponseWriter, r *http.Request)
return http.StatusUnauthorized, errors.New(http.StatusText(http.StatusUnauthorized))
}
includeExpired, _ := strconv.ParseBool(r.URL.Query().Get("all"))
- certs, err := a.certstore.List(includeExpired)
+ certs, err := certstore.List(includeExpired)
j, err := json.Marshal(certs)
if err != nil {
return http.StatusInternalServerError, errors.New(http.StatusText(http.StatusInternalServerError))
@@ -263,7 +264,7 @@ func revokeCertHandler(a *appContext, w http.ResponseWriter, r *http.Request) (i
}
r.ParseForm()
for _, id := range r.Form["cert_id"] {
- if err := a.certstore.Revoke(id); err != nil {
+ if err := certstore.Revoke(id); err != nil {
return http.StatusInternalServerError, errors.Wrap(err, "unable to revoke")
}
}
@@ -326,7 +327,7 @@ func main() {
})
vaultfs.Register(conf.Vault)
- signer, err := signer.New(conf.SSH)
+ keysigner, err = signer.New(conf.SSH)
if err != nil {
log.Fatal(err)
}
@@ -378,7 +379,6 @@ func main() {
// Unprivileged section
metrics.Register()
- var authprovider auth.Provider
switch conf.Auth.Provider {
case "google":
authprovider, err = google.New(conf.Auth)
@@ -393,15 +393,12 @@ func main() {
log.Fatal(errors.Wrapf(err, "unable to use provider '%s'", conf.Auth.Provider))
}
- certstore, err := store.New(conf.Server.Database)
+ certstore, err = store.New(conf.Server.Database)
if err != nil {
log.Fatal(err)
}
ctx := &appContext{
- cookiestore: sessions.NewCookieStore([]byte(conf.Server.CookieSecret)),
- authprovider: authprovider,
- sshKeySigner: signer,
- certstore: certstore,
+ cookiestore: sessions.NewCookieStore([]byte(conf.Server.CookieSecret)),
}
ctx.cookiestore.Options = &sessions.Options{
MaxAge: 900,