/*
* Copyright (c) 2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.auth.service.impl.resource;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.auth.impl.ImmutableAuthenticationProviders;
import com.emc.storageos.coordinator.client.service.CoordinatorClient;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.keystone.restapi.KeystoneRestClientFactory;
import com.emc.storageos.model.auth.AuthnProviderParamsToValidate;
/**
* resource to validate a Authentication provider by connecting
* to it and performing various operations. So far, just bind.
*/
@Path("/internal/authnProviderValidate")
public class AuthnProviderValidatorResource {
private CoordinatorClient coordinator;
private KeystoneRestClientFactory keystoneApiFactory = null;
private DbClient dbClient;
private static final Logger _log = LoggerFactory.
getLogger(AuthnProviderValidatorResource.class);
public void setCoordinator(CoordinatorClient coordinator) {
this.coordinator = coordinator;
}
public void setKeystoneFactory(KeystoneRestClientFactory factory) {
this.keystoneApiFactory = factory;
}
public void setDbClient(DbClient dbClient) {
this.dbClient = dbClient;
}
/**
*
* Validate if the basic parameters of a provider for connectivity
* are good. Returns 400 if not. 200 if yes.
*
* @param param has the connectivity parameters
* @return Response 400 or 200
*/
@POST
@Produces({ MediaType.TEXT_PLAIN, MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Response validateAuthenticationProvider(AuthnProviderParamsToValidate param) {
StringBuilder errorString = new StringBuilder();
if (!ImmutableAuthenticationProviders.checkProviderStatus(coordinator, param,
keystoneApiFactory, errorString, dbClient)) {
return Response.status(Status.BAD_REQUEST).entity(errorString.toString()).build();
}
return Response.status(Status.OK).build();
}
}