few changes invoker util to support file downloading

4.x.x
ayyoob 9 years ago
parent c6fbc8f1fe
commit b99d10e075

@ -28,7 +28,6 @@ var devicemgtProps = require('/app/conf/devicemgt-props.js').config();
var userModule = require("/app/modules/user.js").userModule; var userModule = require("/app/modules/user.js").userModule;
var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker; var serviceInvokers = require("/app/modules/backend-service-invoker.js").backendServiceInvoker;
var CarbonUtils = Packages.org.wso2.carbon.utils.CarbonUtils;
var user = session.get(constants.USER_SESSION_KEY); var user = session.get(constants.USER_SESSION_KEY);
var result; var result;
@ -38,107 +37,37 @@ if (!user) {
response.sendRedirect("/devicemgt/login?#login-required"); response.sendRedirect("/devicemgt/login?#login-required");
exit(); exit();
} else { } else {
if (uriMatcher.match("/{context}/api/devices/sketch/download/{downloadId}")) { if (uriMatcher.match("/{context}/api/devices/sketch/download")) {
downloadId = uriMatcher.elements().downloadId; // works as a proxy to pass the relavant query string to back end api.
//Just download the already created zip archive var queryString = request.getQueryString();
var sketchFolder = "repository/resources/sketches"; if (!queryString) {
var archivesPath = "file://" + CarbonUtils.getCarbonHome() + "/" + sketchFolder + "/archives/" + queryString = "";
downloadId + ".zip";
var zipFile = new File(archivesPath);
response.addHeader('Content-type', "application/zip, application/octet-stream");
response.addHeader('Cache-Control', 'public,max-age=12960000');
response.addHeader("Content-Disposition", "attachment; filename=\"" + downloadId + ".zip\"");
try {
zipFile.open('r');
var stream = zipFile.getStream();
print(stream);
} catch (err) {
} finally {
if (zipFile != null) {
zipFile.close();
}
}
} else if (uriMatcher.match("/{context}/api/devices/sketch/download")) {
//Create a new zip archive and register user calling endpoint
/* This should match with $CARBON_HOME/repository/resources/sketches/{sketchType} */
sketchType = request.getParameter("sketchType");
/* This should be registered device type of the CDMF(Connected Device Management Framework) */
deviceType = request.getParameter("deviceType");
deviceName = request.getParameter("deviceName");
if (!sketchType) {
log.error("Sketch Type is empty!");
// HTTP status code 400 refers to - Bad request.
result = 400;
} else { } else {
/** queryString = "?" + queryString;
URL: {serverURL}/{deviceType}/{downloadAgentUri}?owner={username}&deviceName={deviceName}
{serverURL} - devicemgt/app/conf/config.json
{deviceType} - from the request
{downloadAgentUri} - device_type_specific_unit/private/conf/device-type.json
{username} - from request
{deviceName} - from request
**/
var sketchDownloadEndPoint = devicemgtProps["httpsURL"] + "/" + deviceType + "/devices/download";
deviceTypeConfig = utility.getDeviceTypeConfig(deviceType);
if (deviceTypeConfig && deviceTypeConfig.deviceType.downloadAgentUri) {
sketchDownloadEndPoint = deviceTypeConfig.deviceType.downloadAgentUri;
}
var tokenPair = session.get(constants.ACCESS_TOKEN_PAIR_IDENTIFIER);
if (tokenPair) {
response.addHeader(constants.AUTHORIZATION_HEADER, constants.BEARER_PREFIX + tokenPair.accessToken);
response.sendRedirect(sketchDownloadEndPoint + "?sketchType=" + sketchType + "&deviceName="
+ deviceName);
} else {
response.sendRedirect(devicemgtProps["httpsURL"] + "/devicemgt/login");
exit();
}
} }
var deviceType = request.getParameter("deviceType"); // need a better solution here
} else if (uriMatcher.match("/{context}/api/devices/sketch/generate_link")) { deviceTypeConfig = utility.getDeviceTypeConfig(deviceType);
if (deviceTypeConfig && deviceTypeConfig.deviceType.downloadAgentUri) {
var contents = request.getContent(); sketchDownloadEndPoint = devicemgtProps["httpsURL"] + "/" + deviceTypeConfig.deviceType.downloadAgentUri;
sketchType = contents.sketchType; serviceInvokers.HttpClient.get(sketchDownloadEndPoint + queryString, function (responsePayload, responseHeaders) {
deviceType = contents.deviceType; for (var i = 0; i < responseHeaders.length; i++) {
deviceName = contents.deviceName; var header = responseHeaders[i]
generateLink = contents.generateLink; var headerName = String(header.getName());
var headerValue = String(header.getValue());
if (!sketchType) { response.addHeader(headerName, headerValue);
log.error("Sketch Type is empty!"); }
// HTTP status code 400 refers to - Bad request. var streamObject = new Stream(responsePayload);
result = 400; print(streamObject);
}, function (responsePayload) {
log.error(responsePayload)
var response = {};
response["status"] = "error";
return response;
}
);
} else { } else {
result = 400;
/**
URL: {serverURL}/{deviceType}/{downloadAgentUri}?owner={username}&deviceName={deviceName}
{serverURL} - devicemgt/app/conf/config.json
{deviceType} - from the request
{downloadAgentUri} - device_type_specific_unit/private/conf/device-type.json
{username} - from request
{deviceName} - from request
**/
deviceManagerService = devicemgtProps["httpsURL"] + "/" + deviceType + "_mgt" + "/manager";
sketchGenerateLinkEndPoint = deviceManagerService + "/device/" + sketchType + "/generate_link";
var deviceTypeConfig = utility.getDeviceTypeConfig(deviceType);
//replace download endpoint
if (deviceTypeConfig && deviceTypeConfig.deviceType.downloadAgentLinkGenUri) {
sketchGenerateLinkEndPoint = devicemgtProps["httpsURL"] + "/" + deviceType + "_mgt" +
"/" + deviceTypeConfig.deviceType.downloadAgentLinkGenUri;
}
var fileId = get(sketchGenerateLinkEndPoint + "?owner=" + user.username + "&deviceName=" +
deviceName, null, "text");
result = "curl -k " + devicemgtProps["httpsURL"] + constants.WEB_APP_CONTEXT +
"/api/devices/sketch/download/" + fileId.data;
} }
} else if (uriMatcher.match("/{context}/api/devices/all")) { } else if (uriMatcher.match("/{context}/api/devices/all")) {
result = deviceModule.getOwnDevices(); result = deviceModule.getOwnDevices();

@ -162,21 +162,28 @@ var backendServiceInvoker = function () {
} }
} }
var stringRequestEntity = new StringRequestEntity(stringify(payload)); if (payload) {
httpMethodObject.setRequestEntity(stringRequestEntity); var stringRequestEntity = new StringRequestEntity(stringify(payload));
httpMethodObject.setRequestEntity(stringRequestEntity);
}
var client = new HttpClient(); var client = new HttpClient();
try { try {
client.executeMethod(httpMethodObject); client.executeMethod(httpMethodObject);
var status = httpMethodObject.getStatusCode(); var status = httpMethodObject.getStatusCode();
if (status == 200) { if (status == 200) {
return successCallback(httpMethodObject.getResponseBody()); var responseContentTypeHeader = httpMethodObject.getResponseHeader(constants.CONTENT_TYPE_IDENTIFIER);
if (responseContentTypeHeader && responseContentTypeHeader.getValue() == constants.APPLICATION_ZIP) {
return successCallback(httpMethodObject.getResponseBodyAsStream(), httpMethodObject.getResponseHeaders());
} else {
return successCallback(httpMethodObject.getResponseBody());
}
} else { } else {
return errorCallback(httpMethodObject.getResponseBody()); return errorCallback(httpMethodObject.getResponseBody());
} }
} catch (e) { } catch (e) {
return errorCallback(response); return errorCallback(response);
} finally { } finally {
method.releaseConnection(); httpMethodObject.releaseConnection();
} }
}; };

@ -62,6 +62,7 @@ var ACCESS_TOKEN_PAIR_IDENTIFIER = "accessTokenPair";
var ENCODED_CLIENT_KEYS_IDENTIFIER = "encodedClientKey"; var ENCODED_CLIENT_KEYS_IDENTIFIER = "encodedClientKey";
var CONTENT_TYPE_IDENTIFIER = "Content-Type"; var CONTENT_TYPE_IDENTIFIER = "Content-Type";
var APPLICATION_JSON = "application/json"; var APPLICATION_JSON = "application/json";
var APPLICATION_ZIP = "application/zip";
var ACCEPT_IDENTIFIER = "Accept"; var ACCEPT_IDENTIFIER = "Accept";
var AUTHORIZATION_HEADER= "Authorization"; var AUTHORIZATION_HEADER= "Authorization";
var BEARER_PREFIX = "Bearer "; var BEARER_PREFIX = "Bearer ";

Loading…
Cancel
Save