Search in sources :

Example 6 with AuthSvcInternalApiClientIterator

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());
}
Also used : ClientResponse(com.sun.jersey.api.client.ClientResponse) FatalSecurityException(com.emc.storageos.security.exceptions.FatalSecurityException) ServiceErrorRestRep(com.emc.storageos.model.errorhandling.ServiceErrorRestRep) APIException(com.emc.storageos.svcs.errorhandling.resources.APIException) AuthSvcInternalApiClientIterator(com.emc.storageos.security.authentication.AuthSvcInternalApiClientIterator) APIException(com.emc.storageos.svcs.errorhandling.resources.APIException) InternalServerErrorException(com.emc.storageos.svcs.errorhandling.resources.InternalServerErrorException) FatalSecurityException(com.emc.storageos.security.exceptions.FatalSecurityException) SecurityException(com.emc.storageos.security.exceptions.SecurityException) UnsupportedEncodingException(java.io.UnsupportedEncodingException)

Example 7 with AuthSvcInternalApiClientIterator

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;
}
Also used : ClientResponse(com.sun.jersey.api.client.ClientResponse) ServiceErrorRestRep(com.emc.storageos.model.errorhandling.ServiceErrorRestRep) AuthSvcInternalApiClientIterator(com.emc.storageos.security.authentication.AuthSvcInternalApiClientIterator) UnsupportedEncodingException(java.io.UnsupportedEncodingException) APIException(com.emc.storageos.svcs.errorhandling.resources.APIException) InternalServerErrorException(com.emc.storageos.svcs.errorhandling.resources.InternalServerErrorException) FatalSecurityException(com.emc.storageos.security.exceptions.FatalSecurityException) SecurityException(com.emc.storageos.security.exceptions.SecurityException) UnsupportedEncodingException(java.io.UnsupportedEncodingException)

Example 8 with AuthSvcInternalApiClientIterator

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;
}
Also used : ClientResponse(com.sun.jersey.api.client.ClientResponse) ServiceErrorRestRep(com.emc.storageos.model.errorhandling.ServiceErrorRestRep) AuthSvcInternalApiClientIterator(com.emc.storageos.security.authentication.AuthSvcInternalApiClientIterator) APIException(com.emc.storageos.svcs.errorhandling.resources.APIException) InternalServerErrorException(com.emc.storageos.svcs.errorhandling.resources.InternalServerErrorException) FatalSecurityException(com.emc.storageos.security.exceptions.FatalSecurityException) SecurityException(com.emc.storageos.security.exceptions.SecurityException) UnsupportedEncodingException(java.io.UnsupportedEncodingException)

Example 9 with AuthSvcInternalApiClientIterator

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());
}
Also used : ClientResponse(com.sun.jersey.api.client.ClientResponse) APIException(com.emc.storageos.svcs.errorhandling.resources.APIException) AuthSvcInternalApiClientIterator(com.emc.storageos.security.authentication.AuthSvcInternalApiClientIterator) APIException(com.emc.storageos.svcs.errorhandling.resources.APIException) InternalServerErrorException(com.emc.storageos.svcs.errorhandling.resources.InternalServerErrorException) FatalSecurityException(com.emc.storageos.security.exceptions.FatalSecurityException) SecurityException(com.emc.storageos.security.exceptions.SecurityException) UnsupportedEncodingException(java.io.UnsupportedEncodingException)

Aggregations

AuthSvcInternalApiClientIterator (com.emc.storageos.security.authentication.AuthSvcInternalApiClientIterator)9 ClientResponse (com.sun.jersey.api.client.ClientResponse)9 APIException (com.emc.storageos.svcs.errorhandling.resources.APIException)7 SecurityException (com.emc.storageos.security.exceptions.SecurityException)6 UnsupportedEncodingException (java.io.UnsupportedEncodingException)6 FatalSecurityException (com.emc.storageos.security.exceptions.FatalSecurityException)5 InternalServerErrorException (com.emc.storageos.svcs.errorhandling.resources.InternalServerErrorException)5 ServiceErrorRestRep (com.emc.storageos.model.errorhandling.ServiceErrorRestRep)4 CoordinatorException (com.emc.storageos.coordinator.exceptions.CoordinatorException)2 SysSvcEndPointLocator (com.emc.storageos.security.authentication.SysSvcEndPointLocator)1 BadRequestException (com.emc.storageos.svcs.errorhandling.resources.BadRequestException)1 Response (javax.ws.rs.core.Response)1