Search in sources :

Example 1 with ConnectionOpenResponse

use of com.openmeap.protocol.dto.ConnectionOpenResponse in project OpenMEAP by OpenMEAP.

the class RESTAppMgmtClient method connectionOpen.

public ConnectionOpenResponse connectionOpen(ConnectionOpenRequest request) throws WebServiceException {
    ConnectionOpenResponse response = null;
    Hashtable postData = new Hashtable();
    postData.put(UrlParamConstants.ACTION, "connection-open-request");
    postData.put(UrlParamConstants.DEVICE_UUID, request.getApplication().getInstallation().getUuid());
    postData.put(UrlParamConstants.APP_NAME, request.getApplication().getName());
    postData.put(UrlParamConstants.APP_VERSION, request.getApplication().getVersionId());
    postData.put(UrlParamConstants.APPARCH_HASH, StringUtils.orEmpty(request.getApplication().getHashValue()));
    postData.put(UrlParamConstants.SLIC_VERSION, request.getSlic().getVersionId());
    HttpResponse httpResponse = null;
    InputSource responseInputSource = null;
    String responseText = null;
    try {
        httpResponse = requester.postData(serviceUrl, postData);
        if (httpResponse.getStatusCode() != 200) {
            throw new WebServiceException(WebServiceException.TypeEnum.CLIENT, "Posting to the service resulted in a " + httpResponse.getStatusCode() + " status code");
        }
        responseText = Utils.readInputStream(httpResponse.getResponseBody(), "UTF-8");
    } catch (Exception e) {
        throw new WebServiceException(WebServiceException.TypeEnum.CLIENT, StringUtils.isEmpty(e.getMessage()) ? e.getMessage() : "There's a problem connecting. Check your network or try again later", e);
    }
    // now we parse the response into a ConnectionOpenResponse object
    if (responseText != null) {
        Result result = new Result();
        JSONObjectBuilder builder = new JSONObjectBuilder();
        try {
            result = (Result) builder.fromJSON(new JSONObject(responseText), result);
            if (result.getError() != null) {
                throw new WebServiceException(WebServiceException.TypeEnum.fromValue(result.getError().getCode().value()), result.getError().getMessage());
            }
        } catch (JSONException e) {
            throw new WebServiceException(WebServiceException.TypeEnum.CLIENT, "Unable to parse service response content.");
        }
        response = result.getConnectionOpenResponse();
    }
    return response;
}
Also used : InputSource(org.xml.sax.InputSource) JSONObjectBuilder(com.openmeap.json.JSONObjectBuilder) WebServiceException(com.openmeap.protocol.WebServiceException) JSONObject(com.openmeap.thirdparty.org.json.me.JSONObject) Hashtable(java.util.Hashtable) HttpResponse(com.openmeap.http.HttpResponse) JSONException(com.openmeap.thirdparty.org.json.me.JSONException) ConnectionOpenResponse(com.openmeap.protocol.dto.ConnectionOpenResponse) WebServiceException(com.openmeap.protocol.WebServiceException) IOException(java.io.IOException) HttpRequestException(com.openmeap.http.HttpRequestException) JSONException(com.openmeap.thirdparty.org.json.me.JSONException) Result(com.openmeap.protocol.dto.Result)

Example 2 with ConnectionOpenResponse

use of com.openmeap.protocol.dto.ConnectionOpenResponse in project OpenMEAP by OpenMEAP.

the class UpdateHandler method checkForUpdate.

public UpdateHeader checkForUpdate() throws WebServiceException {
    // we'll go ahead and flip the flag that we tried to update now
    // at the beginning of our intent
    config.setLastUpdateAttempt(new Long(new Date().getTime()));
    // put together the communication coordination request
    ConnectionOpenRequest request = getConnectionOpenRequest();
    ConnectionOpenResponse response = makeConnectionOpenRequest(request);
    // we'll use this from now till the next update
    config.setLastAuthToken(response.getAuthToken());
    return response.getUpdate();
}
Also used : ConnectionOpenRequest(com.openmeap.protocol.dto.ConnectionOpenRequest) ConnectionOpenResponse(com.openmeap.protocol.dto.ConnectionOpenResponse) Date(java.util.Date)

