controlplane

package
v0.0.79 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 10, 2024 License: Apache-2.0 Imports: 107 Imported by: 0

Documentation

Overview

Package controlplane contains the gRPC server implementation for the control plane

Index

Constants

View Source
const PaginationLimit = 10

PaginationLimit is the maximum number of items that can be returned in a single page

Variables

View Source
var (
	// ErrNoProjectInContext is returned when no project is found in the context
	ErrNoProjectInContext = errors.New("no project found in context")
)
View Source
var (

	// RequestBodyMaxBytes is the maximum number of bytes that can be read from a request body
	// We limit to 2MB for now
	RequestBodyMaxBytes int64 = 2 << 20
)

Functions

func DeleteUser

func DeleteUser(
	ctx context.Context,
	store db.Store,
	authzClient authz.Client,
	projectDeleter projects.ProjectDeleter,
	userId string,
) error

DeleteUser deletes a user and all their associated data from the minder database

func EntityContextProjectInterceptor

func EntityContextProjectInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo,
	handler grpc.UnaryHandler) (any, error)

EntityContextProjectInterceptor is a server interceptor that sets up the entity context project

func FilterOptsFromStrings

func FilterOptsFromStrings(
	values []string,
	f func(string) history.FilterOpt,
) []history.FilterOpt

FilterOptsFromStrings calls the given function `f` on each element of values. Such elements are either "complex", i.e. they represent a comma-separated list of sub-elements, or "simple", they do not contain comma characters. If element contains one or more comma characters, it is further split into sub-elements before calling `f` in them.

func GetProjectID

func GetProjectID(ctx context.Context) uuid.UUID

GetProjectID retrieves the project ID from the request context.

func GetProviderName

func GetProviderName(ctx context.Context) string

GetProviderName retrieves the provider name from the request context.

func HandleAdminEvents

func HandleAdminEvents(
	ctx context.Context,
	store db.Store,
	authzClient authz.Client,
	cfg *serverconfig.Config,
	projectDeleter projects.ProjectDeleter,
)

HandleAdminEvents deletes users where the deletion occurred through the Keycloak API.

func HandleEvents

func HandleEvents(
	ctx context.Context,
	store db.Store,
	authzClient authz.Client,
	cfg *serverconfig.Config,
	projectDeleter projects.ProjectDeleter,
)

HandleEvents fetches events from the identity provider and performs any related changes to the minder database

func ProjectAuthorizationInterceptor

func ProjectAuthorizationInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo,
	handler grpc.UnaryHandler) (any, error)

ProjectAuthorizationInterceptor is a server interceptor that checks if a user is authorized on the requested project

func RegisterGRPCServices

func RegisterGRPCServices(s *Server)

RegisterGRPCServices registers the GRPC services

func RegisterGatewayHTTPHandlers

func RegisterGatewayHTTPHandlers(ctx context.Context, gwmux *runtime.ServeMux, grpcAddress string, opts []grpc.DialOption)

RegisterGatewayHTTPHandlers registers the gateway HTTP handlers

func SubscribeToAdminEvents

func SubscribeToAdminEvents(
	ctx context.Context,
	store db.Store,
	authzClient authz.Client,
	cfg *serverconfig.Config,
	projectDeleter projects.ProjectDeleter,
) error

SubscribeToAdminEvents starts a cron job that periodicalyl fetches admin events from Keycloak. Users who are deleted through the Keycloak API show up as admin events, not normal identity events.

func SubscribeToIdentityEvents

func SubscribeToIdentityEvents(
	ctx context.Context,
	store db.Store,
	authzClient authz.Client,
	cfg *serverconfig.Config,
	projectDeleter projects.ProjectDeleter,
) error

SubscribeToIdentityEvents starts a cron job that periodically fetches events from the identity provider

func TokenValidationInterceptor

func TokenValidationInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo,
	handler grpc.UnaryHandler) (any, error)

TokenValidationInterceptor is a server interceptor that validates the bearer token

Types

type AccountEvent

type AccountEvent struct {
	Time     int64  `json:"time"`
	Type     string `json:"type"`
	RealmId  string `json:"realmId"`
	ClientId string `json:"clientId"`
	UserId   string `json:"userId"`
}

