From 6f1be4189bfbfc1f12da359ab631d7f551e12061 Mon Sep 17 00:00:00 2001 From: Abdhesh Nayak Date: Thu, 14 Mar 2024 17:52:21 +0530 Subject: [PATCH 1/2] :recycle: Updated registry cred generation for grpc of cr --- .../container-registry/internal/app/grpc-server.go | 14 ++------------ apps/container-registry/internal/domain/api.go | 1 + .../internal/domain/credential.go | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/apps/container-registry/internal/app/grpc-server.go b/apps/container-registry/internal/app/grpc-server.go index f6edabc1e..f6521f4d2 100644 --- a/apps/container-registry/internal/app/grpc-server.go +++ b/apps/container-registry/internal/app/grpc-server.go @@ -32,26 +32,16 @@ func (g *grpcServer) CreateReadOnlyCredential(ctx context.Context, in *container UserEmail: "", } - creds, err := g.d.CreateCredential(regctx, entities.Credential{ + creds, err := g.d.CreateAdminCredential(regctx, entities.Credential{ AccountName: in.AccountName, Access: entities.RepoAccessReadOnly, Expiration: entities.Expiration{Unit: entities.ExpirationUnitYear, Value: 17}, - Name: in.CredentialName, - UserName: in.RegistryUsername, }) - if err != nil { - return nil, err - } - - token, err := g.d.GetToken(regctx, in.RegistryUsername) - if err != nil { - return nil, err - } dockerConfigJson, err := json.Marshal(map[string]any{ "auths": map[string]any{ g.ev.RegistryHost: map[string]any{ - "auth": base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", creds.UserName, token))), + "auth": base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("%s:%s", creds.UserName, creds.TokenKey))), }, }, }) diff --git a/apps/container-registry/internal/domain/api.go b/apps/container-registry/internal/domain/api.go index 78c33a9b8..a8b7ca6a0 100644 --- a/apps/container-registry/internal/domain/api.go +++ b/apps/container-registry/internal/domain/api.go @@ -40,6 +40,7 @@ type Domain interface { ListCredentials(ctx RegistryContext, search map[string]repos.MatchFilter, pagination repos.CursorPagination) (*repos.PaginatedRecord[*entities.Credential], error) CreateCredential(ctx RegistryContext, credential entities.Credential) (*entities.Credential, error) DeleteCredential(ctx RegistryContext, userName string) error + CreateAdminCredential(ctx RegistryContext, credential entities.Credential) (*entities.Credential, error) GetToken(ctx RegistryContext, username string) (string, error) GetTokenKey(ctx context.Context, username string, accountname string) (string, error) diff --git a/apps/container-registry/internal/domain/credential.go b/apps/container-registry/internal/domain/credential.go index 6635c7516..d3eba52b5 100644 --- a/apps/container-registry/internal/domain/credential.go +++ b/apps/container-registry/internal/domain/credential.go @@ -229,3 +229,17 @@ func (d *Impl) DeleteCredential(ctx RegistryContext, userName string) error { return d.cacheClient.Drop(ctx, userName+"::"+ctx.AccountName) } + +func (d *Impl) CreateAdminCredential(ctx RegistryContext, credential entities.Credential) (*entities.Credential, error) { + i, err := admin.GetExpirationTime(fmt.Sprintf("%d%s", credential.Expiration.Value, credential.Expiration.Unit)) + if err != nil { + return nil, errors.NewE(err) + } + token, err := admin.GenerateToken(KL_ADMIN, credential.AccountName, string(credential.Access), i, d.envs.RegistrySecretKey+credential.AccountName) + + return &entities.Credential{ + UserName: KL_ADMIN, + TokenKey: token, + }, nil + +} From a5cce2336208b0c3c112ed26711f06b6d8f17b08 Mon Sep 17 00:00:00 2001 From: Abdhesh Nayak Date: Thu, 14 Mar 2024 18:00:14 +0530 Subject: [PATCH 2/2] :art: Added recordversion to websocker logs message --- apps/websocket-server/internal/domain/logs.go | 2 +- apps/websocket-server/internal/domain/logs/main.go | 11 ++++++----- apps/websocket-server/internal/domain/types/main.go | 1 + apps/websocket-server/internal/domain/utils/main.go | 11 +++++++++++ 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/apps/websocket-server/internal/domain/logs.go b/apps/websocket-server/internal/domain/logs.go index 3c5fe0fbc..fc22ed859 100644 --- a/apps/websocket-server/internal/domain/logs.go +++ b/apps/websocket-server/internal/domain/logs.go @@ -167,7 +167,7 @@ func (d *domain) handleLogsMsg(ctx types.Context, logsSubs *logs.LogsSubsMap, ms utils.WriteInfo(ctx, "[logs] subscription cancelled for ", msg.Id, types.ForLogs) } else { ctx.Mutex.Unlock() - utils.WriteError(ctx, fmt.Errorf("[logs] no subscription found for account: %s, cluster: %s, trackingId: %s", + utils.WriteWarn(ctx, fmt.Errorf("[logs] no subscription found for account: %s, cluster: %s, trackingId: %s", msg.Spec.Account, msg.Spec.Cluster, msg.Spec.TrackingId), msg.Id, types.ForLogs) } diff --git a/apps/websocket-server/internal/domain/logs/main.go b/apps/websocket-server/internal/domain/logs/main.go index 9cd6d91ed..af5c6e4ae 100644 --- a/apps/websocket-server/internal/domain/logs/main.go +++ b/apps/websocket-server/internal/domain/logs/main.go @@ -19,10 +19,11 @@ const ( ) type MsgData struct { - Account string `json:"account"` - Cluster string `json:"cluster"` - TrackingId string `json:"trackingId"` - Since *string `json:"since,omitempty"` + Account string `json:"account"` + Cluster string `json:"cluster"` + TrackingId string `json:"trackingId"` + Since *string `json:"since,omitempty"` + RecordVersion int `json:"recordVersion"` } type Message struct { @@ -100,5 +101,5 @@ func ParseSince(since *string) (*time.Time, error) { } func LogSubsId(md MsgData, logStreamName string) string { - return fmt.Sprintf("%s.%s.%s.%s.>", logStreamName, md.Account, md.Cluster, md.TrackingId) + return fmt.Sprintf("%s.%s.%s.%s.%d.>", logStreamName, md.Account, md.Cluster, md.TrackingId, md.RecordVersion) } diff --git a/apps/websocket-server/internal/domain/types/main.go b/apps/websocket-server/internal/domain/types/main.go index c569e0c76..c267bff3e 100644 --- a/apps/websocket-server/internal/domain/types/main.go +++ b/apps/websocket-server/internal/domain/types/main.go @@ -21,6 +21,7 @@ const ( MessageTypeError MessageType = "error" MessageTypeResponse MessageType = "response" MessageTypeInfo MessageType = "info" + MessageTypeWarning MessageType = "warning" ) type Response[T any] struct { diff --git a/apps/websocket-server/internal/domain/utils/main.go b/apps/websocket-server/internal/domain/utils/main.go index 286b73c0d..3a04d899f 100644 --- a/apps/websocket-server/internal/domain/utils/main.go +++ b/apps/websocket-server/internal/domain/utils/main.go @@ -15,6 +15,17 @@ func WriteError(ctx types.Context, err error, id string, For types.For) { } } +func WriteWarn(ctx types.Context, err error, id string, For types.For) { + if err := ctx.WriteJSON(types.Response[any]{ + Type: types.MessageTypeWarning, + Message: err.Error(), + For: For, + Id: id, + }); err != nil { + ctx.Logger.Warnf("websocket write: %w", err) + } +} + func WriteInfo(ctx types.Context, msg string, id string, For types.For) { if err := ctx.WriteJSON(types.Response[any]{ Type: types.MessageTypeInfo,