Skip to content

Commit

Permalink
Merge pull request #9 from Trihydro/feature/optional-tls-and-auth-for…
Browse files Browse the repository at this point in the history
…-contact-support-menu

Optional TLS/Authentication for Contact Support Menu
  • Loading branch information
payneBrandon authored Jul 29, 2024
2 parents 5bc412e + 362fd9e commit e67b850
Show file tree
Hide file tree
Showing 8 changed files with 220 additions and 66 deletions.
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,12 +190,14 @@ For the "Debug Solution" to run properly on Windows 10/11 using WSL, the followi
- SRM_DB_NAME: The database name for SRM visualization data.
- FIRMWARE_MANAGER_ENDPOINT: Endpoint for the firmware manager deployment's API.
- CSM_EMAIL_TO_SEND_FROM: Origin email address for the API.
- CSM_EMAIL_APP_USERNAME: Username for the SMTP server.
- CSM_EMAIL_APP_PASSWORD: Password for the SMTP server.
- CSM_EMAILS_TO_SEND_TO: Destination email list.
- CSM_TARGET_SMTP_SERVER_ADDRESS: Destination SMTP server address.
- CSM_TARGET_SMTP_SERVER_PORT: Destination SMTP server port.
- API_LOGGING_LEVEL: The level of which the CV Manager API will log. (DEBUG, INFO, WARNING, ERROR)
- CSM_TLS_ENABLED: Set to "true" if the SMTP server requires TLS.
- CSM_AUTH_ENABLED: Set to "true" if the SMTP server requires authentication.
- CSM_EMAIL_APP_USERNAME: Username for the SMTP server.
- CSM_EMAIL_APP_PASSWORD: Password for the SMTP server.
- WZDX_ENDPOINT: WZDX datafeed endpoint.
- WZDX_API_KEY: API key for the WZDX datafeed.
- TIMEZONE: Timezone to be used for the API.
Expand Down
6 changes: 4 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,13 @@ services:
KEYCLOAK_API_CLIENT_SECRET_KEY: ${KEYCLOAK_API_CLIENT_SECRET_KEY}

CSM_EMAIL_TO_SEND_FROM: ${CSM_EMAIL_TO_SEND_FROM}
CSM_EMAIL_APP_USERNAME: ${CSM_EMAIL_APP_USERNAME}
CSM_EMAIL_APP_PASSWORD: ${CSM_EMAIL_APP_PASSWORD}
CSM_EMAILS_TO_SEND_TO: ${CSM_EMAILS_TO_SEND_TO}
CSM_TARGET_SMTP_SERVER_ADDRESS: ${CSM_TARGET_SMTP_SERVER_ADDRESS}
CSM_TARGET_SMTP_SERVER_PORT: ${CSM_TARGET_SMTP_SERVER_PORT}
CSM_TLS_ENABLED: ${CSM_TLS_ENABLED}
CSM_AUTH_ENABLED: ${CSM_AUTH_ENABLED}
CSM_EMAIL_APP_USERNAME: ${CSM_EMAIL_APP_USERNAME}
CSM_EMAIL_APP_PASSWORD: ${CSM_EMAIL_APP_PASSWORD}

TIMEZONE: ${TIMEZONE}
LOGGING_LEVEL: ${API_LOGGING_LEVEL}
Expand Down
6 changes: 4 additions & 2 deletions sample.env
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,13 @@ WZDX_ENDPOINT=

# Contact Support Menu Email Configuration
CSM_EMAIL_TO_SEND_FROM=
CSM_EMAIL_APP_USERNAME=
CSM_EMAIL_APP_PASSWORD=
CSM_EMAILS_TO_SEND_TO=
CSM_TARGET_SMTP_SERVER_ADDRESS=
CSM_TARGET_SMTP_SERVER_PORT=
CSM_TLS_ENABLED=true
CSM_AUTH_ENABLED=true
CSM_EMAIL_APP_USERNAME=
CSM_EMAIL_APP_PASSWORD=

# Email configuration for sending firmware-manager failure emails
SMTP_EMAIL=
Expand Down
6 changes: 4 additions & 2 deletions services/api/sample.env
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,13 @@ WZDX_ENDPOINT = <wzdx-endpoint>