AccountEvent is an event returned by Keycloak for user events

type AdminEvent

type AdminEvent struct {
	Time          int64  `json:"time"`
	RealmId       string `json:"realmId"`
	OperationType string `json:"operationType"`
	ResourceType  string `json:"resourceType"`
	ResourcePath  string `json:"resourcePath"`
}

AdminEvent is an event returned by Keycloak for admin events -- note the completely different structure

type HasProtoContext

type HasProtoContext interface {
	GetContext() *pb.Context
}

HasProtoContext is an interface that can be implemented by a request

type HasProtoContextV2

type HasProtoContextV2 interface {
	GetContext() *pb.ContextV2
}

HasProtoContextV2 is an interface that can be implemented by a request

type HasProtoContextV2Compat

type HasProtoContextV2Compat interface {
	HasProtoContext
	GetContextV2() *pb.ContextV2
}

HasProtoContextV2Compat is an interface that can be implemented by a request. It implements the GetContext V1 and V2 methods for backwards compatibility.

type ProviderGetter

type ProviderGetter interface {
	GetProvider() string
}

ProviderGetter is an interface that can be implemented by a context, since both the context V1 and V2 have a provider field

type Server

Server represents the controlplane server

func NewServer

func NewServer(
	store db.Store,
	evt interfaces.Publisher,
	cfg *serverconfig.Config,
	serverMetrics metrics.Metrics,
	jwtValidator jwt.Validator,
	cryptoEngine crypto.Engine,
	authzClient authz.Client,
	idClient auth.Resolver,
	inviteService invites.InviteService,
	repoService reposvc.RepositoryService,
	propertyService propSvc.PropertiesService,
	roleService roles.RoleService,
	profileService profiles.ProfileService,
	historyService history.EvaluationHistoryService,
	ruleService ruletypes.RuleTypeService,
	dataSourcesService datasourcessvc.DataSourcesService,
	ghProviders service.GitHubProviderService,
	providerManager manager.ProviderManager,
	providerAuthManager manager.AuthManager,
	providerStore providers.ProviderStore,
	sessionService session.ProviderSessionService,
	projectDeleter projects.ProjectDeleter,
	projectCreator projects.ProjectCreator,
	featureFlagClient *openfeature.Client,
) *Server

NewServer creates a new server instance

func (*Server) AssignRole

AssignRole assigns a role to a user on a project. Note that this assumes that the request has already been authorized.

func (*Server) CheckHealth

func (s *Server) CheckHealth(ctx context.Context, _ *pb.CheckHealthRequest) (*pb.CheckHealthResponse, error)

CheckHealth is a simple health check for monitoring

func (*Server) CreateDataSource added in v0.0.74

CreateDataSource creates a data source

func (*Server) CreateEntityReconciliationTask

CreateEntityReconciliationTask creates a task to reconcile the state of an entity

func (*Server) CreateProfile

CreateProfile creates a profile for a project

func (*Server) CreateProject

CreateProject creates a new subproject

func (*Server) CreateProvider

CreateProvider implements the CreateProvider RPC method.

func (*Server) CreateRuleType

CreateRuleType is a method to create a rule type

func (*Server) CreateUser

func (s *Server) CreateUser(ctx context.Context,
	_ *pb.CreateUserRequest) (*pb.CreateUserResponse, error)

CreateUser is a service for user self registration

func (*Server) DeleteDataSourceById added in v0.0.75

DeleteDataSourceById deletes a data source by ID

func (*Server) DeleteDataSourceByName added in v0.0.75

DeleteDataSourceByName deletes a data source by name

func (*Server) DeleteProfile

DeleteProfile is a method to delete a profile

func (*Server) DeleteProject

DeleteProject deletes a subproject

func (*Server) DeleteProvider

DeleteProvider deletes a provider by name from a specific project.

func (*Server) DeleteProviderByID

DeleteProviderByID deletes a provider by ID from a specific project.

func (*Server) DeleteRepositoryById

func (s *Server) DeleteRepositoryById(
	ctx context.Context,
	in *pb.DeleteRepositoryByIdRequest,
) (*pb.DeleteRepositoryByIdResponse, error)

