# ============================================= BlobStore Implementation ==================================
# Read https://james.apache.org/server/config-blobstore.html for further details

# Choose your BlobStore implementation
# Mandatory, allowed values are: file, s3, postgres.
implementation=s3

# ========================================= Deduplication ========================================
# If you choose to enable deduplication, the mails with the same content will be stored only once.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
# the mails sharing the same content once one is deleted.
# Mandatory, Allowed values are: true, false
deduplication.enable=true

# deduplication.family needs to be incremented every time the deduplication.generation.duration is changed
# Positive integer, defaults to 1
# deduplication.gc.generation.family=1

# Duration of generation.
# Deduplication only takes place within a singe generation.
# Only items two generation old can be garbage collected. (This prevent concurrent insertions issues and
# accounts for a clock skew).
# deduplication.family needs to be incremented everytime this parameter is changed.
# Duration. Default unit: days. Defaults to 30 days.
# deduplication.gc.generation.duration=30days

# ========================================= Encryption ========================================
# If you choose to enable encryption, the blob content will be encrypted before storing them in the BlobStore.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to all content being
# encrypted. This comes at a performance impact but presents you from leaking data if, for instance the third party
# offering you a S3 service is compromised.
# Optional, Allowed values are: true, false, defaults to false
encryption.aes.enable=false

# Mandatory (if AES encryption is enabled) salt and password. Salt needs to be an hexadecimal encoded string
#encryption.aes.password=xxx
#encryption.aes.salt=73616c7479
# Optional, defaults to PBKDF2WithHmacSHA512
#encryption.aes.private.key.algorithm=PBKDF2WithHmacSHA512

# ============================================== ObjectStorage ============================================

# ========================================= ObjectStorage Buckets ==========================================
# bucket names prefix
# Optional, default no prefix
# objectstorage.bucketPrefix=prod-

# Default bucket name
# Optional, default is bucketPrefix + `default`
# objectstorage.namespace=james

# ========================================= ObjectStorage on S3 =============================================
# Mandatory if you choose s3 storage service, S3 authentication endpoint
objectstorage.s3.endPoint=http://s3.docker.test:8000/

# Mandatory if you choose s3 storage service, S3 region
#objectstorage.s3.region=eu-west-1
objectstorage.s3.region=us-east-1

# Mandatory if you choose aws-s3 storage service, access key id configured in S3
objectstorage.s3.accessKeyId=accessKey1

# Mandatory if you choose s3 storage service, secret key configured in S3
objectstorage.s3.secretKey=secretKey1

# Optional if you choose s3 storage service: The trust store file, secret, and algorithm to use
# when connecting to the storage service. If not specified falls back to Java defaults.
#objectstorage.s3.truststore.path=
#objectstorage.s3.truststore.type=JKS
#objectstorage.s3.truststore.secret=
#objectstorage.s3.truststore.algorithm=SunX509


# optional: Object read in memory will be rejected if they exceed the size limit exposed here. Size, exemple `100M`.
# Supported units: K, M, G, defaults to B if no unit is specified. If unspecified, big object won't be prevented
# from being loaded in memory. This settings complements protocol limits.
# objectstorage.s3.in.read.limit=50M

# ============================================ Blobs Exporting ==============================================
# Read https://james.apache.org/server/config-blob-export.html for further details

# Choosing blob exporting mechanism, allowed mechanism are: localFile, linshare
# LinShare is a file sharing service, will be explained in the below section
# Optional, default is localFile
blob.export.implementation=localFile

# ======================================= Local File Blobs Exporting ========================================
# Optional, directory to store exported blob, directory path follows James file system format
# default is file://var/blobExporting
blob.export.localFile.directory=file://var/blobExporting

# ======================================= LinShare File Blobs Exporting ========================================
# LinShare is a sharing service where you can use james, connects to an existing LinShare server and shares files to
# other mail addresses as long as those addresses available in LinShare. For example you can deploy James and LinShare
# sharing the same LDAP repository
# Mandatory if you choose LinShare, url to connect to LinShare service
# blob.export.linshare.url=http://linshare:8080

# ======================================= LinShare Configuration BasicAuthentication ===================================
# Authentication is mandatory if you choose LinShare, TechnicalAccount is need to connect to LinShare specific service.
# For Example: It will be formalized to 'Authorization: Basic {Credential of UUID/password}'

# blob.export.linshare.technical.account.uuid=Technical_Account_UUID
# blob.export.linshare.technical.account.password=password
