package org.simbasecurity.dwclient.gateway.resources.users; import java.util.List; import javax.inject.Inject; import javax.inject.Named; import javax.ws.rs.core.Cookie; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import org.simbasecurity.common.constants.AuthenticationConstants; import org.simbasecurity.dwclient.gateway.representations.SimbaUserR; import org.simbasecurity.dwclient.gateway.resources.AbstractSimbaService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.collect.FluentIterable; import com.google.common.collect.Lists; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; public class SimbaUserService extends AbstractSimbaService { private Logger logger = LoggerFactory.getLogger(getClass()); @Inject public SimbaUserService(@Named("simbaManagerWebResource") WebResource resource) { super(resource); } public SimbaUserR findUserByName(String ssoToken, String username) { ClientResponse clientResponse = getSimbaResource() .path("user") .path("findAll") .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) .cookie(new Cookie(AuthenticationConstants.SIMBA_SSO_TOKEN, ssoToken)) .get(ClientResponse.class); handleError("findUser", username, clientResponse, logger); List<SimbaUserR> users = Lists.newArrayList(clientResponse.getEntity(SimbaUserR[].class)); Optional<SimbaUserR> result = FluentIterable.from(users).firstMatch(withName(username)); if (!result.isPresent()) { throw new IllegalArgumentException(String.format("No user found for name %s.", username)); } else { return result.get(); } } private Predicate<SimbaUserR> withName(final String username) { return new Predicate<SimbaUserR>() { @Override public boolean apply(SimbaUserR user) { return username.equals(user.getUserName()); } }; } }