Example 3 with ConnectionOpenResponse

use of com.openmeap.protocol.dto.ConnectionOpenResponse in project OpenMEAP by OpenMEAP.

the class UpdateHandler method makeConnectionOpenRequest.

public ConnectionOpenResponse makeConnectionOpenRequest(ConnectionOpenRequest request) throws WebServiceException {
    // phone home
    ApplicationManagementService client = AppMgmtClientFactory.newDefault(config.getAppMgmtServiceUrl());
    ConnectionOpenResponse response = null;
    response = client.connectionOpen(request);
    return response;
}
Also used : ConnectionOpenResponse(com.openmeap.protocol.dto.ConnectionOpenResponse) ApplicationManagementService(com.openmeap.protocol.ApplicationManagementService)

Example 4 with ConnectionOpenResponse

use of com.openmeap.protocol.dto.ConnectionOpenResponse in project OpenMEAP by OpenMEAP.

the class AppMgmtClientTest method testRESTOpenConnection.

public void testRESTOpenConnection() throws Exception {
    AppMgmtClientFactory.setDefaultType(RESTAppMgmtClient.class);
    String[] templates = { "xml/connectionResponse-rest-update.json", "xml/connectionResponse-rest-noupdate.json", "xml/connectionResponse.404.text" };
    HttpRequestExecuterFactory.setDefaultType(MockHttpRequestExecuter.class);
    ApplicationManagementService client = AppMgmtClientFactory.newDefault("/nowhere/");
    ConnectionOpenRequest request = new ConnectionOpenRequest();
    request.setApplication(new Application());
    request.getApplication().setInstallation(new ApplicationInstallation());
    request.setSlic(new SLIC());
    // setup the response xml that we'll spoof as though it's from the server
    Hashtable parms = new Hashtable();
    parms.put("AUTH_TOKEN", "auth_token");
    parms.put("UPDATE_TYPE", "required");
    parms.put("UPDATE_URL", "file://none");
    parms.put("STORAGE_NEEDS", String.valueOf(15));
    parms.put("INSTALL_NEEDS", String.valueOf(15));
    parms.put("HASH", "asdf");
    parms.put("HASH_ALG", "MD5");
    parms.put("VERSION_ID", "versionId");
    InputStream inputStream = AppMgmtClientTest.class.getResourceAsStream(templates[0]);
    MockHttpRequestExecuter.setResponseText(Utils.replaceFields(parms, Utils.readInputStream(inputStream, "UTF-8")));
    // setup our request
    SLIC slic = request.getSlic();
    slic.setVersionId("slicVersion");
    Application app = request.getApplication();
    app.setName("appName");
    app.setVersionId("appVersionId");
    ApplicationInstallation appInst = request.getApplication().getInstallation();
    appInst.setUuid("appInstUuid");
    //////////////
    // Verify that a well-formed request will result in a correctly formed response object
    ConnectionOpenResponse response = client.connectionOpen(request);
    Assert.assertTrue(response.getAuthToken().equals("auth_token"));
    Assert.assertTrue(response.getUpdate().getUpdateUrl().equals("file://none"));
    Assert.assertTrue(response.getUpdate().getInstallNeeds().equals(Long.valueOf(16)));
    Assert.assertTrue(response.getUpdate().getStorageNeeds().equals(Long.valueOf(15)));
    Assert.assertTrue(response.getUpdate().getVersionIdentifier().equals("versionId"));
    Assert.assertTrue(response.getUpdate().getHash().getValue().equals("asdf"));
    Assert.assertTrue(response.getUpdate().getHash().getAlgorithm().equals(HashAlgorithm.MD5));
    //////////////
    // Verify that the xml, sans the update header, will generate a response with no update
    MockHttpRequestExecuter.setResponseText(Utils.replaceFields(parms, Utils.readInputStream(AppMgmtClientTest.class.getResourceAsStream(templates[1]), "UTF-8")));
    response = client.connectionOpen(request);
    Assert.assertTrue(response.getAuthToken().equals("auth_token"));
    Assert.assertTrue(response.getUpdate() == null);
    //////////////
    // Verify that a non-200 will result in a WebServiceException
    Boolean thrown = Boolean.FALSE;
    Exception e = null;
    // 304 is not 200
    MockHttpRequestExecuter.setResponseCode(304);
    try {
        response = client.connectionOpen(request);
    } catch (Exception wse) {
        e = wse;
        thrown = Boolean.TRUE;
    }
    Assert.assertTrue(thrown.booleanValue() && e instanceof WebServiceException);
    //////////////
    // Verify that invalid response content will throw an exception
    thrown = Boolean.FALSE;
    e = null;
    MockHttpRequestExecuter.setResponseText(Utils.replaceFields(parms, Utils.readInputStream(AppMgmtClientTest.class.getResourceAsStream(templates[2]), "UTF-8")));
    MockHttpRequestExecuter.setResponseCode(200);
    try {
        response = client.connectionOpen(request);
    } catch (Exception wse) {
        e = wse;
        thrown = Boolean.TRUE;
    }
    Assert.assertTrue(thrown.booleanValue() && e instanceof WebServiceException);
}
Also used : WebServiceException(com.openmeap.protocol.WebServiceException) Hashtable(java.util.Hashtable) InputStream(java.io.InputStream) ConnectionOpenRequest(com.openmeap.protocol.dto.ConnectionOpenRequest) WebServiceException(com.openmeap.protocol.WebServiceException) SLIC(com.openmeap.protocol.dto.SLIC) ApplicationInstallation(com.openmeap.protocol.dto.ApplicationInstallation) ConnectionOpenResponse(com.openmeap.protocol.dto.ConnectionOpenResponse) ApplicationManagementService(com.openmeap.protocol.ApplicationManagementService) Application(com.openmeap.protocol.dto.Application)