# Contact Support Menu Email Configuration
CSM_EMAIL_TO_SEND_FROM=
CSM_EMAIL_APP_USERNAME=
CSM_EMAIL_APP_PASSWORD=
CSM_EMAILS_TO_SEND_TO=
CSM_TARGET_SMTP_SERVER_ADDRESS=
CSM_TARGET_SMTP_SERVER_PORT=
CSM_TLS_ENABLED=true
CSM_AUTH_ENABLED=true
CSM_EMAIL_APP_USERNAME=
CSM_EMAIL_APP_PASSWORD=

# Error Email Contact Configuration
LOGS_LINK= #URL to logs for api, included in error email. Example: https://console.cloud.google.com/run/detail/us-central1/rsu-manager-cloud-run-api/logs?authuser=1&project=cdot-oim-cv-dev
Expand Down
23 changes: 15 additions & 8 deletions services/api/src/contact_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,25 +31,21 @@ class ContactSupportResource(Resource):

def __init__(self):
self.CSM_EMAIL_TO_SEND_FROM = os.environ.get("CSM_EMAIL_TO_SEND_FROM")
self.CSM_EMAIL_APP_USERNAME = os.environ.get("CSM_EMAIL_APP_USERNAME")
self.CSM_EMAIL_APP_PASSWORD = os.environ.get("CSM_EMAIL_APP_PASSWORD")
self.CSM_EMAILS_TO_SEND_TO = os.environ.get("CSM_EMAILS_TO_SEND_TO")
self.CSM_TARGET_SMTP_SERVER_ADDRESS = os.environ.get(
"CSM_TARGET_SMTP_SERVER_ADDRESS"
)
self.CSM_TARGET_SMTP_SERVER_PORT = int(
os.environ.get("CSM_TARGET_SMTP_SERVER_PORT")
)
self.CSM_TLS_ENABLED = os.environ.get("CSM_TLS_ENABLED")
self.CSM_AUTH_ENABLED = os.environ.get("CSM_AUTH_ENABLED")
self.CSM_EMAIL_APP_USERNAME = os.environ.get("CSM_EMAIL_APP_USERNAME")
self.CSM_EMAIL_APP_PASSWORD = os.environ.get("CSM_EMAIL_APP_PASSWORD")

if not self.CSM_EMAIL_TO_SEND_FROM:
logging.error("CSM_EMAIL_TO_SEND_FROM environment variable not set")
abort(500)
if not self.CSM_EMAIL_APP_USERNAME:
logging.error("CSM_EMAIL_APP_USERNAME environment variable not set")
abort(500)
if not self.CSM_EMAIL_APP_PASSWORD:
logging.error("CSM_EMAIL_APP_PASSWORD environment variable not set")
abort(500)
if not self.CSM_EMAILS_TO_SEND_TO:
logging.error("CSM_EMAILS_TO_SEND_TO environment variable not set")
abort(500)
Expand All @@ -59,6 +55,14 @@ def __init__(self):
if not self.CSM_TARGET_SMTP_SERVER_PORT:
logging.error("CSM_TARGET_SMTP_SERVER_PORT environment variable not set")
abort(500)

if self.CSM_AUTH_ENABLED == "true":
if not self.CSM_EMAIL_APP_USERNAME:
logging.error("CSM_EMAIL_APP_USERNAME environment variable not set")
abort(500)
if not self.CSM_EMAIL_APP_PASSWORD:
logging.error("CSM_EMAIL_APP_PASSWORD environment variable not set")
abort(500)

def options(self):
# CORS support
Expand Down Expand Up @@ -92,6 +96,9 @@ def post(self):
replyEmail,
self.CSM_EMAIL_APP_USERNAME,
self.CSM_EMAIL_APP_PASSWORD,
False,
self.CSM_TLS_ENABLED,
self.CSM_AUTH_ENABLED,
)
except Exception as e:
logging.error(f"Exception encountered: {e}")
Expand Down
93 changes: 62 additions & 31 deletions services/api/tests/src/test_contact_support.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,15 @@ def test_contact_support_schema_invalid():
def test_contact_support_resource_initialization_success():
# prepare
os.environ["CSM_EMAIL_TO_SEND_FROM"] = contact_support_data.CSM_EMAIL_TO_SEND_FROM
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ["CSM_EMAIL_APP_PASSWORD"] = contact_support_data.CSM_EMAIL_APP_PASSWORD
os.environ["CSM_EMAILS_TO_SEND_TO"] = contact_support_data.CSM_EMAILS_TO_SEND_TO
os.environ[
"CSM_TARGET_SMTP_SERVER_ADDRESS"
] = DEFAULT_CSM_TARGET_SMTP_SERVER_ADDRESS
os.environ["CSM_TARGET_SMTP_SERVER_PORT"] = str(DEFAULT_CSM_TARGET_SMTP_SERVER_PORT)
os.environ["CSM_TLS_ENABLED"] = "true"
os.environ["CSM_AUTH_ENABLED"] = "true"
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ["CSM_EMAIL_APP_PASSWORD"] = contact_support_data.CSM_EMAIL_APP_PASSWORD

