mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
CloudMigrations: Add instance metadata to auth token (#85381)
* update how tokens are passed around * rename structs
This commit is contained in:
@@ -148,9 +148,14 @@ func (s *Service) CreateToken(ctx context.Context) (cloudmigration.CreateAccessT
|
||||
logger.Info("created access token", "id", token.ID, "name", token.Name)
|
||||
s.metrics.accessTokenCreated.With(prometheus.Labels{"slug": s.cfg.Slug}).Inc()
|
||||
|
||||
bytes, err := json.Marshal(map[string]string{
|
||||
"token": token.Token,
|
||||
"region": instance.ClusterSlug,
|
||||
bytes, err := json.Marshal(cloudmigration.Base64EncodedTokenPayload{
|
||||
Token: token.Token,
|
||||
Instance: cloudmigration.Base64HGInstance{
|
||||
StackID: instance.ID,
|
||||
RegionSlug: instance.RegionSlug,
|
||||
ClusterSlug: instance.ClusterSlug, // This should be used for routing to CMS
|
||||
Slug: instance.Slug,
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return cloudmigration.CreateAccessTokenResponse{}, fmt.Errorf("encoding token: %w", err)
|
||||
@@ -217,9 +222,31 @@ func (s *Service) GetMigrationList(ctx context.Context) (*cloudmigration.CloudMi
|
||||
return &cloudmigration.CloudMigrationListResponse{Migrations: migrations}, nil
|
||||
}
|
||||
|
||||
func (s *Service) CreateMigration(ctx context.Context, cm cloudmigration.CloudMigrationRequest) (*cloudmigration.CloudMigrationResponse, error) {
|
||||
// TODO: Implement method
|
||||
return nil, nil
|
||||
func (s *Service) CreateMigration(ctx context.Context, cmd cloudmigration.CloudMigrationRequest) (*cloudmigration.CloudMigrationResponse, error) {
|
||||
ctx, span := s.tracer.Start(ctx, "CloudMigrationService.createMigration")
|
||||
defer span.End()
|
||||
|
||||
base64Token := cmd.AuthToken
|
||||
b, err := base64.StdEncoding.DecodeString(base64Token)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("token could not be decoded")
|
||||
}
|
||||
var token cloudmigration.Base64EncodedTokenPayload
|
||||
if err := json.Unmarshal(b, &token); err != nil {
|
||||
return nil, fmt.Errorf("invalid token") // don't want to leak info here
|
||||
}
|
||||
|
||||
if err := s.store.CreateMigration(ctx, token); err != nil {
|
||||
return nil, fmt.Errorf("error creating migration: %w", err)
|
||||
}
|
||||
|
||||
return &cloudmigration.CloudMigrationResponse{
|
||||
ID: int64(token.Instance.StackID),
|
||||
Stack: token.Instance.Slug,
|
||||
// TODO replace this with the actual value once the storage piece is implemented
|
||||
Created: time.Now(),
|
||||
Updated: time.Now(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Service) UpdateMigration(ctx context.Context, id int64, cm cloudmigration.CloudMigrationRequest) (*cloudmigration.CloudMigrationResponse, error) {
|
||||
|
||||
@@ -8,5 +8,6 @@ import (
|
||||
|
||||
type store interface {
|
||||
MigrateDatasources(context.Context, *cloudmigration.MigrateDatasourcesRequest) (*cloudmigration.MigrateDatasourcesResponse, error)
|
||||
CreateMigration(ctx context.Context, token cloudmigration.Base64EncodedTokenPayload) error
|
||||
GetAllCloudMigrations(ctx context.Context) ([]*cloudmigration.CloudMigration, error)
|
||||
}
|
||||
|
||||
@@ -15,6 +15,10 @@ func (ss *sqlStore) MigrateDatasources(ctx context.Context, request *cloudmigrat
|
||||
return nil, cloudmigration.ErrInternalNotImplementedError
|
||||
}
|
||||
|
||||
func (ss *sqlStore) CreateMigration(ctx context.Context, token cloudmigration.Base64EncodedTokenPayload) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ss *sqlStore) GetAllCloudMigrations(ctx context.Context) ([]*cloudmigration.CloudMigration, error) {
|
||||
var migrations = make([]*cloudmigration.CloudMigration, 0)
|
||||
err := ss.db.WithDbSession(ctx, func(sess *db.Session) error { return sess.Find(&migrations) })
|
||||
|
||||
@@ -87,3 +87,15 @@ type CreateAccessTokenResponse struct {
|
||||
type CreateAccessTokenResponseDTO struct {
|
||||
Token string `json:"token"`
|
||||
}
|
||||
|
||||
type Base64EncodedTokenPayload struct {
|
||||
Token string
|
||||
Instance Base64HGInstance
|
||||
}
|
||||
|
||||
type Base64HGInstance struct {
|
||||
StackID int
|
||||
Slug string
|
||||
RegionSlug string
|
||||
ClusterSlug string
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user