Files
warmbly/internal/app/cipher/cipher.go
T
Matthew Meszaros 7fe8e663d5 fix: propagate parent context instead of context.TODO in cipher service
The ctx parameter was already available from the Cipher method but
wasn't being passed to the DynamoDB Put call for new DEK storage.
2026-04-09 12:06:54 +00:00

54 lines
1.0 KiB
Go

package cipher
import (
"context"
"github.com/getsentry/sentry-go"
"github.com/google/uuid"
"github.com/warmbly/warmbly/internal/repository"
)
type Cipher struct {
plainDEK []byte
}
func (s *cipherService) Cipher(ctx context.Context, userID uuid.UUID) (*Cipher, error) {
key, err := s.getDecryptedKey(ctx, userID)
if err != nil {
return nil, err
}
encDEKB64, err := s.userEncryptedKeysRepository.Get(ctx, userID)
if err != nil {
return nil, err
}
if encDEKB64 == "" {
var encryptedDEK string
key, encryptedDEK, err = s.kms.GenerateDataKey(ctx)
if err != nil {
return nil, err
}
if err := s.userEncryptedKeysRepository.Put(ctx, repository.UserEncryptedKeysItem{
UserID: userID.String(),
EncryptedDataKey: encryptedDEK,
}); err != nil {
return nil, err
}
} else {
key, err = s.kms.GetDecryptedKey(ctx, encDEKB64)
if err != nil {
return nil, err
}
}
if err := s.saveDecryptedKey(ctx, userID, key); err != nil {
sentry.CaptureException(err)
}
return &Cipher{
plainDEK: key,
}, nil
}