Files
notifications-api/app/cloudfoundry_config.py

111 lines
3.2 KiB
Python
Raw Normal View History

2016-12-08 12:12:45 +00:00
import json
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):
2023-08-29 14:54:30 -07:00
self.parsed_services = json.loads(getenv("VCAP_SERVICES") or "{}")
buckets = self.parsed_services.get("s3") or []
self.s3_buckets = {bucket["name"]: bucket["credentials"] for bucket in buckets}
2022-10-31 15:37:12 -04:00
self._empty_bucket_credentials = {
2023-08-29 14:54:30 -07:00
"bucket": "",
"access_key_id": "",
"secret_access_key": "",
"region": "",
2022-10-31 15:37:12 -04:00
}
@property
def database_url(self):
2023-08-29 14:54:30 -07:00
return getenv("DATABASE_URL", "").replace("postgres://", "postgresql://")
2022-10-31 15:37:12 -04:00
@property
def redis_url(self):
try:
2023-08-29 14:54:30 -07:00
return self.parsed_services["aws-elasticache-redis"][0]["credentials"][
"uri"
].replace("redis://", "rediss://")
2022-10-31 15:37:12 -04:00
except KeyError:
2023-08-29 14:54:30 -07: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:
2023-08-29 14:54:30 -07:00
domain_arn = self._ses_credentials("domain_arn")
2023-01-31 17:27:17 -05:00
except KeyError:
2023-08-29 14:54:30 -07:00
domain_arn = getenv("SES_DOMAIN_ARN", "dev.notify.gov")
return domain_arn.split("/")[-1]
2023-01-31 17:27:17 -05:00
2023-05-05 08:09:15 -07:00
# TODO remove this after notifications-api #258
@property
def ses_domain_arn(self):
try:
2023-08-29 14:54:30 -07:00
domain_arn = self._ses_credentials("domain_arn")
2023-05-05 08:09:15 -07:00
except KeyError:
2023-08-29 14:54:30 -07:00
domain_arn = getenv("SES_DOMAIN_ARN", "dev.notify.gov")
2023-05-05 08:09:15 -07:00
return domain_arn
2023-01-31 17:27:17 -05:00
@property
def ses_region(self):
try:
2023-08-29 14:54:30 -07:00
return self._ses_credentials("region")
2023-01-31 17:27:17 -05:00
except KeyError:
2023-08-29 14:54:30 -07:00
return getenv("SES_AWS_REGION", "us-west-1")
2023-01-31 17:27:17 -05:00
@property
def ses_access_key(self):
try:
2023-08-29 14:54:30 -07:00
return self._ses_credentials("smtp_user")
2023-01-31 17:27:17 -05:00
except KeyError:
2023-08-29 14:54:30 -07:00
return getenv("SES_AWS_ACCESS_KEY_ID")
2023-01-31 17:27:17 -05:00
@property
def ses_secret_key(self):
try:
2023-08-29 14:54:30 -07:00
return self._ses_credentials("secret_access_key")
2023-01-31 17:27:17 -05:00
except KeyError:
2023-08-29 14:54:30 -07:00
return getenv("SES_AWS_SECRET_ACCESS_KEY")
2023-01-31 17:27:17 -05:00
2023-02-28 16:50:00 -05:00
@property
def sns_access_key(self):
try:
2023-08-29 14:54:30 -07:00
return self._sns_credentials("aws_access_key_id")
2023-02-28 16:50:00 -05:00
except KeyError:
2023-08-29 14:54:30 -07:00
return getenv("SNS_AWS_ACCESS_KEY_ID")
2023-02-28 16:50:00 -05:00
@property
def sns_secret_key(self):
try:
2023-08-29 14:54:30 -07:00
return self._sns_credentials("aws_secret_access_key")
2023-02-28 16:50:00 -05:00
except KeyError:
2023-08-29 14:54:30 -07:00
return getenv("SNS_AWS_SECRET_ACCESS_KEY")
2023-02-28 16:50:00 -05:00
@property
def sns_region(self):
try:
2023-08-29 14:54:30 -07:00
return self._sns_credentials("region")
2023-02-28 16:50:00 -05:00
except KeyError:
2023-08-29 14:54:30 -07:00
return getenv("SNS_AWS_REGION", "us-west-1")
2023-02-28 16:50:00 -05:00
2023-01-31 17:27:17 -05:00
@property
def sns_topic_arns(self):
try:
return [
2023-08-29 14:54:30 -07:00
self._ses_credentials("bounce_topic_arn"),
self._ses_credentials("complaint_topic_arn"),
self._ses_credentials("delivery_topic_arn"),
2023-01-31 17:27:17 -05:00
]
except KeyError:
return []
def _ses_credentials(self, key):
2023-08-29 14:54:30 -07:00
return self.parsed_services["datagov-smtp"][0]["credentials"][key]
2023-01-31 17:27:17 -05:00
2023-02-28 16:50:00 -05:00
def _sns_credentials(self, key):
2023-08-29 14:54:30 -07:00
return self.parsed_services["ttsnotify-sms"][0]["credentials"][key]
2023-02-28 16:50:00 -05:00
2022-10-31 15:37:12 -04:00
cloud_config = CloudfoundryConfig()