Skip to content

Commit

Permalink
all: move to one logrus instance
Browse files Browse the repository at this point in the history
  • Loading branch information
Aeneas Rekkas (arekkas) committed May 2, 2017
1 parent 6792fde commit f801ba7
Show file tree
Hide file tree
Showing 29 changed files with 104 additions and 101 deletions.
5 changes: 3 additions & 2 deletions client/manager_http.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

"github.com/ory-am/fosite"
"github.com/ory-am/hydra/pkg"
"github.com/pkg/errors"
)

type HTTPManager struct {
Expand All @@ -20,7 +21,7 @@ func (m *HTTPManager) GetConcreteClient(id string) (*Client, error) {
r.Client = m.Client
r.Dry = m.Dry
if err := r.Get(&c); err != nil {
return nil, err
return nil, errors.WithStack(err)
}

return &c, nil
Expand Down Expand Up @@ -57,7 +58,7 @@ func (m *HTTPManager) GetClients() (map[string]Client, error) {
r.Client = m.Client
r.Dry = m.Dry
if err := r.Get(&cs); err != nil {
return nil, err
return nil, errors.WithStack(err)
}

return cs, nil
Expand Down
2 changes: 1 addition & 1 deletion client/manager_sql.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ func (m *SQLManager) GetClient(id string) (fosite.Client, error) {
func (m *SQLManager) UpdateClient(c *Client) error {
o, err := m.GetClient(c.ID)
if err != nil {
return err
return errors.WithStack(err)
}

if c.Secret == "" {
Expand Down
2 changes: 1 addition & 1 deletion client/manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ func init() {
Hasher: &fosite.BCrypt{},
}

localWarden, httpClient := compose.NewFirewall("foo", "alice", fosite.Arguments{Scope}, &ladon.DefaultPolicy{
localWarden, httpClient := compose.NewMockFirewall("foo", "alice", fosite.Arguments{Scope}, &ladon.DefaultPolicy{
ID: "1",
Subjects: []string{"alice"},
Resources: []string{"rn:hydra:clients<.*>"},
Expand Down
4 changes: 1 addition & 3 deletions cmd/cli/handler_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@ import (
"encoding/json"
"fmt"
"os"

"strings"

"github.com/Sirupsen/logrus"
"github.com/ory-am/hydra/client"
"github.com/ory-am/hydra/config"
"github.com/ory-am/hydra/pkg"
Expand Down Expand Up @@ -73,7 +71,7 @@ func (h *ClientHandler) CreateClient(cmd *cobra.Command, args []string) {
pkg.Must(err, "Could not generate secret: %s", err)
secret = string(secretb)
} else {
logrus.Warn("You should not provide secrets using command line flags. The secret might leak to bash history and similar systems.")
fmt.Println("You should not provide secrets using command line flags. The secret might leak to bash history and similar systems.")
}

cc := &client.Client{
Expand Down
3 changes: 1 addition & 2 deletions cmd/connect.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"os"
"strings"

"github.com/Sirupsen/logrus"
"github.com/spf13/cobra"
)

Expand Down Expand Up @@ -36,7 +35,7 @@ var connectCmd = &cobra.Command{
}

if u, _ := cmd.Flags().GetString("secret"); u != "" {
logrus.Warn("You should not provide secrets using command line flags. The secret might leak to bash history and similar systems.")
fmt.Println("You should not provide secrets using command line flags. The secret might leak to bash history and similar systems.")
c.ClientSecret = u
} else if u := input("Client Secret [" + secret + "]: "); u != "" {
c.ClientSecret = u
Expand Down
18 changes: 9 additions & 9 deletions cmd/server/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ import (
"crypto/tls"
"net/http"
"time"

"fmt"
"github.com/Sirupsen/logrus"
"github.com/julienschmidt/httprouter"
"github.com/meatballhat/negroni-logrus"
"github.com/ory-am/hydra/client"
Expand All @@ -27,9 +25,10 @@ import (
func RunHost(c *config.Config) func(cmd *cobra.Command, args []string) {
return func(cmd *cobra.Command, args []string) {
router := httprouter.New()
logger := c.GetLogger()
serverHandler := &Handler{
Config: c,
H: herodot.NewJSONWriter(c.GetLogger()),
H: herodot.NewJSONWriter(logger),
}
serverHandler.registerRoutes(router)
c.ForceHTTP, _ = cmd.Flags().GetBool("dangerous-force-http")
Expand All @@ -47,13 +46,13 @@ func RunHost(c *config.Config) func(cmd *cobra.Command, args []string) {
}

if ok, _ := cmd.Flags().GetBool("dangerous-auto-logon"); ok {
logrus.Warnln("Do not use flag --dangerous-auto-logon in production.")
logger.Warnln("Do not use flag --dangerous-auto-logon in production.")
err := c.Persist()
pkg.Must(err, "Could not write configuration file: %s", err)
}

n := negroni.New()
n.Use(negronilogrus.NewMiddlewareFromLogger(c.GetLogger(), c.Issuer))
n.Use(negronilogrus.NewMiddlewareFromLogger(logger, c.Issuer))
n.UseFunc(serverHandler.rejectInsecureRequests)
n.UseHandler(router)

Expand All @@ -70,12 +69,12 @@ func RunHost(c *config.Config) func(cmd *cobra.Command, args []string) {
}

var err error
logrus.Infof("Setting up http server on %s", c.GetAddress())
logger.Infof("Setting up http server on %s", c.GetAddress())
if c.ForceHTTP {
logrus.Warnln("HTTPS disabled. Never do this in production.")
logger.Warnln("HTTPS disabled. Never do this in production.")
err = srv.ListenAndServe()
} else if c.AllowTLSTermination != "" {
logrus.Infoln("TLS termination enabled, disabling https.")
logger.Infoln("TLS termination enabled, disabling https.")
err = srv.ListenAndServe()
} else {
err = srv.ListenAndServeTLS("", "")
Expand Down Expand Up @@ -114,6 +113,7 @@ func (h *Handler) registerRoutes(router *httprouter.Router) {
Issuer: c.Issuer,
AccessTokenLifespan: c.GetAccessTokenLifespan(),
Groups: ctx.GroupManager,
L: c.GetLogger(),
}

// Set up handlers
Expand Down Expand Up @@ -150,7 +150,7 @@ func (h *Handler) rejectInsecureRequests(rw http.ResponseWriter, r *http.Request
next.ServeHTTP(rw, r)
return
} else {
logrus.WithError(err).Warnln("Could not serve http connection")
h.Config.GetLogger().WithError(err).Warnln("Could not serve http connection")
}

h.H.WriteErrorCode(rw, r, http.StatusBadGateway, errors.New("Can not serve request over insecure http"))
Expand Down
3 changes: 1 addition & 2 deletions cmd/server/handler_client_factory.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package server

import (
"github.com/Sirupsen/logrus"
"github.com/julienschmidt/httprouter"
"github.com/ory-am/hydra/client"
"github.com/ory-am/hydra/config"
Expand All @@ -23,7 +22,7 @@ func newClientManager(c *config.Config) client.Manager {
Hasher: ctx.Hasher,
}
if err := m.CreateSchemas(); err != nil {
logrus.Fatalf("Could not create client schema: %s", err)
c.GetLogger().Fatalf("Could not create client schema: %s", err)
}
return m
default:
Expand Down
5 changes: 2 additions & 3 deletions cmd/server/handler_jwk_factory.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package server

import (
"github.com/Sirupsen/logrus"
"github.com/julienschmidt/httprouter"
"github.com/ory-am/hydra/config"
"github.com/ory/herodot"
Expand All @@ -23,12 +22,12 @@ func injectJWKManager(c *config.Config) {
},
}
if err := m.CreateSchemas(); err != nil {
logrus.Fatalf("Could not create jwk schema: %s", err)
c.GetLogger().Fatalf("Could not create jwk schema: %s", err)
}
ctx.KeyManager = m
break
default:
logrus.Fatalf("Unknown connection type.")
c.GetLogger().Fatalf("Unknown connection type.")
}
}

Expand Down
10 changes: 5 additions & 5 deletions cmd/server/handler_oauth2_factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package server
import (
"fmt"
"net/url"
"github.com/Sirupsen/logrus"
"github.com/gorilla/sessions"
"github.com/julienschmidt/httprouter"
"github.com/ory-am/fosite"
Expand Down Expand Up @@ -35,9 +34,10 @@ func injectFositeStore(c *config.Config, clients client.Manager) {
m := &oauth2.FositeSQLStore{
DB: con.GetDatabase(),
Manager: clients,
L: c.GetLogger(),
}
if err := m.CreateSchemas(); err != nil {
logrus.Fatalf("Could not create oauth2 schema: %s", err)
c.GetLogger().Fatalf("Could not create oauth2 schema: %s", err)
}
store = m
break
Expand All @@ -55,13 +55,13 @@ func newOAuth2Provider(c *config.Config, km jwk.Manager) fosite.OAuth2Provider {
createRS256KeysIfNotExist(c, oauth2.OpenIDConnectKeyName, "private", "sig")
keys, err := km.GetKey(oauth2.OpenIDConnectKeyName, "private")
if errors.Cause(err) == pkg.ErrNotFound {
logrus.Warnln("Could not find OpenID Connect signing keys. Generating a new keypair...")
c.GetLogger().Warnln("Could not find OpenID Connect signing keys. Generating a new keypair...")
keys, err = new(jwk.RS256Generator).Generate("")

pkg.Must(err, "Could not generate signing key for OpenID Connect")
km.AddKeySet(oauth2.OpenIDConnectKeyName, keys)
logrus.Infoln("Keypair generated.")
logrus.Warnln("WARNING: Automated key creation causes low entropy. Replace the keys as soon as possible.")
c.GetLogger().Infoln("Keypair generated.")
c.GetLogger().Warnln("WARNING: Automated key creation causes low entropy. Replace the keys as soon as possible.")
} else {
pkg.Must(err, "Could not fetch signing key for OpenID Connect")
}
Expand Down
4 changes: 3 additions & 1 deletion cmd/server/handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ import (
func TestStart(t *testing.T) {
router := httprouter.New()
h := &Handler{
Config: &config.Config{},
Config: &config.Config{
DatabaseURL: "memory",
},
}
h.registerRoutes(router)
}
22 changes: 10 additions & 12 deletions cmd/server/helper_cert.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ import (
"encoding/pem"
"math/big"
"time"

"github.com/Sirupsen/logrus"
"github.com/ory-am/hydra/config"
"github.com/ory-am/hydra/jwk"
"github.com/ory-am/hydra/pkg"
Expand All @@ -24,7 +22,7 @@ const (
tlsKeyName = "hydra.https-tls"
)

func loadCertificateFromFile(cmd *cobra.Command) *tls.Certificate {
func loadCertificateFromFile(cmd *cobra.Command, c *config.Config) *tls.Certificate {
keyPath := viper.GetString("HTTPS_TLS_KEY_PATH")
certPath := viper.GetString("HTTPS_TLS_CERT_PATH")
if kp, _ := cmd.Flags().GetString("https-tls-key-path"); kp != "" {
Expand All @@ -37,13 +35,13 @@ func loadCertificateFromFile(cmd *cobra.Command) *tls.Certificate {

cert, err := tls.LoadX509KeyPair(certPath, keyPath)
if err != nil {
logrus.Warn("Could not load x509 key pair: %s", cert)
c.GetLogger().Warn("Could not load x509 key pair: %s", cert)
return nil
}
return &cert
}

func loadCertificateFromEnv() *tls.Certificate {
func loadCertificateFromEnv(c *config.Config) *tls.Certificate {
keyString := viper.GetString("HTTPS_TLS_KEY")
certString := viper.GetString("HTTPS_TLS_CERT")
if keyString == "" || certString == "" {
Expand All @@ -56,26 +54,26 @@ func loadCertificateFromEnv() *tls.Certificate {
var cert tls.Certificate
var err error
if cert, err = tls.X509KeyPair([]byte(certString), []byte(keyString)); err != nil {
logrus.Warningf("Could not parse x509 key pair from env: %s", cert)
c.GetLogger().Warningf("Could not parse x509 key pair from env: %s", cert)
return nil
}

return &cert
}

func getOrCreateTLSCertificate(cmd *cobra.Command, c *config.Config) tls.Certificate {
if cert := loadCertificateFromFile(cmd); cert != nil {
logrus.Info("Loaded tls certificate from file")
if cert := loadCertificateFromFile(cmd, c); cert != nil {
c.GetLogger().Info("Loaded tls certificate from file")
return *cert
} else if cert := loadCertificateFromEnv(); cert != nil {
logrus.Info("Loaded certificate from environment variable")
} else if cert := loadCertificateFromEnv(c); cert != nil {
c.GetLogger().Info("Loaded certificate from environment variable")
return *cert
}

ctx := c.Context()
keys, err := ctx.KeyManager.GetKey(tlsKeyName, "private")
if errors.Cause(err) == pkg.ErrNotFound {
logrus.Warn("No TLS Key / Certificate for HTTPS found. Generating self-signed certificate.")
c.GetLogger().Warn("No TLS Key / Certificate for HTTPS found. Generating self-signed certificate.")

keys, err = new(jwk.ECDSA256Generator).Generate("")
pkg.Must(err, "Could not generate key: %s", err)
Expand Down Expand Up @@ -105,7 +103,7 @@ func getOrCreateTLSCertificate(cmd *cobra.Command, c *config.Config) tls.Certifi
}

if len(private.Certificates) == 0 {
logrus.Fatal("TLS certificate chain can not be empty")
c.GetLogger().Fatal("TLS certificate chain can not be empty")
}

pemCert := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: private.Certificates[0].Raw})
Expand Down
13 changes: 6 additions & 7 deletions cmd/server/helper_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"os"
"strings"

"github.com/Sirupsen/logrus"
"github.com/ory-am/hydra/client"
"github.com/ory-am/hydra/config"
"github.com/ory-am/hydra/pkg"
Expand Down Expand Up @@ -32,11 +31,11 @@ func (h *Handler) createRootIfNewInstall(c *config.Config) {
id = credentials[0]
secret = credentials[1]
} else {
logrus.Warnln("You passed malformed root client credentials, falling back to random values.")
c.GetLogger().Warnln("You passed malformed root client credentials, falling back to random values.")
}
}

logrus.Warn("No clients were found. Creating a temporary root client...")
c.GetLogger().Warn("No clients were found. Creating a temporary root client...")
root := &client.Client{
ID: id,
Name: "This temporary client is generated by hydra and is granted all of hydra's administrative privileges. It must be removed when everything is set up.",
Expand All @@ -61,10 +60,10 @@ func (h *Handler) createRootIfNewInstall(c *config.Config) {
c.ClientID = root.ID
c.ClientSecret = string(secret)

logrus.Infoln("Temporary root client created.")
c.GetLogger().Infoln("Temporary root client created.")
if forceRoot == "" {
logrus.Infof("client_id: %s", root.GetID())
logrus.Infof("client_secret: %s", string(secret))
logrus.Warn("WARNING: YOU MUST delete this client once in production, as credentials may have been leaked in your logfiles.")
c.GetLogger().Infof("client_id: %s", root.GetID())
c.GetLogger().Infof("client_secret: %s", string(secret))
c.GetLogger().Warn("WARNING: YOU MUST delete this client once in production, as credentials may have been leaked in your logfiles.")
}
}
4 changes: 1 addition & 3 deletions cmd/server/helper_keys.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ package server
import (
"crypto/ecdsa"
"crypto/rsa"

"github.com/Sirupsen/logrus"
"github.com/ory-am/hydra/config"
"github.com/ory-am/hydra/jwk"
"github.com/ory-am/hydra/pkg"
Expand All @@ -16,7 +14,7 @@ func createRS256KeysIfNotExist(c *config.Config, set, kid, use string) {
generator := jwk.RS256Generator{}

if _, err := ctx.KeyManager.GetKey(set, kid); errors.Cause(err) == pkg.ErrNotFound {
logrus.Infof("Key pair for signing %s is missing. Creating new one.", set)
c.GetLogger().Infof("Key pair for signing %s is missing. Creating new one.", set)

keys, err := generator.Generate("")
pkg.Must(err, "Could not generate %s key: %s", set, err)
Expand Down
4 changes: 3 additions & 1 deletion compose/firewall.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,10 @@ import (
"github.com/ory-am/hydra/warden/group"
"github.com/ory/ladon"
"golang.org/x/oauth2"
"github.com/Sirupsen/logrus"
)

func NewFirewall(issuer string, subject string, scopes fosite.Arguments, p ...ladon.Policy) (firewall.Firewall, *http.Client) {
func NewMockFirewall(issuer string, subject string, scopes fosite.Arguments, p ...ladon.Policy) (firewall.Firewall, *http.Client) {
tokens := pkg.Tokens(1)

fositeStore := pkg.FositeStore()
Expand Down Expand Up @@ -48,6 +49,7 @@ func NewFirewall(issuer string, subject string, scopes fosite.Arguments, p ...la
Issuer: issuer,
AccessTokenLifespan: time.Hour,
Groups: group.NewMemoryManager(),
L: logrus.New(),
}, conf.Client(oauth2.NoContext, &oauth2.Token{
AccessToken: tokens[0][1],
Expiry: time.Now().Add(time.Hour),
Expand Down
Loading

0 comments on commit f801ba7

Please sign in to comment.