CloudMigrations: Add instance metadata to auth token (#85381)

* update how tokens are passed around

* rename structs
pull/85357/head^2
Michael Mandrus 1 year ago committed by GitHub
parent 0f1151964c
commit 5a5f76ae0a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 39
      pkg/services/cloudmigration/cloudmigrationimpl/cloudmigration.go
  2. 1
      pkg/services/cloudmigration/cloudmigrationimpl/store.go
  3. 4
      pkg/services/cloudmigration/cloudmigrationimpl/xorm_store.go
  4. 12
      pkg/services/cloudmigration/model.go

@ -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
}

Loading…
Cancel
Save