Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
64152e68
Commit
64152e68
authored
Aug 29, 2017
by
zubair-arbi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add error message in odata api log
ENT-600
parent
0c204e35
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
73 additions
and
9 deletions
+73
-9
common/djangoapps/third_party_auth/saml.py
+14
-8
common/djangoapps/third_party_auth/tests/specs/test_testshib.py
+59
-1
No files found.
common/djangoapps/third_party_auth/saml.py
View file @
64152e68
...
...
@@ -290,27 +290,33 @@ class SapSuccessFactorsIdentityProvider(EdXSAMLIdentityProvider):
# from the SAML assertion.
return
details
username
=
details
[
'username'
]
fields
=
','
.
join
(
self
.
field_mappings
)
odata_api_url
=
'{root_url}User(userId=
\'
{user_id}
\'
)?$select={fields}'
.
format
(
root_url
=
self
.
odata_api_root_url
,
user_id
=
username
,
fields
=
fields
,
)
try
:
client
=
self
.
get_odata_api_client
(
user_id
=
username
)
fields
=
','
.
join
(
self
.
field_mappings
)
response
=
client
.
get
(
'{root_url}User(userId=
\'
{user_id}
\'
)?$select={fields}'
.
format
(
root_url
=
self
.
odata_api_root_url
,
user_id
=
username
,
fields
=
fields
,
),
odata_api_url
,
timeout
=
self
.
timeout
,
)
response
.
raise_for_status
()
response
=
response
.
json
()
except
requests
.
RequestException
:
except
requests
.
RequestException
as
err
:
# If there was an HTTP level error, log the error and return the details from the SAML assertion.
log
.
warning
(
'Unable to retrieve user details with username
%
s from SAPSuccessFactors with company ID
%
s.'
,
'Unable to retrieve user details with username
%
s from SAPSuccessFactors for company ID
%
s '
'with url "
%
s" and error message:
%
s'
,
username
,
self
.
odata_company_id
,
odata_api_url
,
err
.
message
,
exc_info
=
True
,
)
return
details
return
self
.
get_registration_fields
(
response
)
...
...
common/djangoapps/third_party_auth/tests/specs/test_testshib.py
View file @
64152e68
...
...
@@ -6,12 +6,14 @@ import ddt
import
unittest
import
httpretty
import
json
import
logging
from
mock
import
patch
from
freezegun
import
freeze_time
from
social_django.models
import
UserSocialAuth
from
testfixtures
import
LogCapture
from
unittest
import
skip
from
third_party_auth.saml
import
log
as
saml_log
from
third_party_auth.saml
import
log
as
saml_log
,
SapSuccessFactorsIdentityProvider
from
third_party_auth.tasks
import
fetch_saml_metadata
from
third_party_auth.tests
import
testutil
...
...
@@ -316,6 +318,26 @@ class SuccessFactorsIntegrationTest(SamlIntegrationTestUtilities, IntegrationTes
httpretty
.
register_uri
(
httpretty
.
GET
,
ODATA_USER_URL
,
content_type
=
'application/json'
,
body
=
user_callback
)
def
_mock_odata_api_for_error
(
self
,
odata_api_root_url
,
username
):
"""
Mock an error response when calling the OData API for user details.
"""
def
callback
(
request
,
uri
,
headers
):
# pylint: disable=unused-argument
"""
Return a 500 error when someone tries to call the URL.
"""
return
500
,
headers
,
'Failure!'
fields
=
','
.
join
(
SapSuccessFactorsIdentityProvider
.
default_field_mapping
.
copy
())
url
=
'{root_url}User(userId=
\'
{user_id}
\'
)?$select={fields}'
.
format
(
root_url
=
odata_api_root_url
,
user_id
=
username
,
fields
=
fields
,
)
httpretty
.
register_uri
(
httpretty
.
GET
,
url
,
body
=
callback
,
content_type
=
'application/json'
)
return
url
def
test_register_insufficient_sapsf_metadata
(
self
):
"""
Configure the provider such that it doesn't have enough details to contact the SAP
...
...
@@ -468,6 +490,42 @@ class SuccessFactorsIntegrationTest(SamlIntegrationTestUtilities, IntegrationTes
self
.
USER_USERNAME
=
"myself"
super
(
SuccessFactorsIntegrationTest
,
self
)
.
test_register
()
def
test_register_http_failure_in_odata
(
self
):
"""
Ensure that if there's an HTTP failure while fetching user details from
SAP SuccessFactors OData API.
"""
# Because we're getting details from the assertion, fall back to the initial set of details.
self
.
USER_EMAIL
=
"myself@testshib.org"
self
.
USER_NAME
=
"Me Myself And I"
self
.
USER_USERNAME
=
"myself"
odata_company_id
=
'NCC1701D'
odata_api_root_url
=
'http://api.successfactors.com/odata/v2/'
mocked_odata_ai_url
=
self
.
_mock_odata_api_for_error
(
odata_api_root_url
,
self
.
USER_USERNAME
)
self
.
_configure_testshib_provider
(
identity_provider_type
=
'sap_success_factors'
,
metadata_source
=
TESTSHIB_METADATA_URL
,
other_settings
=
json
.
dumps
({
'sapsf_oauth_root_url'
:
'http://successfactors.com/oauth/'
,
'sapsf_private_key'
:
'fake_private_key_here'
,
'odata_api_root_url'
:
odata_api_root_url
,
'odata_company_id'
:
odata_company_id
,
'odata_client_id'
:
'TatVotSEiCMteSNWtSOnLanCtBGwNhGB'
,
})
)
with
LogCapture
(
level
=
logging
.
WARNING
)
as
log_capture
:
super
(
SuccessFactorsIntegrationTest
,
self
)
.
test_register
()
expected_message
=
'Unable to retrieve user details with username {username} from SAPSuccessFactors '
\
'for company ID {company_id} with url "{odata_api_url}" and error message: '
\
'500 Server Error: Internal Server Error for url: {odata_api_url}'
.
format
(
username
=
self
.
USER_USERNAME
,
company_id
=
odata_company_id
,
odata_api_url
=
mocked_odata_ai_url
,
)
logging_messages
=
[
log_msg
.
getMessage
()
for
log_msg
in
log_capture
.
records
]
self
.
assertTrue
(
expected_message
in
logging_messages
)
@skip
(
'Test not necessary for this subclass'
)
def
test_get_saml_idp_class_with_fake_identifier
(
self
):
pass
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment