use of com.emc.storageos.security.authentication.AuthSvcInternalApiClientIterator in project coprhd-controller by CoprHD.
the class Validator method refreshUser.
/**
* Make an internal REST API call to the authsvc in order to reload the user in the
* DB.
*
* @param username
*/
public static void refreshUser(String username) {
String endpoint = null;
int attempts = 0;
while (attempts < _MAX_VALIDATION_RETRIES) {
_log.debug("Refresh user, attempt {}", ++attempts);
AuthSvcInternalApiClientIterator authSvcClientItr = new AuthSvcInternalApiClientIterator(_authSvcEndPointLocator, _coordinator);
try {
if (authSvcClientItr.hasNext()) {
endpoint = authSvcClientItr.peek().toString();
final ClientResponse response = authSvcClientItr.put(URI.create(_URI_REFRESH + "?username=" + URLEncoder.encode(username, "UTF-8")), null);
final int status = response.getStatus();
_log.debug("Status: {}", status);
if (status == ClientResponse.Status.OK.getStatusCode()) {
return;
} else if (status == ClientResponse.Status.BAD_REQUEST.getStatusCode()) {
throw APIException.badRequests.principalSearchFailed(username);
} else if (status == ClientResponse.Status.INTERNAL_SERVER_ERROR.getStatusCode()) {
ServiceErrorRestRep error = response.getEntity(ServiceErrorRestRep.class);
// if we got here, it means that we refresh user has failed
throw SecurityException.fatals.failedToRefreshUser(error.getDetailedMessage());
} else {
_log.error("Unexpected response code {}.", status);
}
}
} catch (APIException e) {
throw e;
} catch (FatalSecurityException e) {
throw e;
} catch (Exception e) {
_log.info("Exception connecting to {}. ", endpoint, e);
}
}
throw SecurityException.retryables.requiredServiceUnvailable(ServiceLocatorInfo.AUTH_SVC.getServiceName());
}
use of com.emc.storageos.security.authentication.AuthSvcInternalApiClientIterator in project coprhd-controller by CoprHD.
the class Validator method isValidPrincipal.
/**
* Validates the principal within the tenant
*
* @param principal
* @param tenantId
* : tenant id
* @param error
* : a string representing that error that happened.
* @return true if the principal is valid within the tenant
*/
public static boolean isValidPrincipal(StorageOSPrincipal principal, URI tenantId, StringBuilder error) {
String queryParams = null;
switch(principal.getType()) {
case User:
String encodedPrincipal;
String encodedTenant;
try {
encodedPrincipal = URLEncoder.encode(principal.getName(), "UTF-8");
} catch (UnsupportedEncodingException e) {
throw APIException.badRequests.unableToEncodeString(principal.getName(), e);
}
try {
encodedTenant = URLEncoder.encode(tenantId.toString(), "UTF-8");
} catch (UnsupportedEncodingException e) {
throw APIException.badRequests.unableToEncodeString(tenantId.toString(), e);
}
queryParams = "?subject_id=" + encodedPrincipal + "&tenant_id=" + encodedTenant;
break;
case Group:
try {
queryParams = "?group=" + URLEncoder.encode(principal.getName(), "UTF-8");
} catch (UnsupportedEncodingException e) {
throw APIException.badRequests.unableToEncodeString(principal.getName(), e);
}
break;
}
String endpoint = null;
int attempts = 0;
while (attempts < _MAX_VALIDATION_RETRIES) {
_log.debug("Validation attempt {}", ++attempts);
AuthSvcInternalApiClientIterator authSvcClientItr = new AuthSvcInternalApiClientIterator(_authSvcEndPointLocator, _coordinator);
try {
if (authSvcClientItr.hasNext()) {
endpoint = authSvcClientItr.peek().toString();
_log.info("isValidPrincipal(): {}", endpoint);
final ClientResponse response = authSvcClientItr.get(URI.create(_URI_VALIDATE + queryParams));
final int status = response.getStatus();
_log.debug("Status: {}", status);
if (status == ClientResponse.Status.OK.getStatusCode()) {
return true;
} else if (status == ClientResponse.Status.BAD_REQUEST.getStatusCode() || status == ClientResponse.Status.INTERNAL_SERVER_ERROR.getStatusCode()) {
ServiceErrorRestRep errorXml = response.getEntity(ServiceErrorRestRep.class);
error.append(errorXml.getDetailedMessage());
return false;
} else {
_log.info("Unexpected response code {}.", status);
}
}
} catch (Exception e) {
_log.info("Exception connecting to {}. ", endpoint, e);
}
}
return false;
}
use of com.emc.storageos.security.authentication.AuthSvcInternalApiClientIterator in project coprhd-controller by CoprHD.
the class Validator method validatePrincipals.
/**
* Validates the principals within the tenant
*
* @param principalsToValidate
* @param error
* :a string representing that error that happened.
* @return true if all the principal are valid within the tenant
*/
public static boolean validatePrincipals(PrincipalsToValidate principalsToValidate, StringBuilder error) {
String endpoint = null;
principalsToValidate.setUsers(deDuplicate(principalsToValidate.getUsers()));
principalsToValidate.setGroups(deDuplicate(principalsToValidate.getGroups()));
principalsToValidate.setAltTenantUsers(deDuplicate(principalsToValidate.getAltTenantUsers()));
int attempts = 0;
while (attempts < _MAX_VALIDATION_RETRIES) {
_log.debug("Validation attempt {}", ++attempts);
AuthSvcInternalApiClientIterator authSvcClientItr = new AuthSvcInternalApiClientIterator(_authSvcEndPointLocator, _coordinator);
try {
if (authSvcClientItr.hasNext()) {
endpoint = authSvcClientItr.peek().toString();
_log.info("validatePrincipals(): {}", endpoint);
final ClientResponse response = authSvcClientItr.post(_URI_VALIDATE_PRINCIPALS, principalsToValidate);
final int status = response.getStatus();
_log.debug("Status: {}", status);
if (status == ClientResponse.Status.OK.getStatusCode()) {
return true;
} else if (status == ClientResponse.Status.BAD_REQUEST.getStatusCode() || status == ClientResponse.Status.INTERNAL_SERVER_ERROR.getStatusCode()) {
ServiceErrorRestRep errorXml = response.getEntity(ServiceErrorRestRep.class);
error.append(errorXml.getDetailedMessage());
return false;
} else {
_log.info("Unexpected response code {}.", status);
}
}
} catch (Exception e) {
_log.info("Exception connecting to {}. ", endpoint, e);
if (e.getMessage().contains("Read timed out")) {
throw InternalServerErrorException.internalServerErrors.authTimeout();
}
}
}
return false;
}
use of com.emc.storageos.security.authentication.AuthSvcInternalApiClientIterator in project coprhd-controller by CoprHD.
the class Validator method getUserTenants.
public static UserTenantList getUserTenants(String username, TenantOrg tenant) {
String endpoint = null;
int attempts = 0;
while (attempts < _MAX_VALIDATION_RETRIES) {
_log.debug("Get user tenants attempt {}", ++attempts);
AuthSvcInternalApiClientIterator authSvcClientItr = new AuthSvcInternalApiClientIterator(_authSvcEndPointLocator, _coordinator);
try {
if (authSvcClientItr.hasNext()) {
endpoint = authSvcClientItr.peek().toString();
//
String queryParameters = "?username=" + username;
if (tenant != null) {
queryParameters += "&tenantURI=" + tenant.getId();
if (tenant.getUserMappings() != null) {
String userMappingStr = MarshallUtil.convertTenantUserMappingToString(tenant);
String encodedUserMapping = URLEncoder.encode(userMappingStr);
queryParameters += "&usermappings=" + encodedUserMapping;
}
}
final ClientResponse response = authSvcClientItr.get(URI.create(_URI_USERTENANT + queryParameters));
final int status = response.getStatus();
_log.debug("Status: {}", status);
if (status == ClientResponse.Status.OK.getStatusCode()) {
return response.getEntity(UserTenantList.class);
} else if (status == ClientResponse.Status.BAD_REQUEST.getStatusCode()) {
throw APIException.badRequests.theParametersAreNotValid(response.hasEntity() ? response.getEntity(String.class) : "Bad request");
} else {
_log.info("Unexpected response code {}.", status);
}
}
} catch (APIException e) {
throw e;
} catch (Exception e) {
_log.info("Exception connecting to {}. ", endpoint, e);
}
}
throw SecurityException.retryables.requiredServiceUnvailable(ServiceLocatorInfo.AUTH_SVC.getServiceName());
}
Aggregations