mirror of https://github.com/ory/hydra
141 lines
3.6 KiB
Go
141 lines
3.6 KiB
Go
// Copyright © 2022 Ory Corp
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package driver
|
|
|
|
import (
|
|
"context"
|
|
"io/fs"
|
|
"net/http"
|
|
|
|
"go.opentelemetry.io/otel/trace"
|
|
|
|
"github.com/ory/hydra/v2/fositex"
|
|
"github.com/ory/hydra/v2/internal/kratos"
|
|
"github.com/ory/x/httprouterx"
|
|
"github.com/ory/x/popx"
|
|
|
|
"github.com/ory/hydra/v2/aead"
|
|
"github.com/ory/hydra/v2/hsm"
|
|
"github.com/ory/x/contextx"
|
|
|
|
"github.com/ory/hydra/v2/oauth2/trust"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
"github.com/ory/x/errorsx"
|
|
|
|
"github.com/ory/fosite"
|
|
foauth2 "github.com/ory/fosite/handler/oauth2"
|
|
|
|
"github.com/ory/x/logrusx"
|
|
|
|
"github.com/ory/hydra/v2/persistence"
|
|
|
|
prometheus "github.com/ory/x/prometheusx"
|
|
|
|
"github.com/ory/x/dbal"
|
|
"github.com/ory/x/healthx"
|
|
|
|
"github.com/ory/hydra/v2/client"
|
|
"github.com/ory/hydra/v2/consent"
|
|
"github.com/ory/hydra/v2/driver/config"
|
|
"github.com/ory/hydra/v2/jwk"
|
|
"github.com/ory/hydra/v2/oauth2"
|
|
"github.com/ory/hydra/v2/x"
|
|
)
|
|
|
|
type Registry interface {
|
|
dbal.Driver
|
|
|
|
Init(ctx context.Context, skipNetworkInit bool, migrate bool, ctxer contextx.Contextualizer, extraMigrations []fs.FS, goMigrations []popx.Migration) error
|
|
|
|
WithBuildInfo(v, h, d string) Registry
|
|
WithConfig(c *config.DefaultProvider) Registry
|
|
WithContextualizer(ctxer contextx.Contextualizer) Registry
|
|
WithLogger(l *logrusx.Logger) Registry
|
|
WithTracer(t trace.Tracer) Registry
|
|
WithTracerWrapper(TracerWrapper) Registry
|
|
WithKratos(k kratos.Client) Registry
|
|
x.HTTPClientProvider
|
|
GetJWKSFetcherStrategy() fosite.JWKSFetcherStrategy
|
|
|
|
WithExtraFositeFactories(f []fositex.Factory) Registry
|
|
ExtraFositeFactories() []fositex.Factory
|
|
|
|
contextx.Provider
|
|
config.Provider
|
|
persistence.Provider
|
|
x.RegistryLogger
|
|
x.RegistryWriter
|
|
x.RegistryCookieStore
|
|
client.Registry
|
|
consent.Registry
|
|
jwk.Registry
|
|
trust.Registry
|
|
oauth2.Registry
|
|
PrometheusManager() *prometheus.MetricsManager
|
|
x.TracingProvider
|
|
FlowCipher() *aead.XChaCha20Poly1305
|
|
|
|
kratos.Provider
|
|
|
|
RegisterRoutes(ctx context.Context, admin *httprouterx.RouterAdmin, public *httprouterx.RouterPublic)
|
|
ClientHandler() *client.Handler
|
|
KeyHandler() *jwk.Handler
|
|
ConsentHandler() *consent.Handler
|
|
OAuth2Handler() *oauth2.Handler
|
|
HealthHandler() *healthx.Handler
|
|
OAuth2AwareMiddleware() func(h http.Handler) http.Handler
|
|
|
|
OAuth2HMACStrategy() *foauth2.HMACSHAStrategy
|
|
WithOAuth2Provider(f fosite.OAuth2Provider)
|
|
WithConsentStrategy(c consent.Strategy)
|
|
WithHsmContext(h hsm.Context)
|
|
}
|
|
|
|
func NewRegistryFromDSN(ctx context.Context, c *config.DefaultProvider, l *logrusx.Logger, skipNetworkInit bool, migrate bool, ctxer contextx.Contextualizer) (Registry, error) {
|
|
registry, err := NewRegistryWithoutInit(c, l)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err := registry.Init(ctx, skipNetworkInit, migrate, ctxer, nil, nil); err != nil {
|
|
return nil, err
|
|
}
|
|
return registry, nil
|
|
}
|
|
|
|
func NewRegistryWithoutInit(c *config.DefaultProvider, l *logrusx.Logger) (Registry, error) {
|
|
driver, err := dbal.GetDriverFor(c.DSN())
|
|
if err != nil {
|
|
return nil, errorsx.WithStack(err)
|
|
}
|
|
registry, ok := driver.(Registry)
|
|
if !ok {
|
|
return nil, errors.Errorf("driver of type %T does not implement interface Registry", driver)
|
|
}
|
|
registry = registry.WithLogger(l).WithConfig(c).WithBuildInfo(config.Version, config.Commit, config.Date)
|
|
|
|
return registry, nil
|
|
}
|
|
|
|
func CallRegistry(ctx context.Context, r Registry) {
|
|
r.ClientValidator()
|
|
r.ClientManager()
|
|
r.ClientHasher()
|
|
r.ConsentManager()
|
|
r.ConsentStrategy()
|
|
r.SubjectIdentifierAlgorithm(ctx)
|
|
r.KeyManager()
|
|
r.KeyCipher()
|
|
r.FlowCipher()
|
|
r.OAuth2Storage()
|
|
r.OAuth2Provider()
|
|
r.AudienceStrategy()
|
|
r.AccessTokenJWTStrategy()
|
|
r.OpenIDJWTStrategy()
|
|
r.OpenIDConnectRequestValidator()
|
|
r.PrometheusManager()
|
|
r.Tracer(ctx)
|
|
}
|