# execute
contactSupportResource = contact_support.ContactSupportResource()
Expand All @@ -71,22 +73,26 @@ def test_contact_support_resource_initialization_success():

# cleanup
del os.environ["CSM_EMAIL_TO_SEND_FROM"]
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_EMAIL_APP_PASSWORD"]
del os.environ["CSM_EMAILS_TO_SEND_TO"]
del os.environ["CSM_TARGET_SMTP_SERVER_ADDRESS"]
del os.environ["CSM_TARGET_SMTP_SERVER_PORT"]
del os.environ["CSM_TLS_ENABLED"]
del os.environ["CSM_AUTH_ENABLED"]
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_EMAIL_APP_PASSWORD"]


def test_contact_support_resource_initialization_no_CSM_EMAIL_TO_SEND_FROM():
# prepare
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ["CSM_EMAIL_APP_PASSWORD"] = contact_support_data.CSM_EMAIL_APP_PASSWORD
os.environ["CSM_EMAILS_TO_SEND_TO"] = contact_support_data.CSM_EMAILS_TO_SEND_TO
os.environ[
"CSM_TARGET_SMTP_SERVER_ADDRESS"
] = DEFAULT_CSM_TARGET_SMTP_SERVER_ADDRESS
os.environ["CSM_TARGET_SMTP_SERVER_PORT"] = str(DEFAULT_CSM_TARGET_SMTP_SERVER_PORT)
os.environ["CSM_TLS_ENABLED"] = "true"
os.environ["CSM_AUTH_ENABLED"] = "true"
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ["CSM_EMAIL_APP_PASSWORD"] = contact_support_data.CSM_EMAIL_APP_PASSWORD

# execute
exceptionOccurred = False
Expand All @@ -99,22 +105,26 @@ def test_contact_support_resource_initialization_no_CSM_EMAIL_TO_SEND_FROM():
assert exceptionOccurred

# cleanup
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_EMAIL_APP_PASSWORD"]
del os.environ["CSM_EMAILS_TO_SEND_TO"]
del os.environ["CSM_TARGET_SMTP_SERVER_ADDRESS"]
del os.environ["CSM_TARGET_SMTP_SERVER_PORT"]
del os.environ["CSM_TLS_ENABLED"]
del os.environ["CSM_AUTH_ENABLED"]
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_EMAIL_APP_PASSWORD"]


def test_contact_support_resource_initialization_no_CSM_EMAIL_APP_PASSWORD():
# prepare
os.environ["CSM_EMAIL_TO_SEND_FROM"] = contact_support_data.CSM_EMAIL_TO_SEND_FROM
os.environ["CSM_EMAILS_TO_SEND_TO"] = contact_support_data.CSM_EMAILS_TO_SEND_TO
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ[
"CSM_TARGET_SMTP_SERVER_ADDRESS"
] = DEFAULT_CSM_TARGET_SMTP_SERVER_ADDRESS
os.environ["CSM_TARGET_SMTP_SERVER_PORT"] = str(DEFAULT_CSM_TARGET_SMTP_SERVER_PORT)
os.environ["CSM_TLS_ENABLED"] = "true"
os.environ["CSM_AUTH_ENABLED"] = "true"
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME

# execute
exceptionOccurred = False
Expand All @@ -129,20 +139,24 @@ def test_contact_support_resource_initialization_no_CSM_EMAIL_APP_PASSWORD():
# cleanup
del os.environ["CSM_EMAIL_TO_SEND_FROM"]
del os.environ["CSM_EMAILS_TO_SEND_TO"]
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_TARGET_SMTP_SERVER_ADDRESS"]
del os.environ["CSM_TARGET_SMTP_SERVER_PORT"]
del os.environ["CSM_TLS_ENABLED"]
del os.environ["CSM_AUTH_ENABLED"]
del os.environ["CSM_EMAIL_APP_USERNAME"]


