API Keys: Add revocation for SATs (#53896)

* add apikey is_revoked field

* add token store tests

* Apply suggestions from code review

* remove unused fields
This commit is contained in:
Jo
2022-08-18 16:54:39 +02:00
committed by GitHub
parent 8b18530cb8
commit 4a9137ac40
18 changed files with 235 additions and 105 deletions

View File

@@ -2,6 +2,8 @@ package manager
import (
"context"
"fmt"
"time"
"github.com/grafana/grafana/pkg/api/routing"
"github.com/grafana/grafana/pkg/infra/log"
@@ -13,9 +15,14 @@ import (
"github.com/grafana/grafana/pkg/setting"
)
const (
metricsCollectionInterval = time.Minute * 30
)
type ServiceAccountsService struct {
store serviceaccounts.Store
log log.Logger
store serviceaccounts.Store
log log.Logger
backgroundLog log.Logger
}
func ProvideServiceAccountsService(
@@ -28,8 +35,9 @@ func ProvideServiceAccountsService(
) (*ServiceAccountsService, error) {
database.InitMetrics()
s := &ServiceAccountsService{
store: serviceAccountsStore,
log: log.New("serviceaccounts"),
store: serviceAccountsStore,
log: log.New("serviceaccounts"),
backgroundLog: log.New("serviceaccounts.background"),
}
if err := RegisterRoles(ac); err != nil {
@@ -45,8 +53,33 @@ func ProvideServiceAccountsService(
}
func (sa *ServiceAccountsService) Run(ctx context.Context) error {
sa.log.Debug("Started Service Account Metrics collection service")
return sa.store.RunMetricsCollection(ctx)
sa.backgroundLog.Debug("service initialized")
if _, err := sa.store.GetUsageMetrics(ctx); err != nil {
sa.log.Warn("Failed to get usage metrics", "error", err.Error())
}
updateStatsTicker := time.NewTicker(metricsCollectionInterval)
defer updateStatsTicker.Stop()
for {
select {
case <-ctx.Done():
if err := ctx.Err(); err != nil {
return fmt.Errorf("context error in service account background service: %w", ctx.Err())
}
sa.backgroundLog.Debug("stopped service account background service")
return nil
case <-updateStatsTicker.C:
sa.backgroundLog.Debug("updating usage metrics")
if _, err := sa.store.GetUsageMetrics(ctx); err != nil {
sa.backgroundLog.Warn("Failed to get usage metrics", "error", err.Error())
}
}
}
}
func (sa *ServiceAccountsService) CreateServiceAccount(ctx context.Context, orgID int64, saForm *serviceaccounts.CreateServiceAccountForm) (*serviceaccounts.ServiceAccountDTO, error) {