package app import ( "context" "net/http" "os" "github.com/rs/zerolog" "github.com/xlgmokha/x/pkg/env" "github.com/xlgmokha/x/pkg/ioc" "github.com/xlgmokha/x/pkg/log" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/controllers/dashboard" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/controllers/health" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/controllers/sessions" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/app/controllers/sparkles" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/db" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/oidc" "gitlab.com/gitlab-org/software-supply-chain-security/authorization/sparkled/pkg/web" "golang.org/x/oauth2" ) func init() { ioc.RegisterSingleton[*zerolog.Logger](ioc.Default, func() *zerolog.Logger { return log.New(os.Stdout, log.Fields{}) }) ioc.RegisterSingleton[db.Repository](ioc.Default, func() db.Repository { return db.NewRepository() }) ioc.RegisterSingleton[*http.ServeMux](ioc.Default, func() *http.ServeMux { return http.NewServeMux() }) ioc.Register[*dashboard.Controller](ioc.Default, func() *dashboard.Controller { return dashboard.New() }) ioc.Register[*sparkles.Controller](ioc.Default, func() *sparkles.Controller { return sparkles.New(ioc.MustResolve[db.Repository](ioc.Default)) }) ioc.Register[*health.Controller](ioc.Default, func() *health.Controller { return health.New() }) ioc.RegisterSingleton[*http.Client](ioc.Default, func() *http.Client { return &http.Client{ Transport: &web.Transport{ Logger: ioc.MustResolve[*zerolog.Logger](ioc.Default), }, } }) ioc.RegisterSingleton[*oidc.OpenID](ioc.Default, func() *oidc.OpenID { item, err := oidc.New( context.WithValue(context.Background(), oauth2.HTTPClient, ioc.MustResolve[*http.Client](ioc.Default)), env.Fetch("OIDC_ISSUER", "https://gitlab.com"), env.Fetch("OAUTH_CLIENT_ID", "client_id"), env.Fetch("OAUTH_CLIENT_SECRET", "client_secret"), env.Fetch("OAUTH_REDIRECT_URL", "http://localhost:8080/session/callback"), ) if err != nil { ioc.MustResolve[*zerolog.Logger](ioc.Default).Err(err).Send() } return item }) ioc.Register[*sessions.Controller](ioc.Default, func() *sessions.Controller { return sessions.New( ioc.MustResolve[*oidc.OpenID](ioc.Default), ioc.MustResolve[*http.Client](ioc.Default), ) }) }