def test_contact_support_resource_initialization_no_CSM_EMAILS_TO_SEND_TO():
# prepare
os.environ["CSM_EMAIL_TO_SEND_FROM"] = contact_support_data.CSM_EMAIL_TO_SEND_FROM
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ["CSM_EMAIL_APP_PASSWORD"] = contact_support_data.CSM_EMAIL_APP_PASSWORD
os.environ[
"CSM_TARGET_SMTP_SERVER_ADDRESS"
] = DEFAULT_CSM_TARGET_SMTP_SERVER_ADDRESS
os.environ["CSM_TARGET_SMTP_SERVER_PORT"] = str(DEFAULT_CSM_TARGET_SMTP_SERVER_PORT)
os.environ["CSM_TLS_ENABLED"] = "true"
os.environ["CSM_AUTH_ENABLED"] = "true"
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ["CSM_EMAIL_APP_PASSWORD"] = contact_support_data.CSM_EMAIL_APP_PASSWORD

# execute
exceptionOccurred = False
Expand All @@ -156,22 +170,26 @@ def test_contact_support_resource_initialization_no_CSM_EMAILS_TO_SEND_TO():

# cleanup
del os.environ["CSM_EMAIL_TO_SEND_FROM"]
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_EMAIL_APP_PASSWORD"]
del os.environ["CSM_TARGET_SMTP_SERVER_ADDRESS"]
del os.environ["CSM_TARGET_SMTP_SERVER_PORT"]
del os.environ["CSM_TLS_ENABLED"]
del os.environ["CSM_AUTH_ENABLED"]
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_EMAIL_APP_PASSWORD"]


def test_options():
# prepare
os.environ["CSM_EMAIL_TO_SEND_FROM"] = contact_support_data.CSM_EMAIL_TO_SEND_FROM
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ["CSM_EMAIL_APP_PASSWORD"] = contact_support_data.CSM_EMAIL_APP_PASSWORD
os.environ["CSM_EMAILS_TO_SEND_TO"] = contact_support_data.CSM_EMAILS_TO_SEND_TO
os.environ[
"CSM_TARGET_SMTP_SERVER_ADDRESS"
] = DEFAULT_CSM_TARGET_SMTP_SERVER_ADDRESS
os.environ["CSM_TARGET_SMTP_SERVER_PORT"] = str(DEFAULT_CSM_TARGET_SMTP_SERVER_PORT)
os.environ["CSM_TLS_ENABLED"] = "true"
os.environ["CSM_AUTH_ENABLED"] = "true"
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ["CSM_EMAIL_APP_PASSWORD"] = contact_support_data.CSM_EMAIL_APP_PASSWORD
contactSupportResource = contact_support.ContactSupportResource()

# execute
Expand All @@ -182,23 +200,27 @@ def test_options():

# cleanup
del os.environ["CSM_EMAIL_TO_SEND_FROM"]
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_EMAIL_APP_PASSWORD"]
del os.environ["CSM_EMAILS_TO_SEND_TO"]
del os.environ["CSM_TARGET_SMTP_SERVER_ADDRESS"]
del os.environ["CSM_TARGET_SMTP_SERVER_PORT"]
del os.environ["CSM_TLS_ENABLED"]
del os.environ["CSM_AUTH_ENABLED"]
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_EMAIL_APP_PASSWORD"]


def test_post_success():
# prepare
os.environ["CSM_EMAIL_TO_SEND_FROM"] = contact_support_data.CSM_EMAIL_TO_SEND_FROM
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ["CSM_EMAIL_APP_PASSWORD"] = contact_support_data.CSM_EMAIL_APP_PASSWORD
os.environ["CSM_EMAILS_TO_SEND_TO"] = contact_support_data.CSM_EMAILS_TO_SEND_TO
os.environ[
"CSM_TARGET_SMTP_SERVER_ADDRESS"
] = DEFAULT_CSM_TARGET_SMTP_SERVER_ADDRESS
os.environ["CSM_TARGET_SMTP_SERVER_PORT"] = str(DEFAULT_CSM_TARGET_SMTP_SERVER_PORT)
os.environ["CSM_TLS_ENABLED"] = "true"
os.environ["CSM_AUTH_ENABLED"] = "true"
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ["CSM_EMAIL_APP_PASSWORD"] = contact_support_data.CSM_EMAIL_APP_PASSWORD
contactSupportResource = contact_support.ContactSupportResource()
contactSupportResource.validate_input = MagicMock()
contactSupportResource.send = MagicMock()
Expand All @@ -213,23 +235,27 @@ def test_post_success():

