Files
edx-platform/common/djangoapps/util/enterprise_helpers.py
Jesse Shapiro 5d068cec1f Merge pull request #14496 from open-craft/haikuginger/remove-consent-from-logistration
[ENT-173] Remove data sharing consent from logistration
2017-02-14 11:51:53 -05:00

135 lines
4.6 KiB
Python

"""
Helpers to access the enterprise app
"""
from django.conf import settings
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext as _
import logging
from django.utils.http import urlencode
try:
from enterprise.models import EnterpriseCustomer
from enterprise import utils as enterprise_utils
from enterprise.tpa_pipeline import (
active_provider_requests_data_sharing,
active_provider_enforces_data_sharing,
get_enterprise_customer_for_request,
)
from enterprise.utils import consent_necessary_for_course
except ImportError:
pass
from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers
ENTERPRISE_CUSTOMER_BRANDING_OVERRIDE_DETAILS = 'enterprise_customer_branding_override_details'
LOGGER = logging.getLogger("edx.enterprise_helpers")
def enterprise_enabled():
"""
Determines whether the Enterprise app is installed
"""
return 'enterprise' in settings.INSTALLED_APPS and getattr(settings, 'ENABLE_ENTERPRISE_INTEGRATION', True)
def consent_needed_for_course(user, course_id):
"""
Wrap the enterprise app check to determine if the user needs to grant
data sharing permissions before accessing a course.
"""
if not enterprise_enabled():
return False
return consent_necessary_for_course(user, course_id)
def get_course_specific_consent_url(request, course_id, return_to):
"""
Build a URL to redirect the user to the Enterprise app to provide data sharing
consent for a specific course ID.
"""
url_params = {
'course_id': course_id,
'next': request.build_absolute_uri(reverse(return_to, args=(course_id,)))
}
querystring = urlencode(url_params)
full_url = reverse('grant_data_sharing_permissions') + '?' + querystring
LOGGER.info('Redirecting to %s to complete data sharing consent', full_url)
return full_url
def insert_enterprise_pipeline_elements(pipeline):
"""
If the enterprise app is enabled, insert additional elements into the
pipeline so that data sharing consent views are used.
"""
if not enterprise_enabled():
return
additional_elements = (
'enterprise.tpa_pipeline.set_data_sharing_consent_record',
'enterprise.tpa_pipeline.verify_data_sharing_consent',
)
# Find the item we need to insert the data sharing consent elements before
insert_point = pipeline.index('social.pipeline.social_auth.load_extra_data')
for index, element in enumerate(additional_elements):
pipeline.insert(insert_point + index, element)
def get_enterprise_customer_logo_url(request):
"""
Client API operation adapter/wrapper.
"""
if not enterprise_enabled():
return None
parameter = get_enterprise_branding_filter_param(request)
if not parameter:
return None
provider_id = parameter.get('provider_id', None)
ec_uuid = parameter.get('ec_uuid', None)
if provider_id:
branding_info = enterprise_utils.get_enterprise_branding_info_by_provider_id(identity_provider_id=provider_id)
elif ec_uuid:
branding_info = enterprise_utils.get_enterprise_branding_info_by_ec_uuid(ec_uuid=ec_uuid)
logo_url = None
if branding_info and branding_info.logo:
logo_url = branding_info.logo.url
return logo_url
def set_enterprise_branding_filter_param(request, provider_id):
"""
Setting 'ENTERPRISE_CUSTOMER_BRANDING_OVERRIDE_DETAILS' in session. 'ENTERPRISE_CUSTOMER_BRANDING_OVERRIDE_DETAILS'
either be provider_id or ec_uuid. e.g. {provider_id: 'xyz'} or {ec_src: enterprise_customer_uuid}
"""
ec_uuid = request.GET.get('ec_src', None)
if provider_id:
LOGGER.info(
"Session key 'ENTERPRISE_CUSTOMER_BRANDING_OVERRIDE_DETAILS' has been set with provider_id '%s'",
provider_id
)
request.session[ENTERPRISE_CUSTOMER_BRANDING_OVERRIDE_DETAILS] = {'provider_id': provider_id}
elif ec_uuid:
# we are assuming that none sso based enterprise will return Enterprise Customer uuid as 'ec_src' in query
# param e.g. edx.org/foo/bar?ec_src=6185ed46-68a4-45d6-8367-96c0bf70d1a6
LOGGER.info(
"Session key 'ENTERPRISE_CUSTOMER_BRANDING_OVERRIDE_DETAILS' has been set with ec_uuid '%s'", ec_uuid
)
request.session[ENTERPRISE_CUSTOMER_BRANDING_OVERRIDE_DETAILS] = {'ec_uuid': ec_uuid}
def get_enterprise_branding_filter_param(request):
"""
:return Filter parameter from session for enterprise customer branding information.
"""
return request.session.get(ENTERPRISE_CUSTOMER_BRANDING_OVERRIDE_DETAILS, None)