use of org.orcid.core.security.aop.LockedException in project ORCID-Source by ORCID.
the class OrcidRandomValueTokenServicesImpl method loadAuthentication.
@Override
public OAuth2Authentication loadAuthentication(String accessTokenValue) throws AuthenticationException {
OAuth2AccessToken accessToken = orcidTokenStore.readAccessToken(accessTokenValue);
if (accessToken == null) {
throw new InvalidTokenException("Invalid access token: " + accessTokenValue);
} else {
// If it is, respect the token expiration
if (accessToken.isExpired()) {
orcidTokenStore.removeAccessToken(accessToken);
throw new InvalidTokenException("Access token expired: " + accessTokenValue);
}
Map<String, Object> additionalInfo = accessToken.getAdditionalInformation();
if (additionalInfo != null) {
String clientId = (String) additionalInfo.get(OrcidOauth2Constants.CLIENT_ID);
ClientDetailsEntity clientEntity = clientDetailsEntityCacheManager.retrieve(clientId);
try {
orcidOAuth2RequestValidator.validateClientIsEnabled(clientEntity);
} catch (LockedException le) {
throw new InvalidTokenException(le.getMessage());
}
}
}
OAuth2Authentication result = orcidTokenStore.readAuthentication(accessToken);
return result;
}
use of org.orcid.core.security.aop.LockedException in project ORCID-Source by ORCID.
the class OauthGenericCallsControllerTest method testObtainOauth2TokenPostLockedClient.
@Test
public void testObtainOauth2TokenPostLockedClient() {
when(orcidClientCredentialEndPointDelegator.obtainOauth2Token(isNull(), any())).thenThrow(new LockedException("Client is locked"));
ResponseEntity<?> responseEntity = controller.obtainOauth2TokenPost(new MockHttpServletRequest());
assertNotNull(responseEntity);
assertNotNull(responseEntity.getBody());
assertTrue(responseEntity.getBody() instanceof OAuthError);
OAuthError error = (OAuthError) responseEntity.getBody();
assertEquals(OAuthError.UNAUTHORIZED_CLIENT, error.getError());
assertEquals("Client is locked", error.getErrorDescription());
}
use of org.orcid.core.security.aop.LockedException in project ORCID-Source by ORCID.
the class OrcidSearchManagerImpl method buildSearchResultsFromPublicProfile.
private List<OrcidSearchResult> buildSearchResultsFromPublicProfile(List<OrcidSolrResult> solrResults) {
List<OrcidSearchResult> orcidSearchResults = new ArrayList<OrcidSearchResult>();
for (OrcidSolrResult solrResult : solrResults) {
OrcidMessage orcidMessage = null;
String orcid = solrResult.getOrcid();
try {
orcidSecurityManager.checkProfile(orcid);
} catch (DeactivatedException | LockedException | OrcidDeprecatedException x) {
OrcidSearchResult orcidSearchResult = new OrcidSearchResult();
RelevancyScore relevancyScore = new RelevancyScore();
relevancyScore.setValue(solrResult.getRelevancyScore());
orcidSearchResult.setRelevancyScore(relevancyScore);
OrcidProfile orcidProfile = new OrcidProfile();
orcidProfile.setOrcidIdentifier(new OrcidIdentifier(jpaJaxbAdapter.getOrcidIdBase(orcid)));
OrcidHistory history = new OrcidHistory();
Date recordLastModified = profileDaoReadOnly.retrieveLastModifiedDate(orcid);
history.setLastModifiedDate(new LastModifiedDate(DateUtils.convertToXMLGregorianCalendar(recordLastModified)));
orcidProfile.setOrcidHistory(history);
orcidSearchResult.setOrcidProfile(orcidProfile);
orcidSearchResults.add(orcidSearchResult);
continue;
}
if (cachingSource.equals(SOLR)) {
try (Reader reader = solrDao.findByOrcidAsReader(orcid)) {
if (reader != null) {
BufferedReader br = new BufferedReader(reader);
orcidMessage = OrcidMessage.unmarshall(br);
}
} catch (IOException e) {
throw new OrcidSearchException("Error closing record stream from solr search results for orcid: " + orcid, e);
}
}
OrcidProfile orcidProfile = null;
if (orcidMessage == null) {
// Fall back to DB
orcidProfile = orcidProfileCacheManager.retrievePublicBio(orcid);
} else {
orcidProfile = orcidMessage.getOrcidProfile();
}
if (orcidProfile != null) {
OrcidSearchResult orcidSearchResult = new OrcidSearchResult();
RelevancyScore relevancyScore = new RelevancyScore();
relevancyScore.setValue(solrResult.getRelevancyScore());
orcidSearchResult.setRelevancyScore(relevancyScore);
OrcidWorks orcidWorksTitlesOnly = new OrcidWorks();
OrcidWorks fullOrcidWorks = orcidProfile.retrieveOrcidWorks();
if (fullOrcidWorks != null && !fullOrcidWorks.getOrcidWork().isEmpty()) {
for (OrcidWork fullOrcidWork : fullOrcidWorks.getOrcidWork()) {
OrcidWork orcidWorkSubset = new OrcidWork();
orcidWorkSubset.setVisibility(fullOrcidWork.getVisibility());
orcidWorkSubset.setWorkTitle(fullOrcidWork.getWorkTitle());
orcidWorkSubset.setWorkExternalIdentifiers(fullOrcidWork.getWorkExternalIdentifiers());
orcidWorksTitlesOnly.getOrcidWork().add(orcidWorkSubset);
}
}
FundingList reducedFundings = new FundingList();
FundingList fullOrcidFundings = orcidProfile.retrieveFundings();
if (fullOrcidFundings != null && !fullOrcidFundings.getFundings().isEmpty()) {
for (Funding fullOrcidFunding : fullOrcidFundings.getFundings()) {
Funding reducedFunding = new Funding();
reducedFunding.setVisibility(fullOrcidFunding.getVisibility());
reducedFunding.setDescription(fullOrcidFunding.getDescription());
reducedFunding.setTitle(fullOrcidFunding.getTitle());
reducedFundings.getFundings().add(reducedFunding);
}
}
orcidProfile.setOrcidWorks(orcidWorksTitlesOnly);
orcidProfile.setFundings(reducedFundings);
orcidSearchResult.setOrcidProfile(orcidProfile);
orcidSearchResults.add(orcidSearchResult);
}
}
return orcidSearchResults;
}
use of org.orcid.core.security.aop.LockedException in project ORCID-Source by ORCID.
the class OrcidSearchManagerImplTest method recordLockedTest.
@Test
public void recordLockedTest() {
OrcidProfile orcidProfile = getOrcidProfileAllIndexFieldsPopulated();
orcidProfile.getOrcidIdentifier().setPath("0000");
when(mockSolrDao.findByDocumentCriteria("rndQuery", null, null)).thenReturn(invalidRecordSearchResult());
when(mockOrcidProfileCacheManager.retrievePublicBio("0000")).thenReturn(orcidProfile);
doThrow(new LockedException()).when(mockOrcidSecurityManager).checkProfile("0000");
OrcidMessage retrievedOrcidMessage = orcidSearchManager.findOrcidsByQuery("rndQuery");
assertNotNull(retrievedOrcidMessage);
assertTrue(retrievedOrcidMessage.getOrcidSearchResults() != null && retrievedOrcidMessage.getOrcidSearchResults().getOrcidSearchResult().size() == 1);
OrcidSearchResult searchResult = retrievedOrcidMessage.getOrcidSearchResults().getOrcidSearchResult().get(0);
OrcidProfile profileReturnedFromSearch = searchResult.getOrcidProfile();
assertEquals("0000", profileReturnedFromSearch.getOrcidIdentifier().getPath());
assertNotNull(profileReturnedFromSearch.getOrcidHistory().getLastModifiedDate().getValue());
assertNull(profileReturnedFromSearch.getOrcidActivities());
assertNull(profileReturnedFromSearch.getOrcidBio());
}
use of org.orcid.core.security.aop.LockedException in project ORCID-Source by ORCID.
the class OrcidSearchManagerImplTest method recordLockedTest.
@Test
public void recordLockedTest() {
OrcidProfile orcidProfile = getOrcidProfileAllIndexFieldsPopulated();
orcidProfile.getOrcidIdentifier().setPath("0000");
when(mockSolrDao.findByDocumentCriteria("rndQuery", null, null)).thenReturn(invalidRecordSearchResult());
when(mockOrcidProfileCacheManager.retrievePublicBio("0000")).thenReturn(orcidProfile);
doThrow(new LockedException()).when(mockOrcidSecurityManager).checkProfile("0000");
OrcidMessage retrievedOrcidMessage = orcidSearchManager.findOrcidsByQuery("rndQuery");
assertNotNull(retrievedOrcidMessage);
assertTrue(retrievedOrcidMessage.getOrcidSearchResults() != null && retrievedOrcidMessage.getOrcidSearchResults().getOrcidSearchResult().size() == 1);
OrcidSearchResult searchResult = retrievedOrcidMessage.getOrcidSearchResults().getOrcidSearchResult().get(0);
OrcidProfile profileReturnedFromSearch = searchResult.getOrcidProfile();
assertEquals("0000", profileReturnedFromSearch.getOrcidIdentifier().getPath());
assertNotNull(profileReturnedFromSearch.getOrcidHistory().getLastModifiedDate().getValue());
assertNull(profileReturnedFromSearch.getOrcidActivities());
assertNull(profileReturnedFromSearch.getOrcidBio());
}
Aggregations