package net.whydah.admin.integration; import net.whydah.admin.auth.WhydahLogonToken; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.ws.rs.client.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedHashMap; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; //import org.jboss.resteasy.specimpl.MultivaluedMapImpl; /** * @author <a href="bard.lind@gmail.com">Bard Lind</a> */ public class CreateUserIntegrationTest { private static final Logger log = LoggerFactory.getLogger(CreateUserIntegrationTest.class); private static final String RESPONSE_TYPES = "application/xml"; private final Client c; private WebTarget target; // private final String SECURITY_TOKEN_SERVICE_URL= "http://ec2-54-77-145-230.eu-west-1.compute.amazonaws.com:9998/tokenservice"; private final String SECURITY_TOKEN_SERVICE_URL= "http://eunoask-dsk1061:9998/tokenservice"; private final String MEDIA_TYPE = "application/x-www-form-urlencoded"; public CreateUserIntegrationTest() { c = ClientBuilder.newClient(); } /** * Authorization info is found in: * https://github.com/altran/Whydah-UserIdentityBackend/blob/master/src/main/resources/prodInitData/users.csv * https://github.com/altran/Whydah-UserIdentityBackend/blob/master/src/main/resources/prodInitData/applications.csv * * @param args */ public static void main(String[] args) { CreateUserIntegrationTest userTest = new CreateUserIntegrationTest(); String logonResult = userTest.logonApplication(); log.info("Logon Application: {} ", logonResult ); WhydahLogonToken applicationToken = WhydahLogonToken.fromXml(logonResult); // FIXME get the tokenID :) //String applicationToken="d41d8cd98f00b204e9800998ecf8427e"; String userResult = userTest.logonUserAdmin(applicationToken.getApplicationtokenID()); log.info("Logon User {}", userResult); } public String logonApplication() { target = stsPath().path("/logon"); String applicationCredential = uasCredentialXml(); String body = "applicationcredential=" + encode(applicationCredential); Response response = target.request(MediaType.APPLICATION_XML).post(Entity.entity(body,MediaType.APPLICATION_FORM_URLENCODED)); String responseBody = readResponse("UserAdminService", response); return responseBody; } public String logonUserAdmin(String appTokenID) { // @Path("/{applicationtokenid}/usertoken") // public Response getUserToken(@PathParam("applicationtokenid") String applicationtokenid, // @FormParam("apptoken") String appTokenXml, // @FormParam("usercredential") String userCredentialXml) { target = stsPath().path("/token/"+appTokenID+"/usertoken"); MultivaluedMap<String, String> formData = new MultivaluedHashMap<>(); formData.add("apptoken", uasCredentialXml()); formData.add("usercredential", userAdminCredentialXml()); Response response = target.request(MediaType.APPLICATION_XML).post(Entity.entity(formData, MediaType.APPLICATION_FORM_URLENCODED)); String responseBody = readResponse("UserAdmin", response); return responseBody; } private String encode(String xml) { String encodedCredential = ""; try { encodedCredential = URLEncoder.encode(xml, "UTF-8"); } catch (UnsupportedEncodingException e) { log.info("Could not encode the xml to UTF-8: " + xml); throw new RuntimeException("Could not encode the xml to UTF-8: " + xml); } return encodedCredential; } private String uasCredentialXml() { return "<applicationcredential>\n" + " <params>\n" + " <applicationID>UserAdminService</applicationID>\n" + " <applicationSecret>9ju592A4t8dzz8mz7a5QQJ7Px</applicationSecret>\n" + " </params>\n" + " </applicationcredential>"; } private String userAdminCredentialXml() { return "<usercredential>\n" + " <params>\n" + " <username>bardl</username>\n" + " <password>Asker2014</password>\n" + " </params>\n" + "</usercredential>"; } /*private WebTarget uasPath() { return c.target(SECURITY_TOKEN_SERVICE_URL); } */ private WebTarget stsPath() { return c.target(SECURITY_TOKEN_SERVICE_URL); } private Invocation.Builder request() { return target.request(RESPONSE_TYPES); } private String readResponse(String ref, Response response) { String responseBody = response.readEntity(String.class); boolean success = handleResponseStatus(response, ref, responseBody); if (!success) { throw new RuntimeException("XML post failed. Reference: " + ref +"\n Response:[ " + responseBody +"]"); } return responseBody; } private boolean handleResponseStatus(Response response, String request, String responseBody) { switch(response.getStatusInfo().getFamily()) { case SUCCESSFUL: return true; case CLIENT_ERROR: case INFORMATIONAL: case OTHER: case REDIRECTION: case SERVER_ERROR: default: log.info("Request failed, Response-Status-Family {}, ResponseStatus={} {}, jsonRequest={}, ResponseEntity(body)={}", response.getStatusInfo().getFamily(),response.getStatus(), response.getStatusInfo().getReasonPhrase(), request, responseBody); } return false; } }