-
Type:
Task
-
Resolution: Unresolved
-
Priority:
Unknown
-
None
-
Affects Version/s: None
-
Component/s: None
-
None
-
None
-
Go Drivers
-
None
-
None
-
None
-
None
-
None
-
None
Context
The entityOptions.AutoEncryptOpts should be updated to use unmarshaling to create a struct matching the unified spec test requirements.
Definition of done
AutoEncryptOpts should be defined unambigously:
type awsKMSProvider struct {
AccessKeyID string `bson:"accessKeyId"`
SecretAccessKey string `bson:"secretAccessKey"`
SessionToken string `bson:"sessionToken,omitempty"`
}
type KMSProviders struct {
AWS *awsKMSProvider `bson:"aws"`
// etc
}
type autoEncryptOpts struct {
KMSProviders KMSProviders `bson:"kmsProviders,omitempty"`
SchemaMap map[string]any `bson:"schemaMap,omitempty"`
KeyVaultNamespace string `bson:"keyVaultNamespace,omitempty"`
BypassAutoEncryption bool `bson:"bypassAutoEncryption,omitempty"`
EncryptedFieldsMap map[string]any `bson:"encryptedFieldsMap,omitempty"`
BypassQueryAnalysis bool `bson:"bypassQueryAnalysis,omitempty"`
}
type clientEntity struct {
AutoEncryptOpts *autoEncryptOpts `bson:"autoEncryptOpts"`
}
Then each KMS provider (e.g awsKMSPRovider) can implement bson.Unmarshaler rather than depending on bson.Raw elements patter:
elems, err := opts.Elements() if err != nil { return nil, err } for _, elem := range elems { name := elem.Key() opt := elem.Value() // ... }