package manager import ( "context" "github.com/grafana/grafana/pkg/api/routing" "github.com/grafana/grafana/pkg/infra/kvstore" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/infra/usagestats" "github.com/grafana/grafana/pkg/services/accesscontrol" "github.com/grafana/grafana/pkg/services/serviceaccounts" "github.com/grafana/grafana/pkg/services/serviceaccounts/api" "github.com/grafana/grafana/pkg/services/serviceaccounts/database" "github.com/grafana/grafana/pkg/services/sqlstore" "github.com/grafana/grafana/pkg/setting" ) var ( ServiceAccountFeatureToggleNotFound = "FeatureToggle serviceAccounts not found, try adding it to your custom.ini" ) type ServiceAccountsService struct { store serviceaccounts.Store log log.Logger } func ProvideServiceAccountsService( cfg *setting.Cfg, store *sqlstore.SQLStore, kvStore kvstore.KVStore, ac accesscontrol.AccessControl, routeRegister routing.RouteRegister, usageStats usagestats.Service, ) (*ServiceAccountsService, error) { database.InitMetrics() s := &ServiceAccountsService{ store: database.NewServiceAccountsStore(store, kvStore), log: log.New("serviceaccounts"), } if err := RegisterRoles(ac); err != nil { s.log.Error("Failed to register roles", "error", err) } usageStats.RegisterMetricsFunc(s.store.GetUsageMetrics) serviceaccountsAPI := api.NewServiceAccountsAPI(cfg, s, ac, routeRegister, s.store) serviceaccountsAPI.RegisterAPIEndpoints() return s, nil } func (sa *ServiceAccountsService) Run(ctx context.Context) error { sa.log.Debug("Started Service Account Metrics collection service") return sa.store.RunMetricsCollection(ctx) } func (sa *ServiceAccountsService) CreateServiceAccount(ctx context.Context, orgID int64, name string) (*serviceaccounts.ServiceAccountDTO, error) { return sa.store.CreateServiceAccount(ctx, orgID, name) } func (sa *ServiceAccountsService) DeleteServiceAccount(ctx context.Context, orgID, serviceAccountID int64) error { return sa.store.DeleteServiceAccount(ctx, orgID, serviceAccountID) } func (sa *ServiceAccountsService) RetrieveServiceAccountIdByName(ctx context.Context, orgID int64, name string) (int64, error) { return sa.store.RetrieveServiceAccountIdByName(ctx, orgID, name) }