def get_projects(event, context): """ Gets list of all projects from Salesforce """ # cla.log.debug('event: {}'.format(event)) # cla.log.debug(f'context: {context}') try: auth_user = cla.auth.authenticate_user(event.get('headers')) except cla.auth.AuthError as e: cla.log.error('Authorization error: {}'.format(e)) return format_json_cors_response(401, 'Error parsing Bearer token') except Exception as e: cla.log.error('Unknown authorization error: {}'.format(e)) return format_json_cors_response(401, 'Error parsing Bearer token') # import pdb; pdb.set_trace() # Get project access list for user user_permissions = UserPermissions() try: user_permissions.load(auth_user.username) except Exception as e: cla.log.error('Error invalid username: {}. error: {}'.format(auth_user.username, e)) return format_json_cors_response(400, 'Error invalid username') user_permissions = user_permissions.to_dict() authorized_projects = user_permissions.get('projects') if authorized_projects is None: cla.log.error('Error user not authorized to access projects: {}'.format(user_permissions)) return format_json_cors_response(403, 'Error user not authorized to access projects') project_list = ','.join([id for id in authorized_projects]) cla.log.info(f'User authorized_projects : {authorized_projects}') access_token, code = get_access_token() if code != HTTPStatus.OK: cla.log.error('Authentication failure') return format_json_cors_response(code, 'Authentication failure') headers = { 'Authorization': f'bearer {access_token}', 'accept': 'application/json' } query_url = f'{platform_gateway_url}/project-service/v1/projects/search?id={project_list}' cla.log.info(f'Query project service url: {query_url}') resp = requests.get(query_url, headers=headers) response = json.loads(resp.text) cla.log.info('response :%s '% resp) status_code = resp.status_code if status_code != HTTPStatus.OK: cla.log.error('Error retrieving projects: %s', response[0].get('message')) return format_json_cors_response(status_code, 'Error retrieving projects') records = response.get('Data') projects = [] for project in records: # use our S3 bucket Logos for now, if we want to switch to other logos # we'll need to update the CORS policy logo_url = None project_id = project.get('ID') if project_id: logo_url = '{}/{}.png'.format(cla_logo_url, project_id) projects.append({ 'name': project.get('Name'), 'id': project.get('ID'), 'description': project.get('Description'), 'logoUrl': logo_url # 'logoUrl': project.get('ProjectLogo') # SF Logo link }) return format_json_cors_response(status_code, projects)
def get_projects(event, context): """ Gets list of all projects from Salesforce """ cla.log.debug('event: {}'.format(event)) try: auth_user = cla.auth.authenticate_user(event.get('headers')) except cla.auth.AuthError as e: cla.log.error('Authorization error: {}'.format(e)) return format_json_cors_response(401, 'Error parsing Bearer token') except Exception as e: cla.log.error('Unknown authorization error: {}'.format(e)) return format_json_cors_response(401, 'Error parsing Bearer token') # Get project access list for user user_permissions = UserPermissions() try: user_permissions.load(auth_user.username) except Exception as e: cla.log.error('Error invalid username: {}. error: {}'.format(auth_user.username, e)) return format_json_cors_response(400, 'Error invalid username') user_permissions = user_permissions.to_dict() authorized_projects = user_permissions.get('projects') if authorized_projects is None: cla.log.error('Error user not authorized to access projects: {}'.format(user_permissions)) return format_json_cors_response(403, 'Error user not authorized to access projects') project_list = ', '.join('\'' + project_id + '\'' for project_id in authorized_projects) oauth_response = get_sf_oauth_access() if oauth_response is None: cla.log.error('Unable to acquire oauth token.') return format_json_cors_response(400, 'authentication error') token = oauth_response['access_token'] instance_url = oauth_response['instance_url'] headers = { 'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json', } query_url = '{}/services/data/v20.0/query/'.format(instance_url) query = {'q': 'SELECT id, Name, Description__c from Project__c WHERE id IN ({})'.format(project_list)} r = requests.get(query_url, headers=headers, params=query) response = r.json() status_code = r.status_code if status_code != HTTPStatus.OK: cla.log.error('Error retrieving projects: %s', response[0].get('message')) return format_json_cors_response(status_code, 'Error retrieving projects') records = response.get('records') projects = [] for project in records: logo_url = None project_id = project.get('Id') if project_id: logo_url = '{}/{}.png'.format(cla_logo_url, project_id) projects.append({ 'name': project.get('Name'), 'id': project_id, 'description': project.get('Description__c'), 'logoUrl': logo_url }) return format_json_cors_response(status_code, projects)
def get_project(event, context): """ Given project id, gets project details from Salesforce """ cla.log.info('event: {}'.format(event)) project_id = event.get('queryStringParameters').get('id') if project_id is None: return format_json_cors_response(400, 'Missing project ID') try: auth_user = cla.auth.authenticate_user(event.get('headers')) except cla.auth.AuthError as e: cla.log.error('Authorization error: {}'.format(e)) return format_json_cors_response(401, 'Error parsing Bearer token') except Exception as e: cla.log.error('Unknown authorization error: {}'.format(e)) return format_json_cors_response(401, 'Error parsing Bearer token') # Get project access list for user user_permissions = UserPermissions() try: user_permissions.load(auth_user.username) except: cla.log.error(' Error invalid username: {}'.format(auth_user.username)) return format_json_cors_response(400, 'Error invalid username') user_permissions = user_permissions.to_dict() authorized_projects = user_permissions.get('projects') if authorized_projects is None: cla.log.error('Error user not authorized to access projects: {}'.format(user_permissions)) return format_json_cors_response(403, 'Error user not authorized to access projects') if project_id not in authorized_projects: cla.log.error('Error user not authorized') return format_json_cors_response(403, 'Error user not authorized') token, code = get_access_token() if code != HTTPStatus.OK: cla.log.error('Authentication failure') return format_json_cors_response(code, 'Authentication failure') headers = { 'Authorization': 'Bearer {}'.format(token) } url = f'{platform_gateway_url}/project-service/v1/projects/search?id={project_id}' cla.log.info('Using Project service to get project info..') resp = requests.get(url, headers=headers) response = resp.json() status_code = resp.status_code if status_code != HTTPStatus.OK: cla.log.error('Error retrieving project: %s', response[0].get('message')) return format_json_cors_response(status_code, 'Error retrieving project') result = response['Data'][0] if result: cla.log.info(f'Found project : {result} ') # use our S3 bucket Logos for now, if we want to switch to other logos # we'll need to update the CORS policy logo_url = None project_id = result.get('ID') if project_id: logo_url = '{}/{}.png'.format(cla_logo_url, project_id) project = { 'name': result.get('Name'), 'id': result.get('ID'), 'description': result.get('Description'), 'logoUrl': logo_url # 'logoUrl': result.get('ProjectLogo') # SF logo link } return format_json_cors_response(status_code, project)
def get_project(event, context): """ Given project id, gets project details from Salesforce """ cla.log.info('event: {}'.format(event)) project_id = event.get('queryStringParameters').get('id') if project_id is None: return format_json_cors_response(400, 'Missing project ID') try: auth_user = cla.auth.authenticate_user(event.get('headers')) except cla.auth.AuthError as e: cla.log.error('Authorization error: {}'.format(e)) return format_json_cors_response(401, 'Error parsing Bearer token') except Exception as e: cla.log.error('Unknown authorization error: {}'.format(e)) return format_json_cors_response(401, 'Error parsing Bearer token') # Get project access list for user user_permissions = UserPermissions() try: user_permissions.load(auth_user.username) except: cla.log.error('Error invalid username: {}'.format(auth_user.username)) return format_json_cors_response(400, 'Error invalid username') user_permissions = user_permissions.to_dict() authorized_projects = user_permissions.get('projects') if authorized_projects is None: cla.log.error('Error user not authorized to access projects: {}'.format(user_permissions)) return format_json_cors_response(403, 'Error user not authorized to access projects') if project_id not in authorized_projects: cla.log.error('Error user not authorized') return format_json_cors_response(403, 'Error user not authorized') oauth_response = get_sf_oauth_access() token = oauth_response['access_token'] instance_url = oauth_response['instance_url'] headers = { 'Authorization': 'Bearer {}'.format(token) } url = '{}/services/data/v20.0/sobjects/Project__c/{}'.format(instance_url, project_id) cla.log.info('Calling salesforce api for project info..') r = requests.get(url, headers=headers) response = r.json() status_code = r.status_code if status_code != HTTPStatus.OK: cla.log.error('Error retrieving project: %s', response[0].get('message')) return format_json_cors_response(status_code, 'Error retrieving project') logo_url = None if response.get('id'): logo_url = '{}/{}.png'.format(cla_logo_url, response.get('id')) project = { 'name': response.get('Name'), 'id': response.get('Id'), 'description': response.get('Description__c'), 'logoUrl': logo_url } return format_json_cors_response(status_code, project)