DeleteRepositoryById deletes a repository by its UUID

func (*Server) DeleteRepositoryByName

func (s *Server) DeleteRepositoryByName(
	ctx context.Context,
	in *pb.DeleteRepositoryByNameRequest,
) (*pb.DeleteRepositoryByNameResponse, error)

DeleteRepositoryByName deletes a repository by name

func (*Server) DeleteRuleType

DeleteRuleType is a method to delete a rule type

func (*Server) DeleteUser

func (s *Server) DeleteUser(ctx context.Context,
	_ *pb.DeleteUserRequest) (*pb.DeleteUserResponse, error)

DeleteUser is a service for user self deletion

func (*Server) GetArtifactById

GetArtifactById gets an artifact by id nolint:gocyclo

func (*Server) GetArtifactByName

GetArtifactByName gets an artifact by name nolint:gocyclo

func (*Server) GetAuthorizationURL

GetAuthorizationURL returns the URL to redirect the user to for authorization and the state to be used for the callback. It accepts a provider string and a boolean indicating whether the client is a CLI or web client nolint:gocyclo

func (*Server) GetDataSourceById added in v0.0.74

GetDataSourceById retrieves a data source by ID

func (*Server) GetDataSourceByName added in v0.0.75

GetDataSourceByName retrieves a data source by name

func (*Server) GetEvaluationHistory

GetEvaluationHistory returns a single evaluation history record by ID

func (*Server) GetInviteDetails

func (s *Server) GetInviteDetails(ctx context.Context, req *pb.GetInviteDetailsRequest) (*pb.GetInviteDetailsResponse, error)

GetInviteDetails returns the details of an invitation

func (*Server) GetProfileById

GetProfileById is a method to get a profile by id

func (*Server) GetProfileByName

GetProfileByName implements the RPC method for getting a profile by name

func (*Server) GetProfileStatusByName

GetProfileStatusByName is a method to get profile status nolint:gocyclo // TODO: Refactor this to be more readable

func (*Server) GetProfileStatusByProject

GetProfileStatusByProject is a method to get profile status for a project

func (*Server) GetProvider

GetProvider gets a given provider available in a specific project.

func (*Server) GetRepositoryById

GetRepositoryById returns a repository for a given repository id

func (*Server) GetRepositoryByName

GetRepositoryByName returns information about a repository. This function will typically be called by the client to get a repository which is already registered and present in the minder database The API is called with a project id

func (*Server) GetRuleTypeById

GetRuleTypeById is a method to get a rule type by id

func (*Server) GetRuleTypeByName

GetRuleTypeByName is a method to get a rule type by name

func (*Server) GetUser

func (s *Server) GetUser(ctx context.Context, _ *pb.GetUserRequest) (*pb.GetUserResponse, error)

GetUser is a service for getting personal user details

func (*Server) HandleGitHubAppCallback

func (s *Server) HandleGitHubAppCallback() runtime.HandlerFunc

HandleGitHubAppCallback handles the authorization callback from the GitHub App. This function validates the GitHub user has access to the installation. It also gathers the state from the database and compares it to the state passed in, if present. If they match a new GitHub App provider is created with the installation ID. note: this is an HTTP only (not RPC) handler

func (*Server) HandleOAuthCallback

func (s *Server) HandleOAuthCallback() runtime.HandlerFunc

HandleOAuthCallback handles the OAuth 2.0 authorization code callback from the enrolled provider. This function gathers the state from the database and compares it to the state passed in. If they match, the provider code is exchanged for a provider token. note: this is an HTTP only (not RPC) handler

func (*Server) ListArtifacts

func (s *Server) ListArtifacts(ctx context.Context, in *pb.ListArtifactsRequest) (*pb.ListArtifactsResponse, error)

ListArtifacts lists all artifacts for a given project and provider nolint:gocyclo

func (*Server) ListChildProjects

ListChildProjects returns the list of subprojects for the current project

func (*Server) ListDataSources added in v0.0.74

ListDataSources lists all data sources

func (*Server) ListEvaluationHistory