Example 5 with ConnectionOpenResponse

use of com.openmeap.protocol.dto.ConnectionOpenResponse in project OpenMEAP by OpenMEAP.

the class JsCoreImplHelperTest method testToJSON.

public void testToJSON() {
    ConnectionOpenResponse cor = new ConnectionOpenResponse();
    cor.setAuthToken("auth-token");
    cor.setUpdate(new UpdateHeader());
    UpdateHeader update = cor.getUpdate();
    update.setHash(new Hash());
    update.getHash().setValue("value");
    update.getHash().setAlgorithm(HashAlgorithm.MD5);
    update.setInstallNeeds(1000L);
    update.setStorageNeeds(2000L);
    update.setUpdateUrl("update-url");
    update.setVersionIdentifier("version-identifier");
}
Also used : UpdateHeader(com.openmeap.protocol.dto.UpdateHeader) ConnectionOpenResponse(com.openmeap.protocol.dto.ConnectionOpenResponse) Hash(com.openmeap.protocol.dto.Hash)

Aggregations

ConnectionOpenResponse (com.openmeap.protocol.dto.ConnectionOpenResponse)7 ApplicationManagementService (com.openmeap.protocol.ApplicationManagementService)3 WebServiceException (com.openmeap.protocol.WebServiceException)3 ConnectionOpenRequest (com.openmeap.protocol.dto.ConnectionOpenRequest)3 Hash (com.openmeap.protocol.dto.Hash)2 Result (com.openmeap.protocol.dto.Result)2 UpdateHeader (com.openmeap.protocol.dto.UpdateHeader)2 Hashtable (java.util.Hashtable)2 DigestException (com.openmeap.digest.DigestException)1 HttpRequestException (com.openmeap.http.HttpRequestException)1 HttpResponse (com.openmeap.http.HttpResponse)1 JSONObjectBuilder (com.openmeap.json.JSONObjectBuilder)1 Application (com.openmeap.model.dto.Application)1 ApplicationArchive (com.openmeap.model.dto.ApplicationArchive)1 Deployment (com.openmeap.model.dto.Deployment)1 GlobalSettings (com.openmeap.model.dto.GlobalSettings)1 Application (com.openmeap.protocol.dto.Application)1 ApplicationInstallation (com.openmeap.protocol.dto.ApplicationInstallation)1 Error (com.openmeap.protocol.dto.Error)1 SLIC (com.openmeap.protocol.dto.SLIC)1