mirror of
https://github.com/mainflux/mainflux.git
synced 2025-05-02 22:17:10 +08:00
50 lines
1.6 KiB
Go
50 lines
1.6 KiB
Go
![]() |
// Copyright (C) MongoDB, Inc. 2017-present.
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||
|
// not use this file except in compliance with the License. You may obtain
|
||
|
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
||
|
|
||
|
package options
|
||
|
|
||
|
// ClientEncryptionOptions represents all possible options used to configure a ClientEncryption instance.
|
||
|
type ClientEncryptionOptions struct {
|
||
|
KeyVaultNamespace string
|
||
|
KmsProviders map[string]map[string]interface{}
|
||
|
}
|
||
|
|
||
|
// ClientEncryption creates a new ClientEncryptionOptions instance.
|
||
|
func ClientEncryption() *ClientEncryptionOptions {
|
||
|
return &ClientEncryptionOptions{}
|
||
|
}
|
||
|
|
||
|
// SetKeyVaultNamespace specifies the namespace of the key vault collection. This is required.
|
||
|
func (c *ClientEncryptionOptions) SetKeyVaultNamespace(ns string) *ClientEncryptionOptions {
|
||
|
c.KeyVaultNamespace = ns
|
||
|
return c
|
||
|
}
|
||
|
|
||
|
// SetKmsProviders specifies options for KMS providers. This is required.
|
||
|
func (c *ClientEncryptionOptions) SetKmsProviders(providers map[string]map[string]interface{}) *ClientEncryptionOptions {
|
||
|
c.KmsProviders = providers
|
||
|
return c
|
||
|
}
|
||
|
|
||
|
// MergeClientEncryptionOptions combines the argued ClientEncryptionOptions in a last-one wins fashion.
|
||
|
func MergeClientEncryptionOptions(opts ...*ClientEncryptionOptions) *ClientEncryptionOptions {
|
||
|
ceo := ClientEncryption()
|
||
|
for _, opt := range opts {
|
||
|
if opt == nil {
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
if opt.KeyVaultNamespace != "" {
|
||
|
ceo.KeyVaultNamespace = opt.KeyVaultNamespace
|
||
|
}
|
||
|
if opt.KmsProviders != nil {
|
||
|
ceo.KmsProviders = opt.KmsProviders
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return ceo
|
||
|
}
|