Skip to content

Commit

Permalink
refactor: deprecate driver semantics
Browse files Browse the repository at this point in the history
  • Loading branch information
aeneasr committed Dec 2, 2020
1 parent 1c1433a commit 8fc3e2e
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 85 deletions.
11 changes: 0 additions & 11 deletions driver/driver.go

This file was deleted.

47 changes: 0 additions & 47 deletions driver/driver_default.go

This file was deleted.

91 changes: 91 additions & 0 deletions driver/factory.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package driver

import (
"context"
"github.com/spf13/pflag"

"github.com/ory/x/logrusx"

"github.com/ory/hydra/driver/config"
)

type options struct {
forcedValues map[string]interface{}
preload bool
validate bool
}

func newOptions() *options {
return &options{
forcedValues: make(map[string]interface{}),
validate: true,
preload: true,
}
}

type OptionsModifier func(*options)

// ForceConfigValue overrides any config values set by one of the providers.
func ForceConfigValue(key string, value interface{}) OptionsModifier {
return func(o *options) {
o.forcedValues[key] = value
}
}

// DisableValidation validating the config.
//
// This does not affect schema validation!
func DisableValidation() OptionsModifier {
return func(o *options) {
o.validate = false
}
}

// DisableValidation validating the config.
//
// This does not affect schema validation!
func DisablePreloading() OptionsModifier {
return func(o *options) {
o.preload = false
}
}

func New(flags *pflag.FlagSet, opts ...OptionsModifier) Registry {
o := newOptions()
for _, f := range opts {
f(o)
}

l := logrusx.New("ORY Hydra", config.Version)
c, err := config.New(flags, l)
if err != nil {
l.WithError(err).Fatal("Unable to instantiate service registry.")
}
l.UseConfig(c.Source())

for k, v := range o.forcedValues {
c.Set(k, v)
}

if o.validate {
config.MustValidate(l, c)
}

r, err := NewRegistryFromDSN(c, l)
if err != nil {
l.WithError(err).Fatal("Unable to instantiate service registry.")
}

if err = r.Init(); err != nil {
l.WithError(err).Fatal("Unable to initialize service registry.")
}

// Avoid cold cache issues on boot:
if o.preload {
CallRegistry(r)
}

c.Source().SetTracer(context.Background(), r.Tracer())

return r
}
14 changes: 4 additions & 10 deletions driver/registry.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import (

"github.com/ory/hydra/client"
"github.com/ory/hydra/consent"
"github.com/ory/hydra/driver/configuration"
"github.com/ory/hydra/driver/config"
"github.com/ory/hydra/jwk"
"github.com/ory/hydra/oauth2"
"github.com/ory/hydra/x"
Expand All @@ -32,16 +32,10 @@ type Registry interface {

Init() error

WithConfig(c configuration.Provider) Registry
WithConfig(c *config.ViperProvider) Registry
WithLogger(l *logrusx.Logger) Registry

Config() configuration.Provider

WithBuildInfo(version, hash, date string) Registry
BuildVersion() string
BuildDate() string
BuildHash() string

Config() *config.ViperProvider
persistence.Provider
x.RegistryLogger
x.RegistryWriter
Expand All @@ -65,7 +59,7 @@ type Registry interface {
WithConsentStrategy(c consent.Strategy)
}

func NewRegistry(c configuration.Provider, l *logrusx.Logger) (Registry, error) {
func NewRegistryFromDSN(c *config.ViperProvider, l *logrusx.Logger) (Registry, error) {
driver, err := dbal.GetDriverFor(c.DSN())
if err != nil {
return nil, errorsx.WithStack(err)
Expand Down
24 changes: 10 additions & 14 deletions driver/registry_base.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (
"strings"
"time"

"github.com/ory/hydra/x/oauth2cors"

"github.com/ory/hydra/persistence"

"github.com/prometheus/client_golang/prometheus/promhttp"
Expand All @@ -27,7 +29,7 @@ import (

"github.com/ory/hydra/client"
"github.com/ory/hydra/consent"
"github.com/ory/hydra/driver/configuration"
"github.com/ory/hydra/driver/config"
"github.com/ory/hydra/jwk"
"github.com/ory/hydra/oauth2"
"github.com/ory/hydra/x"
Expand All @@ -36,7 +38,7 @@ import (
type RegistryBase struct {
l *logrusx.Logger
al *logrusx.Logger
C configuration.Provider
C *config.ViperProvider
ch *client.Handler
fh fosite.Hasher
kh *jwk.Handler
Expand Down Expand Up @@ -83,7 +85,7 @@ func (m *RegistryBase) WithBuildInfo(version, hash, date string) Registry {

func (m *RegistryBase) OAuth2AwareMiddleware() func(h http.Handler) http.Handler {
if m.oa2mw == nil {
m.oa2mw = OAuth2AwareCORSMiddleware("public", m.r, m.C)
m.oa2mw = oauth2cors.Middleware(m.r)
}
return m.oa2mw
}
Expand Down Expand Up @@ -114,7 +116,7 @@ func (m *RegistryBase) BuildHash() string {
return m.buildHash
}

func (m *RegistryBase) WithConfig(c configuration.Provider) Registry {
func (m *RegistryBase) WithConfig(c *config.ViperProvider) Registry {
m.C = c
return m.r
}
Expand Down Expand Up @@ -394,17 +396,11 @@ func (m *RegistryBase) SubjectIdentifierAlgorithm() map[string]consent.SubjectId

func (m *RegistryBase) Tracer() *tracing.Tracer {
if m.trc == nil {
m.trc = &tracing.Tracer{
ServiceName: m.C.TracingServiceName(),
JaegerConfig: m.C.TracingJaegerConfig(),
ZipkinConfig: m.C.TracingZipkinConfig(),
Provider: m.C.TracingProvider(),
Logger: m.Logger(),
}

if err := m.trc.Setup(); err != nil {
t, err := tracing.New(m.l, m.C.Tracing())
if err != nil {
m.Logger().WithError(err).Fatalf("Unable to initialize Tracer.")
}
m.trc = t
}

return m.trc
Expand All @@ -421,7 +417,7 @@ func (m *RegistryBase) Persister() persistence.Persister {
return m.persister
}

func (m *RegistryBase) Config() configuration.Provider {
func (m *RegistryBase) Config() *config.ViperProvider {
return m.C
}

Expand Down
4 changes: 1 addition & 3 deletions driver/registry_sql.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ import (
"github.com/luna-duclos/instrumentedsql"
"github.com/luna-duclos/instrumentedsql/opentracing"

"github.com/ory/hydra/driver/configuration"

"github.com/ory/x/resilience"

"github.com/gobuffalo/pop/v5"
Expand Down Expand Up @@ -83,7 +81,7 @@ func (m *RegistrySQL) Init() error {
}

// if dsn is memory we have to run the migrations on every start
if m.C.DSN() == configuration.DefaultSQLiteMemoryDSN {
if m.C.DSN() == dbal.InMemoryDSN {
m.Logger().Print("Hydra is running migrations on every startup as DSN is memory.\n")
m.Logger().Print("This means your data is lost when Hydra terminates.\n")
if err := m.persister.MigrateUp(context.Background()); err != nil {
Expand Down

0 comments on commit 8fc3e2e

Please sign in to comment.