# cleanup
del os.environ["CSM_EMAIL_TO_SEND_FROM"]
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_EMAIL_APP_PASSWORD"]
del os.environ["CSM_EMAILS_TO_SEND_TO"]
del os.environ["CSM_TARGET_SMTP_SERVER_ADDRESS"]
del os.environ["CSM_TARGET_SMTP_SERVER_PORT"]
del os.environ["CSM_TLS_ENABLED"]
del os.environ["CSM_AUTH_ENABLED"]
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_EMAIL_APP_PASSWORD"]


def test_post_no_json_body():
# prepare
os.environ["CSM_EMAIL_TO_SEND_FROM"] = contact_support_data.CSM_EMAIL_TO_SEND_FROM
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ["CSM_EMAIL_APP_PASSWORD"] = contact_support_data.CSM_EMAIL_APP_PASSWORD
os.environ["CSM_EMAILS_TO_SEND_TO"] = contact_support_data.CSM_EMAILS_TO_SEND_TO
os.environ[
"CSM_TARGET_SMTP_SERVER_ADDRESS"
] = DEFAULT_CSM_TARGET_SMTP_SERVER_ADDRESS
os.environ["CSM_TARGET_SMTP_SERVER_PORT"] = str(DEFAULT_CSM_TARGET_SMTP_SERVER_PORT)
os.environ["CSM_TLS_ENABLED"] = "true"
os.environ["CSM_AUTH_ENABLED"] = "true"
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ["CSM_EMAIL_APP_PASSWORD"] = contact_support_data.CSM_EMAIL_APP_PASSWORD
contactSupportResource = contact_support.ContactSupportResource()
contactSupportResource.validate_input = MagicMock()
contactSupportResource.send = MagicMock()
Expand All @@ -246,23 +272,27 @@ def test_post_no_json_body():

# cleanup
del os.environ["CSM_EMAIL_TO_SEND_FROM"]
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_EMAIL_APP_PASSWORD"]
del os.environ["CSM_EMAILS_TO_SEND_TO"]
del os.environ["CSM_TARGET_SMTP_SERVER_ADDRESS"]
del os.environ["CSM_TARGET_SMTP_SERVER_PORT"]
del os.environ["CSM_TLS_ENABLED"]
del os.environ["CSM_AUTH_ENABLED"]
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_EMAIL_APP_PASSWORD"]


def test_validate_input():
# prepare
os.environ["CSM_EMAIL_TO_SEND_FROM"] = contact_support_data.CSM_EMAIL_TO_SEND_FROM
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ["CSM_EMAIL_APP_PASSWORD"] = contact_support_data.CSM_EMAIL_APP_PASSWORD
os.environ["CSM_EMAILS_TO_SEND_TO"] = contact_support_data.CSM_EMAILS_TO_SEND_TO
os.environ[
"CSM_TARGET_SMTP_SERVER_ADDRESS"
] = DEFAULT_CSM_TARGET_SMTP_SERVER_ADDRESS
os.environ["CSM_TARGET_SMTP_SERVER_PORT"] = str(DEFAULT_CSM_TARGET_SMTP_SERVER_PORT)
os.environ["CSM_TLS_ENABLED"] = "true"
os.environ["CSM_AUTH_ENABLED"] = "true"
os.environ["CSM_EMAIL_APP_USERNAME"] = contact_support_data.CSM_EMAIL_APP_USERNAME
os.environ["CSM_EMAIL_APP_PASSWORD"] = contact_support_data.CSM_EMAIL_APP_PASSWORD
contactSupportResource = contact_support.ContactSupportResource()

# execute
Expand All @@ -275,11 +305,12 @@ def test_validate_input():

# cleanup
del os.environ["CSM_EMAIL_TO_SEND_FROM"]
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_EMAIL_APP_PASSWORD"]
del os.environ["CSM_EMAILS_TO_SEND_TO"]
del os.environ["CSM_TARGET_SMTP_SERVER_ADDRESS"]
del os.environ["CSM_TARGET_SMTP_SERVER_PORT"]

del os.environ["CSM_TLS_ENABLED"]
del os.environ["CSM_AUTH_ENABLED"]
del os.environ["CSM_EMAIL_APP_USERNAME"]
del os.environ["CSM_EMAIL_APP_PASSWORD"]

# end of tests for ContactSupportResource class ---
Loading

0 comments on commit e67b850

Please sign in to comment.