Skip to content

Create and use find_pem_file() #595 #596

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions src/server/api/API_ingest/salesforce_contacts.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
from config import engine
from models import SalesForceContacts

from api import pem

logger = structlog.get_logger()

TEST_MODE = os.getenv("TEST_MODE") # if not present, has value None
Expand All @@ -24,14 +26,13 @@ def store_contacts_all():

logger.debug("retrieving the latest salesforce contacts data")

if os.path.exists('server/bin/connected-app-secrets.pem'):
pem_file = 'server/bin/connected-app-secrets.pem'
elif os.path.exists('bin/connected-app-secrets.pem'):
pem_file = 'bin/connected-app-secrets.pem'
else:
pem_file = pem.find_pem_file()

if pem_file == '':
logger.error("Missing salesforce jwt private key pem file, skipping data pull")
return


sf = Salesforce(username=USERNAME, consumer_key=CONSUMER_KEY,
privatekey_file=pem_file, domain=DOMAIN)
results = sf.query("SELECT Contact_ID_18__c, FirstName, LastName, Contact.Account.Name, MailingCountry, MailingStreet, MailingCity, MailingState, MailingPostalCode, Phone, MobilePhone, Email FROM Contact")
Expand Down
25 changes: 25 additions & 0 deletions src/server/api/pem.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from os import path

import structlog

logger = structlog.get_logger()


def find_pem_file():
"""
Search likely places for the .pem file needed for SalesForce operations,
returning filename if found or empty string if not.
"""

locations = ['server/bin', 'bin', 'server/pem']
file_name = 'connected-app-secrets.pem'

pem_file = ''

for file_path in locations:
if path.exists(path.join(file_path, file_name)):
pem_file = path.normpath(path.join(file_path, file_name))
logger.info("Found pem file at %s ", pem_file)
break

return pem_file
4 changes: 3 additions & 1 deletion src/server/pub_sub/salesforce_message_publisher.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import structlog
from datetime import datetime

from api import pem

logger = structlog.get_logger()

ISSUER = os.getenv("SALESFORCE_CONSUMER_KEY")
Expand All @@ -25,7 +27,7 @@
UPDATE_TOPIC = "/event/updated_contacts_batched__e"

def send_pipeline_update_messages(contacts_list):
pem_file = 'bin/connected-app-secrets.pem'
pem_file = pem.find_pem_file() #TODO: Could we get here (and get errors) if we didn't have a pem file?
with open(pem_file) as fd:
private_key = fd.read()
logger.info('Loaded PEM certificate')
Expand Down