ListEvaluationHistory lists current and past evaluation results for entities.

func (*Server) ListEvaluationResults

ListEvaluationResults lists the latest evaluation results for entities filtered by entity type, labels, profiles, and rule types.

func (*Server) ListInvitations

ListInvitations is a service for listing invitations.

func (*Server) ListProfiles

ListProfiles is a method to get all profiles for a project

func (*Server) ListProjects

ListProjects returns the list of projects for the current user

func (*Server) ListProviderClasses

ListProviderClasses lists the provider classes available in the system.

func (*Server) ListProviders

ListProviders lists the providers available in a specific project.

func (*Server) ListRemoteRepositoriesFromProvider

ListRemoteRepositoriesFromProvider returns a list of repositories from a provider

func (*Server) ListRepositories

ListRepositories returns a list of repositories for a given project This function will typically be called by the client to get a list of repositories that are registered present in the minder database

func (*Server) ListRoleAssignments

ListRoleAssignments returns the list of role assignments for the given project

func (*Server) ListRoles

ListRoles returns the list of available roles for the minder instance

func (*Server) ListRuleTypes

ListRuleTypes is a method to list all rule types for a given context

func (*Server) PatchProfile

PatchProfile updates a profile for a project with a partial request

func (*Server) PatchProject

PatchProject patches a project. Note that this does not reparent nor touches the project's metadata directly. There is only a subset of fields that can be updated.

func (*Server) PatchProvider

PatchProvider patches a provider by name from a specific project.

func (*Server) ReconcileEntityRegistration

ReconcileEntityRegistration reconciles the registration of an entity.

Currently, this method only supports repositories but is intended to be generic and handle all types of entities. Todo: Utilise for other entities when such are supported.

func (*Server) RegisterRepository

func (s *Server) RegisterRepository(
	ctx context.Context,
	in *pb.RegisterRepositoryRequest,
) (*pb.RegisterRepositoryResponse, error)

RegisterRepository adds repositories to the database and registers a webhook Once a user had enrolled in a project (they have a valid token), they can register repositories to be monitored by the minder by provisioning a webhook on the repository(ies).

func (*Server) RemoveRole

RemoveRole removes a role from a user on a project Note that this assumes that the request has already been authorized.

func (*Server) ResolveInvitation

func (s *Server) ResolveInvitation(ctx context.Context, req *pb.ResolveInvitationRequest) (*pb.ResolveInvitationResponse, error)

ResolveInvitation is a service for resolving an invitation.

func (*Server) StartGRPCServer

func (s *Server) StartGRPCServer(ctx context.Context) error

StartGRPCServer starts a gRPC server and blocks while serving.

func (*Server) StartHTTPServer

func (s *Server) StartHTTPServer(ctx context.Context) error

StartHTTPServer starts a HTTP server and registers the gRPC handler mux to it set store as a blank identifier for now as we will use it in the future

func (*Server) StoreProviderToken

StoreProviderToken stores the provider token for a project

func (*Server) UpdateDataSource added in v0.0.74

UpdateDataSource updates a data source

func (*Server) UpdateProfile

UpdateProfile updates a profile for a project

func (*Server) UpdateProject

UpdateProject updates a project. Note that this does not reparent nor touches the project's metadata directly. There is only a subset of fields that can be updated.

func (*Server) UpdateRole

UpdateRole updates a role for a user on a project

func (*Server) UpdateRuleType

UpdateRuleType is a method to update a rule type

func (*Server) VerifyProviderCredential

VerifyProviderCredential verifies the provider credential has been created for the matching enrollment nonce

func (*Server) VerifyProviderTokenFrom

VerifyProviderTokenFrom verifies the provider token since a timestamp Deprecated: Use VerifyProviderCredential instead

type UpstreamRepoAndEntityRef

type UpstreamRepoAndEntityRef struct {
	Repo   *pb.UpstreamRepositoryRef
	Entity *pb.RegistrableUpstreamEntityRef
}

UpstreamRepoAndEntityRef is a pair of upstream repository and entity references

Directories

Path Synopsis
Package metrics defines the primitives available for the controlplane metrics
Package metrics defines the primitives available for the controlplane metrics

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL