2016-12-08 12:12:45 +00:00
|
|
|
import json
|
2022-11-01 11:42:14 -04:00
|
|
|
from os import getenv
|
2016-12-08 12:12:45 +00:00
|
|
|
|
|
|
|
|
|
2022-10-31 15:37:12 -04:00
|
|
|
class CloudfoundryConfig:
|
|
|
|
|
def __init__(self):
|
2022-11-01 11:42:14 -04:00
|
|
|
self.parsed_services = json.loads(getenv('VCAP_SERVICES') or '{}')
|
2022-10-31 15:37:12 -04:00
|
|
|
buckets = self.parsed_services.get('s3') or []
|
|
|
|
|
self.s3_buckets = {bucket['name']: bucket['credentials'] for bucket in buckets}
|
|
|
|
|
self._empty_bucket_credentials = {
|
|
|
|
|
'bucket': '',
|
|
|
|
|
'access_key_id': '',
|
|
|
|
|
'secret_access_key': '',
|
|
|
|
|
'region': ''
|
|
|
|
|
}
|
2022-09-16 16:26:02 -04:00
|
|
|
|
2022-11-01 11:34:00 -04:00
|
|
|
@property
|
|
|
|
|
def database_url(self):
|
2022-11-01 11:42:14 -04:00
|
|
|
return getenv('DATABASE_URL', '').replace('postgres://', 'postgresql://')
|
2022-11-01 11:34:00 -04:00
|
|
|
|
2022-10-31 15:37:12 -04:00
|
|
|
@property
|
|
|
|
|
def redis_url(self):
|
|
|
|
|
try:
|
|
|
|
|
return self.parsed_services['aws-elasticache-redis'][0]['credentials']['uri'].replace(
|
|
|
|
|
'redis://',
|
|
|
|
|
'rediss://'
|
|
|
|
|
)
|
|
|
|
|
except KeyError:
|
2022-11-01 11:42:14 -04:00
|
|
|
return getenv('REDIS_URL')
|
2022-10-05 01:12:35 +00:00
|
|
|
|
2022-10-31 15:37:12 -04:00
|
|
|
def s3_credentials(self, service_name):
|
|
|
|
|
return self.s3_buckets.get(service_name) or self._empty_bucket_credentials
|
2016-12-08 12:12:45 +00:00
|
|
|
|
2023-01-31 17:27:17 -05:00
|
|
|
@property
|
|
|
|
|
def ses_email_domain(self):
|
|
|
|
|
try:
|
|
|
|
|
return self._ses_credentials('domain_arn').split('/')[-1]
|
|
|
|
|
except KeyError:
|
|
|
|
|
return getenv('NOTIFY_EMAIL_DOMAIN', 'notify.sandbox.10x.gsa.gov')
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def ses_region(self):
|
|
|
|
|
try:
|
|
|
|
|
return self._ses_credentials('region')
|
|
|
|
|
except KeyError:
|
|
|
|
|
return getenv('AWS_REGION')
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def ses_access_key(self):
|
|
|
|
|
try:
|
|
|
|
|
return self._ses_credentials('smtp_user')
|
|
|
|
|
except KeyError:
|
|
|
|
|
return getenv('AWS_ACCESS_KEY_ID')
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def ses_secret_key(self):
|
|
|
|
|
try:
|
|
|
|
|
return self._ses_credentials('secret_access_key')
|
|
|
|
|
except KeyError:
|
|
|
|
|
return getenv('AWS_SECRET_ACCESS_KEY')
|
|
|
|
|
|
2023-02-28 16:50:00 -05:00
|
|
|
@property
|
|
|
|
|
def sns_access_key(self):
|
|
|
|
|
try:
|
|
|
|
|
return self._sns_credentials('aws_access_key_id')
|
|
|
|
|
except KeyError:
|
|
|
|
|
return getenv('AWS_ACCESS_KEY_ID')
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def sns_secret_key(self):
|
|
|
|
|
try:
|
|
|
|
|
return self._sns_credentials('aws_secret_access_key')
|
|
|
|
|
except KeyError:
|
|
|
|
|
return getenv('AWS_SECRET_ACCESS_KEY')
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def sns_region(self):
|
|
|
|
|
try:
|
|
|
|
|
return self._sns_credentials('region')
|
|
|
|
|
except KeyError:
|
|
|
|
|
return getenv('AWS_REGION')
|
|
|
|
|
|
2023-01-31 17:27:17 -05:00
|
|
|
@property
|
|
|
|
|
def sns_topic_arns(self):
|
|
|
|
|
try:
|
|
|
|
|
return [
|
|
|
|
|
self._ses_credentials('bounce_topic_arn'),
|
|
|
|
|
self._ses_credentials('complaint_topic_arn'),
|
|
|
|
|
self._ses_credentials('delivery_topic_arn')
|
|
|
|
|
]
|
|
|
|
|
except KeyError:
|
|
|
|
|
return []
|
|
|
|
|
|
|
|
|
|
def _ses_credentials(self, key):
|
|
|
|
|
return self.parsed_services['datagov-smtp'][0]['credentials'][key]
|
|
|
|
|
|
2023-02-28 16:50:00 -05:00
|
|
|
def _sns_credentials(self, key):
|
|
|
|
|
return self.parsed_services['ttsnotify-sms'][0]['credentials'][key]
|
|
|
|
|
|
2022-09-16 16:26:02 -04:00
|
|
|
|
2022-10-31 15:37:12 -04:00
|
|
|
cloud_config = CloudfoundryConfig()
|