mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
82 lines
2.2 KiB
Go
82 lines
2.2 KiB
Go
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
|
|
// Licensed under the GNU Affero General Public License (AGPL).
|
|
// See License.AGPL.txt in the project root for license information.
|
|
|
|
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
|
|
db "github.com/gitpod-io/gitpod/components/gitpod-db/go"
|
|
v1 "github.com/gitpod-io/gitpod/components/iam-api/go/v1"
|
|
|
|
"github.com/gitpod-io/gitpod/common-go/baseserver"
|
|
"github.com/gitpod-io/gitpod/iam/pkg/apiv1"
|
|
"github.com/gitpod-io/gitpod/iam/pkg/config"
|
|
"github.com/gitpod-io/gitpod/iam/pkg/oidc"
|
|
"github.com/go-chi/chi/v5"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func Start(logger *logrus.Entry, version string, cfg *config.ServiceConfig) error {
|
|
logger.WithField("config", cfg).Info("Starting IAM server.")
|
|
|
|
dbConn, err := db.Connect(db.ConnectionParamsFromEnv())
|
|
if err != nil {
|
|
return fmt.Errorf("failed to establish database connection: %w", err)
|
|
}
|
|
|
|
cipherSet, err := db.NewCipherSetFromKeysInFile(filepath.Join(cfg.DatabaseConfigPath, "encryptionKeys"))
|
|
if err != nil {
|
|
return fmt.Errorf("failed to read cipherset from file: %w", err)
|
|
}
|
|
|
|
srv, err := baseserver.New("iam",
|
|
baseserver.WithLogger(logger),
|
|
baseserver.WithConfig(cfg.Server),
|
|
baseserver.WithVersion(version),
|
|
)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to initialize IAM server: %w", err)
|
|
}
|
|
|
|
oidcService := oidc.NewService(cfg.SessionServiceAddress)
|
|
oidcClientConfigService := apiv1.NewOIDCClientConfigService(dbConn, cipherSet)
|
|
|
|
err = register(srv, &dependencies{
|
|
oidcClientConfigSvc: oidcClientConfigService,
|
|
oidcService: oidcService,
|
|
})
|
|
if err != nil {
|
|
return fmt.Errorf("failed to register services for iam server: %w", err)
|
|
}
|
|
|
|
if listenErr := srv.ListenAndServe(); listenErr != nil {
|
|
return fmt.Errorf("failed to serve iam server: %w", listenErr)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type dependencies struct {
|
|
oidcClientConfigSvc v1.OIDCServiceServer
|
|
|
|
oidcService *oidc.Service
|
|
}
|
|
|
|
func register(srv *baseserver.Server, deps *dependencies) error {
|
|
// HTTP
|
|
rootHandler := chi.NewRouter()
|
|
|
|
rootHandler.Mount("/oidc", oidc.Router(deps.oidcService))
|
|
|
|
// All root requests are handled by our router
|
|
srv.HTTPMux().Handle("/", rootHandler)
|
|
|
|
// gRPC
|
|
v1.RegisterOIDCServiceServer(srv.GRPC(), deps.oidcClientConfigSvc)
|
|
|
|
return nil
|
|
}
|