adding old jaggery app

application-manager-new
Rasika Perera 9 years ago
parent 8d5451c589
commit bfab890abd

@ -33,44 +33,15 @@ var carbonHttpsServletTransport = carbon.server.address('https');
var result; var result;
if (uriMatcher.match("/{context}/api/device/sketch/download/{downloadId}")) { if (uriMatcher.match("/{context}/api/device/sketch/download")) {
downloadId = uriMatcher.elements().downloadId;
//Just download the already created zip archive
var CarbonUtils = Packages.org.wso2.carbon.utils.CarbonUtils;
var sketchFolder = "repository/resources/sketches";
var archivesPath = "file://"+CarbonUtils.getCarbonHome() + "/" + sketchFolder + "/archives/" + 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/device/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"); sketchType = request.getParameter("sketchType");
/* This should be registered device type of the CDMF(Connected Device Management Framework) */
deviceType = request.getParameter("deviceType"); deviceType = request.getParameter("deviceType");
if (!sketchType) { if (!sketchType) {
log.error("Sketch Type is empty!"); log.error("Sketch Type is empty");
// http status code 400 refers to - Bad request. }
result = 400;
} else {
var user = session.get(constants.USER_SESSION_KEY);
var user = session.get(constants.USER_SESSION_KEY);
if (!user) { if (!user) {
response.sendRedirect(dcProps.appContext + "login?#login-required"); response.sendRedirect(dcProps.appContext + "login?#login-required");
exit(); exit();
@ -78,40 +49,11 @@ if (uriMatcher.match("/{context}/api/device/sketch/download/{downloadId}")) {
//URL: https://localhost:9443/{deviceType}/download?owner={username} //URL: https://localhost:9443/{deviceType}/download?owner={username}
deviceManagerService = carbonHttpsServletTransport + "/" + deviceType + "/manager"; deviceManagerService = carbonHttpsServletTransport + "/" + deviceType + "/manager";
sketchDownloadEndPoint = deviceManagerService + "/device/" + sketchType + "/download"; sketchDownloadEndPoint = deviceManagerService + "/device/" + sketchType + "/download";
response.sendRedirect(sketchDownloadEndPoint + "?owner=" + user.username); response.sendRedirect(sketchDownloadEndPoint + "?owner=" + user.username);
exit();//stop execution exit();//stop execution
}
} else if (uriMatcher.match("/{context}/api/device/sketch/generate_link")) {
var contents = request.getContent();
sketchType = contents.sketchType;
deviceType = contents.deviceType;
generateLink = contents.generateLink;
if (!sketchType) {
log.error("Sketch Type is empty!");
// http status code 400 refers to - Bad request.
result = 400;
} else {
var user = session.get(constants.USER_SESSION_KEY);
if (!user) {
result = 403;
}else {
//URL: https://localhost:9443/{deviceType}/download?owner={username}
deviceManagerService = carbonHttpsServletTransport + "/" + deviceType + "/manager";
sketchGenerateLinkEndPoint = deviceManagerService + "/device/" + sketchType + "/generate_link";
var fileId = get(sketchGenerateLinkEndPoint + "?owner=" + user.username, null, "text");
result = carbonHttpsServletTransport + constants.WEB_APP_CONTEXT + "/api/device/sketch/download/" + fileId.data;
}
}
} else if (uriMatcher.match("/{context}/api/devices/all")) { } else if (uriMatcher.match("/{context}/api/devices/all")) {
var user = session.get(constants.USER_SESSION_KEY); var user = session.get(constants.USER_SESSION_KEY);
if (!user) { if (!user) {
response.sendRedirect(dcProps.appContext + "login?#login-required"); response.sendRedirect(dcProps.appContext + "login?#login-required");
@ -124,12 +66,7 @@ if (uriMatcher.match("/{context}/api/device/sketch/download/{downloadId}")) {
var data = {}; var data = {};
//XMLHTTPRequest's GET //XMLHTTPRequest's GET
try {
result = get(listAllDevicesEndPoint, data, "json"); result = get(listAllDevicesEndPoint, data, "json");
}catch(err){
log.error("Error occured while retrieveing all devices with username: "+user.username);
result=[];
}
} else if (uriMatcher.match("/{context}/api/devices/types")) { } else if (uriMatcher.match("/{context}/api/devices/types")) {

@ -1,31 +0,0 @@
<%
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
var uri = request.getRequestURI();
var uriMatcher = new URIMatcher(String(uri));
var log = new Log("api/operation-api.jag");
var deviceModule = require("/modules/device.js").deviceModule;
if (uriMatcher.match("/{context}/api/operation")) {
payload = request.getContent();
result = deviceModule.performOperation(payload.devices, payload.operation);
}
%>

@ -1,49 +0,0 @@
<%
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
var uri = request.getRequestURI();
var uriMatcher = new URIMatcher(String(uri));
var log = new Log("api/policy-api.jag");
var constants = require("/modules/constants.js");
var dcProps = require('/config/dc-props.js').config();
var policyModule = require("/modules/policy.js").policyModule;
var result;
if (uriMatcher.match("/{context}/api/policies/update")) {
payload = request.getContent();
policyModule.updatePolicyPriorities(payload);
} else if (uriMatcher.match("/{context}/api/policies/{id}/delete")) {
elements = uriMatcher.elements();
policyId = elements.id;
try {
result = policyModule.deletePolicy(policyId);
} catch (e) {
log.error("Exception occurred while trying to delete policy for id:" + policyId, e);
// http status code 500 refers to - Internal Server Error.
result = 500;
}
}
// returning the result.
if (result) {
response.content = result;
}
%>

@ -75,7 +75,6 @@ if (result) {
function getFireAlarmData(user, deviceId, from, to){ function getFireAlarmData(user, deviceId, from, to){
result = new Object(); result = new Object();
result['cpuTemperatureData'] = getSensorData("DEVICE_CPU_TEMPERATURE_SUMMARY", "TEMPERATURE", user, deviceId, from, to);
result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to); result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to);
result['fanData'] = getSensorData("DEVICE_FAN_USAGE_SUMMARY","status",user, deviceId, from, to); result['fanData'] = getSensorData("DEVICE_FAN_USAGE_SUMMARY","status",user, deviceId, from, to);
result['bulbData'] = getSensorData("DEVICE_BULB_USAGE_SUMMARY","status",user, deviceId, from, to); result['bulbData'] = getSensorData("DEVICE_BULB_USAGE_SUMMARY","status",user, deviceId, from, to);
@ -97,6 +96,14 @@ function getArduinoData(user, deviceId, from, to) {
return result; return result;
} }
function getDigitalDisplayData(user, deviceId, from, to){
result = new Object();
result['ramData'] = getSensorData("RAM_USAGE_SUMMARY","motion",user, deviceId, from, to);
result['cpuData'] = getSensorData("CPU_LOAD_SUMMARY","light",user, deviceId, from, to);
result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to);
return result;
}
function getAndroidSenseData(user, deviceId, from, to){ function getAndroidSenseData(user, deviceId, from, to){
result = new Object(); result = new Object();
result['ramData'] = getSensorData("RAM_USAGE_SUMMARY","motion",user, deviceId, from, to); result['ramData'] = getSensorData("RAM_USAGE_SUMMARY","motion",user, deviceId, from, to);
@ -110,7 +117,7 @@ function getDigitalDisplayData(user, deviceId, from, to) {
result = new Object(); result = new Object();
result['ramData'] = getSensorData("RAM_USAGE_SUMMARY","motion",user, deviceId, from, to); result['ramData'] = getSensorData("RAM_USAGE_SUMMARY","motion",user, deviceId, from, to);
result['cpuData'] = getSensorData("CPU_LOAD_SUMMARY","light",user, deviceId, from, to); result['cpuData'] = getSensorData("CPU_LOAD_SUMMARY","light",user, deviceId, from, to);
result['cpuTemperatureData'] = getSensorData("DEVICE_CPU_TEMPERATURE_SUMMARY", "TEMPERATURE", user, deviceId, from, to); result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to);
return result; return result;
} }
@ -121,7 +128,7 @@ function getSensorData(table, column, user, deviceId, from, to) {
try { try {
fetchedData = statsClient.getDeviceStats(table, column, user, deviceId, from, to); fetchedData = statsClient.getDeviceStats(table, column, user, deviceId, from, to);
}catch(error){ }catch(error){
log.error(error); log.info(error);
} }
var sensorData = []; var sensorData = [];

@ -25,9 +25,7 @@ var log = new Log("api/user-api.jag");
var constants = require("/modules/constants.js"); var constants = require("/modules/constants.js");
var dcProps = require('/config/dc-props.js').config(); var dcProps = require('/config/dc-props.js').config();
var userModule = require("/modules/user.js").userModule; var userModule = require("/modules/user.js").userModule;
var deviceModule = require("/modules/device.js").deviceModule;
var utility = require("/modules/utility.js").utility; var utility = require("/modules/utility.js").utility;
var deviceManagementService = utility.getDeviceManagementService();
var result; var result;
@ -42,15 +40,7 @@ if (uriMatcher.match("/{context}/api/user/login/")) {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("User Logged In : " + user); log.debug("User Logged In : " + user);
} }
var hasDevcies = (deviceManagementService.getDevicesOfUser(username).size() >= 1);
if(hasDevcies){
response.sendRedirect(constants.WEB_APP_CONTEXT+"/devices");
}else{
response.sendRedirect(constants.WEB_APP_CONTEXT); response.sendRedirect(constants.WEB_APP_CONTEXT);
}
}, function () { }, function () {
response.sendRedirect(dcProps.appContext + "login?#auth-failed"); response.sendRedirect(dcProps.appContext + "login?#auth-failed");
}); });
@ -79,7 +69,7 @@ if (uriMatcher.match("/{context}/api/user/login/")) {
} else { } else {
userRoles = String(addUserFormData.userRoles).split(","); userRoles = String(addUserFormData.userRoles).split(",");
} }
userRoles="deviceRole, deviceUser"
try { try {
result = userModule.registerUser(username, firstname, lastname, emailAddress, password, result = userModule.registerUser(username, firstname, lastname, emailAddress, password,
userRoles); userRoles);

@ -3,10 +3,6 @@
"logLevel": "info", "logLevel": "info",
"initScripts": ["/config/init.js"], "initScripts": ["/config/init.js"],
"urlMappings": [ "urlMappings": [
{
"url" : "/testb/*",
"path" : "test.jag"
},
{ {
"url" : "/test/*", "url" : "/test/*",
"path" : "test/testExecutor.jag" "path" : "test/testExecutor.jag"
@ -19,10 +15,6 @@
"url": "/api/devices/*", "url": "/api/devices/*",
"path": "/api/device-api.jag" "path": "/api/device-api.jag"
}, },
{
"url": "/api/operation/*",
"path": "/api/operation-api.jag"
},
{ {
"url": "/api/user/*", "url": "/api/user/*",
"path": "/api/user-api.jag" "path": "/api/user-api.jag"
@ -35,10 +27,6 @@
"url": "/api/stats/*", "url": "/api/stats/*",
"path": "/api/stats-api.jag" "path": "/api/stats-api.jag"
}, },
{
"url": "/api/policies/*",
"path": "/api/policy-api.jag"
},
{ {
"url": "/sso/login", "url": "/sso/login",
"path": "/lib/login.jag" "path": "/lib/login.jag"

@ -1,44 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{{ defineZone "title"}}</title>
{{ defineZone "topCss"}}
</head>
<body>
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container-liquid">
<div class="navbar-header">
<a class="navbar-brand" href="#">{{defineZone "brand"}}</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li><a href="/login">Login</a></li>
{{ defineZone "upperRight"}}
</ul>
</div>
</div>
</div>
<div id="wrap">
<div class="container-fluid">
<div class="row">
{{ defineZone "content"}}
</div>
</div>
<!-- /container -->
</div>
<div class="footer">
<div class="container">
<div class="row">
<div class="col-md-12">
{{ defineZone "footer"}}
</div>
</div>
</div>
</div>
</body>
</html>

@ -1,15 +1,14 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="icon" href="favicon.png" type="image/x-icon" /> <meta name="viewport" content="width=device-width, initial-scale=1">
{{defineZone "favicon"}} <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<title> <title>{{ defineZone "title"}}</title>
{{ defineZone "title"}}
</title>
{{ defineZone "topLibCss"}} {{ defineZone "topLibCss"}}
{{ defineZone "topCss"}} {{ defineZone "topCss"}}
{{ defineZone "topJs"}}
</head> </head>
<body> <body>
<div class="wr-modalpopup"> <div class="wr-modalpopup">
@ -33,7 +32,6 @@
{{ defineZone "body"}} {{ defineZone "body"}}
{{ defineZone "footer"}} {{ defineZone "footer"}}
</div> </div>
{{ defineZone "bottomjquery" }}
{{ defineZone "bottomLibJs" }} {{ defineZone "bottomLibJs" }}
{{ defineZone "bottomJs" }} {{ defineZone "bottomJs" }}
</body> </body>

@ -22,8 +22,6 @@ var sso = require('/modules/sso.js').sso;
var constants = require('/modules/constants.js'); var constants = require('/modules/constants.js');
var carbonModule = require("carbon"); var carbonModule = require("carbon");
var log = new Log(); var log = new Log();
var apiWrapperUtil = require("/modules/api-wrapper-util.js").apiWrapperUtil;
var userModule = require("/modules/user.js").userModule;
var keyStoreParams = { var keyStoreParams = {
keyStoreName: dataConfig.ssoConfiguration.keyStoreName, keyStoreName: dataConfig.ssoConfiguration.keyStoreName,
keyStorePassword: dataConfig.ssoConfiguration.keyStorePassword, keyStorePassword: dataConfig.ssoConfiguration.keyStorePassword,
@ -33,18 +31,14 @@ sso.configure(dataConfig.ssoConfiguration.issuer,
dataConfig.ssoConfiguration.appName, dataConfig.ssoConfiguration.appName,
keyStoreParams, dataConfig.ssoConfiguration.identityProviderURL); keyStoreParams, dataConfig.ssoConfiguration.identityProviderURL);
sso.acs( sso.acs(
function(loggedInUser, samlResponse) { function(loggedInUser) {
var carbonUser = carbonModule.server.tenantUser(loggedInUser); var carbonUser = carbonModule.server.tenantUser(loggedInUser);
session.put(constants.USER_SESSION_KEY, carbonUser); session.put(constants.USER_SESSION_KEY, carbonUser);
var username = carbonUser.username; var username = carbonUser.username;
if(log.isDebugEnabled()){ if(log.isDebugEnabled()){
log.debug("User logged in: "+username); log.debug("User logged in: "+username);
} }
var permissions = userModule.getUIPermissions(); response.sendRedirect(dataConfig.appContext);
if (permissions.DASHBOARD_VIEW){
apiWrapperUtil.setupAccessTokenPair("saml", samlResponse);
response.sendRedirect(dataConfig.appContext + "/device-mgt");
}
}, function() { }, function() {
if(log.isDebugEnabled()){ if(log.isDebugEnabled()){
log.debug("User logged out"); log.debug("User logged out");

@ -82,8 +82,41 @@ var route;
}; };
var renderStatic = function (unit, path) { var renderStatic = function (unit, path) {
log.debug('[' + requestId + '] for unit "' + unit + '" a request received for a static file "' + path + '"'); var unitModel = null;
var staticFile = fuse.getFile(unit, 'public' + path); var unitName = "";
var parts = (unit + path).split("/");
//'unitName' name can be "unitA" or "categoryA/unitA" or "categoryA/categoryAb/unitB"...etc
//incrementally trying to resolve a unit using url path parts.
for (var i = 0; i < parts.length; i++) {
if (unitName == "") {
unitName = parts[i];
} else {
unitName += "/" + parts[i];
}
try {
var model = fuse.getUnitDefinition(unitName);
if (model) {
unitModel = {
name: model.name,
path: parts.splice(i + 1).join("/")
};
break;
}
} catch (err) {
//unit not found, ignore error
}
}
if (unitModel == null) {
log.error("unit `"+unit+"` not found!");
return false;
}
var staticFile = fuse.getFile(unitModel.name, 'public' + "/" + unitModel.path);
if (staticFile.isExists() && !staticFile.isDirectory()) { if (staticFile.isExists() && !staticFile.isDirectory()) {
response.addHeader('Content-type', getMime(path)); response.addHeader('Content-type', getMime(path));
response.addHeader('Cache-Control', 'public,max-age=12960000'); response.addHeader('Cache-Control', 'public,max-age=12960000');

@ -1,4 +1,5 @@
<% <%
var getPath = File.prototype.getPath; var getPath = File.prototype.getPath;
File.prototype.getPath = function() { File.prototype.getPath = function() {
var path = getPath.call(this); var path = getPath.call(this);
@ -10,7 +11,7 @@ File.prototype.getPath = function() {
var fuseState = { var fuseState = {
zones: {}, zones: {},
appName: '', appName: '',
currentZone: [], //TODO: rename to zone Stack zoneStack: [],
currentUnit: null currentUnit: null
}; };

@ -15,6 +15,7 @@ var getHbsFile, getFile, toRelativePath, cleanupAncestors,
for (var i = 0; i < definitions.length; i++) { for (var i = 0; i < definitions.length; i++) {
var definition = definitions[i]; var definition = definitions[i];
lookUpTable[definition.name] = i; lookUpTable[definition.name] = i;
//log.info("initLookUp()"+definition.name+"<-"+i);
} }
} }
}; };
@ -45,6 +46,7 @@ var getHbsFile, getFile, toRelativePath, cleanupAncestors,
}; };
var getAncestorModels = function (unit) { var getAncestorModels = function (unit) {
//log.info('[' + requestId + '] getAncestorModels()'+unit);
var unitModel = getUnitDefinition(unit); var unitModel = getUnitDefinition(unit);
var ancestors = [unitModel]; var ancestors = [unitModel];
var parentName; var parentName;
@ -148,11 +150,12 @@ var getHbsFile, getFile, toRelativePath, cleanupAncestors,
}; };
getUnitDefinition = function (unit) { getUnitDefinition = function (unit) {
//log.info('[' + requestId + '] getUnitDefinition()'+unit);
var definitions = getUnitDefinitions(); var definitions = getUnitDefinitions();
initLookUp(definitions); initLookUp(definitions);
//log.info('[' + requestId + '] lookUpTable[unit]:'+unit);
var model = definitions[lookUpTable[unit]]; var model = definitions[lookUpTable[unit]];
if (!model) { if (!model) {
log.warn('[' + requestId + '] unit "' + unit + '" does not exits');
throw '[' + requestId + '] unit "' + unit + '" does not exits'; throw '[' + requestId + '] unit "' + unit + '" does not exits';
} }
return model; return model;
@ -205,7 +208,7 @@ var getHbsFile, getFile, toRelativePath, cleanupAncestors,
var unitDir = unitDirs[i]; var unitDir = unitDirs[i];
if (unitDir.isDirectory()) { if (unitDir.isDirectory()) {
var unitName = unitDir.getName(); var unitName = unitDir.getName();
//log.info("reading: "+unitName + " basePath:"+basePath); //log.info("reading: "+unitName + " basePath:'" + basePath + "'");
var definitionFile = new File(fuse.getUnitPath(basePath+unitName) + '/' + unitName + '.json'); var definitionFile = new File(fuse.getUnitPath(basePath+unitName) + '/' + unitName + '.json');
if(definitionFile.isExists()) { if(definitionFile.isExists()) {
@ -381,6 +384,7 @@ var getHbsFile, getFile, toRelativePath, cleanupAncestors,
* @returns {File} * @returns {File}
*/ */
getFile = function (unitName, path, opt_suffix) { getFile = function (unitName, path, opt_suffix) {
//log.info("getFile() unitName:"+unitName+", path:"+path+", opt_suffix:"+opt_suffix);
var slashPath = ((path[0] === '/') ? '' : '/') + path; var slashPath = ((path[0] === '/') ? '' : '/') + path;
var selfFileName = ''; var selfFileName = '';
var fileName = ''; var fileName = '';
@ -399,8 +403,10 @@ var getHbsFile, getFile, toRelativePath, cleanupAncestors,
var unitDef = getUnitDefinition(unitName); var unitDef = getUnitDefinition(unitName);
if (unitDef.path.indexOf('.hbs', unitDef.path.length - 4) !== -1) { if (unitDef.path.indexOf('.hbs', unitDef.path.length - 4) !== -1) {
if (opt_suffix.indexOf('.hbs', opt_suffix.length - 4) !== -1) { if (opt_suffix.indexOf('.hbs', opt_suffix.length - 4) !== -1) {
//log.info("1:"+unitDef.path);
return new File(unitDef.path); return new File(unitDef.path);
} else { } else {
//log.info("2:"+unitDef.path.replace(/.hbs$/, opt_suffix));
return new File(unitDef.path.replace(/.hbs$/, opt_suffix)); return new File(unitDef.path.replace(/.hbs$/, opt_suffix));
} }
} }
@ -411,7 +417,7 @@ var getHbsFile, getFile, toRelativePath, cleanupAncestors,
'[' + requestId + '] for unit "' + unitName + '" file resolved : "' '[' + requestId + '] for unit "' + unitName + '" file resolved : "'
+ slashPath + selfFileName + '" -> "' + selfFile.getPath() + '"' + slashPath + selfFileName + '" -> "' + selfFile.getPath() + '"'
); );
//log.info("3:"+getUnitPath(unitName) + slashPath + selfFileName);
return selfFile; return selfFile;
} }
@ -431,6 +437,7 @@ var getHbsFile, getFile, toRelativePath, cleanupAncestors,
'[' + requestId + '] for unit "' + unitName + '" file resolved : "' '[' + requestId + '] for unit "' + unitName + '" file resolved : "'
+ slashPath + selfFileName + '" -> "' + file.getPath() + '"' + slashPath + selfFileName + '" -> "' + file.getPath() + '"'
); );
//log.info("4:"+getUnitPath(ancestorName) + slashPath + fileName);
return file; return file;
} }
} }
@ -438,6 +445,7 @@ var getHbsFile, getFile, toRelativePath, cleanupAncestors,
'[' + requestId + '] for unit "' + unitName + '" (non-excising) file resolved : "' '[' + requestId + '] for unit "' + unitName + '" (non-excising) file resolved : "'
+ slashPath + selfFileName + '" -> "' + selfFile.getPath() + '"' + slashPath + selfFileName + '" -> "' + selfFile.getPath() + '"'
); );
//log.info("5:"+getUnitPath(unitName) + slashPath + selfFileName);
return selfFile; return selfFile;
}; };

@ -56,7 +56,7 @@ Handlebars.innerZonesFromUnit = null;
Handlebars.registerHelper('defineZone', function (zoneName, zoneContent) { Handlebars.registerHelper('defineZone', function (zoneName, zoneContent) {
var result = ''; var result = '';
var zone = Handlebars.Utils.escapeExpression(zoneName); var zone = Handlebars.Utils.escapeExpression(zoneName);
fuseState.currentZone.push(zone); fuseState.zoneStack.push(zone);
var unitsToRender = fuseState.zones[zone] || []; var unitsToRender = fuseState.zones[zone] || [];
if (Handlebars.innerZones.length > 0) { if (Handlebars.innerZones.length > 0) {
@ -92,12 +92,12 @@ Handlebars.registerHelper('defineZone', function (zoneName, zoneContent) {
return result; return result;
} }
fuseState.currentZone.pop(); fuseState.zoneStack.pop();
return new Handlebars.SafeString(result); return new Handlebars.SafeString(result);
}); });
Handlebars.registerHelper('zone', function (zoneName, zoneContent) { Handlebars.registerHelper('zone', function (zoneName, zoneContent) {
var currentZone = fuseState.currentZone[fuseState.currentZone.length - 1]; var currentZone = fuseState.zoneStack[fuseState.zoneStack.length - 1];
if (currentZone == null) { if (currentZone == null) {
return 'zone_' + zoneName + ' '; return 'zone_' + zoneName + ' ';
} }
@ -113,7 +113,7 @@ Handlebars.registerHelper('zone', function (zoneName, zoneContent) {
}); });
Handlebars.registerHelper('layout', function (layoutName) { Handlebars.registerHelper('layout', function (layoutName) {
var currentZone = fuseState.currentZone[fuseState.currentZone.length - 1]; var currentZone = fuseState.zoneStack[fuseState.zoneStack.length - 1];
if (currentZone == null) { if (currentZone == null) {
return 'layout_' + layoutName; return 'layout_' + layoutName;
} else { } else {
@ -122,7 +122,7 @@ Handlebars.registerHelper('layout', function (layoutName) {
}); });
Handlebars.registerHelper('authorized', function () { Handlebars.registerHelper('authorized', function () {
var currentZone = fuseState.currentZone[fuseState.currentZone.length - 1]; var currentZone = fuseState.zoneStack[fuseState.zoneStack.length - 1];
if (currentZone == null) { if (currentZone == null) {
return ''; return '';
} else { } else {
@ -155,11 +155,11 @@ Handlebars.registerHelper('unit', function (unitName,options) {
log.error('unit does not have a main zone'); log.error('unit does not have a main zone');
} }
//TODO warn when unspecified decencies are included. //TODO warn when unspecified decencies are included.
fuseState.currentZone.push('main'); fuseState.zoneStack.push('main');
var template = fuse.getFile(baseUnit, '', '.hbs'); var template = fuse.getFile(baseUnit, '', '.hbs');
log.debug('[' + requestId + '] including "' + baseUnit + '"'+" with configs "+stringify(templateConfigs)); log.debug('[' + requestId + '] including "' + baseUnit + '"'+" with configs "+stringify(templateConfigs));
var result = new Handlebars.SafeString(Handlebars.compileFile(template)(getScope(baseUnit,templateConfigs))); var result = new Handlebars.SafeString(Handlebars.compileFile(template)(getScope(baseUnit,templateConfigs)));
fuseState.currentZone.pop(); fuseState.zoneStack.pop();
return result; return result;
}); });
@ -192,6 +192,7 @@ Handlebars.registerHelper('equal', function(lvalue, rvalue, options) {
return options.fn(this); return options.fn(this);
} }
}); });
Handlebars.registerHelper('unequal', function(lvalue, rvalue, options) { Handlebars.registerHelper('unequal', function(lvalue, rvalue, options) {
if (arguments.length < 3) if (arguments.length < 3)
throw new Error("Handlebars Helper equal needs 2 parameters"); throw new Error("Handlebars Helper equal needs 2 parameters");

@ -10190,7 +10190,7 @@ var compile = function (args) {
var parser = new less.Parser(options); var parser = new less.Parser(options);
parser.parse(input, function (e, root) { parser.parse(input, function (e, root) {
if (e) { if (e) {
log.error(e); log.info(e);
writeError(e, options); writeError(e, options);
quit(1); quit(1);
} else { } else {

@ -1,41 +0,0 @@
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
var apiWrapperUtil = function () {
var module = {};
var tokenUtil = require("/modules/util.js").util;
module.refreshToken = function () {
var tokenPair = session.get("accessTokenPair");
tokenPair = tokenUtil.refreshToken(tokenPair);
session.put("accessTokenPair", tokenPair);
response.addCookie({'name': 'accessToken', 'value': tokenPair.accessToken});
};
module.setupAccessTokenPair = function (type, properties) {
var tokenPair;
var clientId = "pY0FbBUC_GI7mfHVS1FvhWAifEwa";
var clientSecret = "Tu5Za1R3fHtGc5yH4KK8TNiLVSca";
if (type == "password") {
//tokenPair = tokenUtil.getTokenWithPasswordGrantType(properties.username, properties.password, clientId, clientSecret);
} else if (type == "saml") {
}
//session.put("accessTokenPair", tokenPair);
//response.addCookie({'name': 'accessToken', 'value': tokenPair.accessToken});
};
return module;
}();

@ -20,7 +20,7 @@ var WEB_APP_TITLE = "WSO2 DC - Device Cloud";
var WEB_APP_CONTEXT = "/iotserver"; var WEB_APP_CONTEXT = "/iotserver";
var USER_SESSION_KEY = "USER"; var USER_SESSION_KEY = "USER";
var UNSPECIFIED = "Unspecified"; var UNSPECIFIED = "Unspecified";
var DEVICES_UNIT_PATH="/units/"; var DEVICES_UNIT_PATH="/units/devices/";
var DEVICE_IDENTIFIER = "deviceIdentifier"; var DEVICE_IDENTIFIER = "deviceIdentifier";
var DEVICE_NAME = "name"; var DEVICE_NAME = "name";
@ -38,7 +38,7 @@ var FEATURE_DESCRIPTION = "featureDescription";
var PLATFORM_ANDROID = "android"; var PLATFORM_ANDROID = "android";
var PLATFORM_IOS = "ios"; var PLATFORM_IOS = "ios";
var DEVICE_ENROLLMENT = "dateOfEnrolment"; var DEVICE_ENROLLMENT = "enrollment";
var VENDOR_APPLE = "Apple"; var VENDOR_APPLE = "Apple";
var ERRORS = { var ERRORS = {

@ -167,7 +167,7 @@ deviceModule = function () {
var data = {}; var data = {};
//XMLHTTPRequest's GET //XMLHTTPRequest's GET
//log.info(removeDeviceEndpoint); log.info(removeDeviceEndpoint);
return del(removeDeviceEndpoint, data, "text"); return del(removeDeviceEndpoint, data, "text");
}; };
@ -178,8 +178,8 @@ deviceModule = function () {
var data = {}; var data = {};
//XMLHTTPRequest's POST //XMLHTTPRequest's POST
//log.info(updateDeviceEndpoint+ "?name="+device.name); log.info(updateDeviceEndpoint+ "?name="+device.name);
return post(updateDeviceEndpoint + "?name=" + encodeURIComponent(device.name), data, "text"); return post(updateDeviceEndpoint+ "?name="+device.name, data, "text");
}; };
/* /*
@ -257,8 +257,8 @@ deviceModule = function () {
var deviceObject = {}; var deviceObject = {};
deviceObject[constants.DEVICE_IDENTIFIER] = device.getDeviceIdentifier(); deviceObject[constants.DEVICE_IDENTIFIER] = device.getDeviceIdentifier();
deviceObject[constants.DEVICE_NAME] = privateMethods.validateAndReturn(device.getName()); deviceObject[constants.DEVICE_NAME] = privateMethods.validateAndReturn(device.getName());
deviceObject[constants.DEVICE_OWNERSHIP] = privateMethods.validateAndReturn(device.getEnrolmentInfo().getOwnership()); deviceObject[constants.DEVICE_OWNERSHIP] = privateMethods.validateAndReturn(device.getOwnership());
deviceObject[constants.DEVICE_OWNER] = device.getEnrolmentInfo().getOwner(); deviceObject[constants.DEVICE_OWNER] = device.getOwner();
deviceObject[constants.DEVICE_TYPE] = device.getType(); deviceObject[constants.DEVICE_TYPE] = device.getType();
if (device.getType() == constants.PLATFORM_IOS) { if (device.getType() == constants.PLATFORM_IOS) {
properties[constants.DEVICE_MODEL] = properties[constants.DEVICE_PRODUCT]; properties[constants.DEVICE_MODEL] = properties[constants.DEVICE_PRODUCT];
@ -266,9 +266,7 @@ deviceModule = function () {
properties[constants.DEVICE_VENDOR] = constants.VENDOR_APPLE; properties[constants.DEVICE_VENDOR] = constants.VENDOR_APPLE;
} }
deviceObject[constants.DEVICE_PROPERTIES] = properties; deviceObject[constants.DEVICE_PROPERTIES] = properties;
log.info("-------------------------"); deviceObject[constants.DEVICE_ENROLLMENT] = device.getDateOfEnrolment();
log.info(device.getEnrolmentInfo().getDateOfEnrolment());
deviceObject[constants.DEVICE_ENROLLMENT] = device.getEnrolmentInfo().getDateOfEnrolment();
return deviceObject; return deviceObject;
} }
}; };

@ -1,85 +0,0 @@
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
var policyModule;
policyModule = function () {
var log = new Log("modules/policy.js");
var constants = require("/modules/constants.js");
var utility = require("/modules/utility.js").utility;
var userManagementService = utility.getUserManagementService();
var publicMethods = {};
var privateMethods = {};
publicMethods.getPolicies = function () {
//TODO-This method returns includes dummy policy data
var policies = [];
var policyObj = {
"id":1, // Identifier of the policy.
"priorityId":1, // Priority of the policies. This will be used only for simple evaluation.
"profile":{}, // Profile
"policyName":"Turn off light", // Name of the policy.
"generic":true, // If true, this should be applied to all related device.
"roles":{}, // Roles which this policy should be applied.
"ownershipType":{}, // Ownership type (COPE, BYOD, CPE)
"devices":{}, // Individual devices this policy should be applied
"users":{}, // Individual users this policy should be applied
"Compliance":{},
"policyCriterias":{},
"startTime":283468236, // Start time to apply the policy.
"endTime":283468236, // After this time policy will not be applied
"startDate":"", // Start date to apply the policy
"endDate":"", // After this date policy will not be applied.
"tenantId":-1234,
"profileId":1
};
policies.push(policyObj);
policyObj = {
"id":2, // Identifier of the policy.
"priorityId":1, // Priority of the policies. This will be used only for simple evaluation.
"profile":{}, // Profile
"policyName":"Turn on Buzzer", // Name of the policy.
"generic":false, // If true, this should be applied to all related device.
"roles":{}, // Roles which this policy should be applied.
"ownershipType":{}, // Ownership type (COPE, BYOD, CPE)
"devices":{}, // Individual devices this policy should be applied
"users":{}, // Individual users this policy should be applied
"Compliance":{},
"policyCriterias":{},
"startTime":283468236, // Start time to apply the policy.
"endTime":283468236, // After this time policy will not be applied
"startDate":"", // Start date to apply the policy
"endDate":"", // After this date policy will not be applied.
"tenantId":-1234,
"profileId":2
};
policies.push(policyObj);
return policies;
};
return publicMethods;
}();

@ -252,9 +252,7 @@ userModule = function () {
log.error("User object was not found in the session"); log.error("User object was not found in the session");
throw constants.ERRORS.USER_NOT_FOUND; throw constants.ERRORS.USER_NOT_FOUND;
} }
var userList = userManagementService.getUsersForTenant(carbonUser.tenantId); var userList = userManagementService.getUsersForTenant(carbonUser.tenantId);
var i, userObject; var i, userObject;
for (i = 0; i < userList.size(); i++) { for (i = 0; i < userList.size(); i++) {
userObject = userList.get(i); userObject = userList.get(i);
@ -310,34 +308,6 @@ userModule = function () {
return permissions; return permissions;
}; };
/**
* Get User Roles from user store.
* If "Internal/Everyone" role is required - true param needs to be passed.
* @param enableInternalEveryone boolean value true/false to enable Internal/Everyone role
*/
publicMethods.getRoles = function (enableInternalEveryone) {
var carbonModule = require("carbon");
var carbonServer = application.get("carbonServer");
var carbonUser = session.get(constants.USER_SESSION_KEY);
if (!carbonUser) {
log.error("User object was not found in the session");
throw constants.ERRORS.USER_NOT_FOUND;
}
var userManager = new carbonModule.user.UserManager(carbonServer, carbonUser.tenantId);
var allRoles = userManager.allRoles();
var filteredRoles = [];
var i;
for (i = 0; i < allRoles.length; i++) {
if (enableInternalEveryone && allRoles[i] == "Internal/everyone") {
filteredRoles.push(allRoles[i]);
}
if (allRoles[i].indexOf("Internal/") != 0) {
filteredRoles.push(allRoles[i]);
}
}
return filteredRoles;
};
publicMethods.logout = function (successCallback) { publicMethods.logout = function (successCallback) {
session.invalidate(); session.invalidate();
successCallback(); successCallback();

@ -1,89 +0,0 @@
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
var util = function () {
var module = {};
var Base64 = Packages.org.apache.commons.codec.binary.Base64;
var String = Packages.java.lang.String;
var log = new Log();
/**
* Encode the payload in Base64
* @param payload
* @returns {Packages.java.lang.String}
*/
function encode(payload){
return new String(Base64.encodeBase64(new String(payload).getBytes()));
}
/**
* Get an AccessToken pair based on username and password
* @param username
* @param password
* @param clientId
* @param clientSecret
* @param scope
* @returns {{accessToken: "", refreshToken: ""}}
*/
module.getTokenWithPasswordGrantType = function (username, password, clientId, clientSecret, scope) {
var xhr = new XMLHttpRequest();
var tokenEndpoint = "https://localhost:9443/oauth2/token";
var encodedClientKeys = encode(clientId + ":" + clientSecret);
xhr.open("POST", tokenEndpoint, false);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("Authorization", "Basic " + encodedClientKeys);
xhr.send("grant_type=password&username=" + username + "&password=" + password + "&scope=" + scope);
delete password, delete clientSecret, delete encodedClientKeys;
var tokenPair = {};
if (xhr.status == 200) {
var data = parse(xhr.responseText);
tokenPair.refreshToken = data.refresh_token;
tokenPair.accessToken = data.access_token;
} else if (xhr.status == 403) {
throw "Error in obtaining token with Password Grant Type";
} else {
throw "Error in obtaining token with Password Grant Type";
}
return tokenPair;
};
module.getTokenWithSAMLGrantType = function () {
};
module.refreshToken = function(tokenPair){
var xhr = new XMLHttpRequest();
var tokenEndpoint = "https://localhost:9443/oauth2/token";
var encodedClientKeys = encode(clientId + ":" + clientSecret);
xhr.open("POST", tokenEndpoint, false);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("Authorization", "Basic " + encodedClientKeys);
xhr.send("grant_type=refresh_token&refresh_token=" + tokenPair.refreshToken + "&scope=" + scope);
delete password, delete clientSecret, delete encodedClientKeys;
var tokenPair = {};
if (xhr.status == 200) {
var data = parse(xhr.responseText);
tokenPair.refreshToken = data.refresh_token;
tokenPair.accessToken = data.access_token;
} else if (xhr.status == 403) {
throw "Error in obtaining token with Password Grant Type";
} else {
throw "Error in obtaining token with Password Grant Type";
}
return tokenPair;
};
return module;
}();

@ -20,7 +20,6 @@ var utility;
utility = function () { utility = function () {
var JavaClass = Packages.java.lang.Class; var JavaClass = Packages.java.lang.Class;
var PrivilegedCarbonContext = Packages.org.wso2.carbon.context.PrivilegedCarbonContext; var PrivilegedCarbonContext = Packages.org.wso2.carbon.context.PrivilegedCarbonContext;
var userManagement = Packages.org.wso2.carbon.device.mgt.iot.common.UserManagement();
var getOsgiService = function (className) { var getOsgiService = function (className) {
return PrivilegedCarbonContext.getThreadLocalCarbonContext().getOSGiService(JavaClass.forName(className)); return PrivilegedCarbonContext.getThreadLocalCarbonContext().getOSGiService(JavaClass.forName(className));
@ -33,7 +32,7 @@ utility = function () {
}; };
publicMethods.getUserManagementService = function () { publicMethods.getUserManagementService = function () {
return userManagement; return getOsgiService('org.wso2.carbon.device.mgt.user.core.UserManager');
}; };
publicMethods.getPolicyManagementService = function () { publicMethods.getPolicyManagementService = function () {
@ -42,52 +41,22 @@ utility = function () {
publicMethods.insertAppPermissions = function (userModule, type) { publicMethods.insertAppPermissions = function (userModule, type) {
userModule.addPermissions([{key: "device-mgt", name: "Device Management"}], "", type); userModule.addPermissions([{key: "device-mgt", name: "Device Management"}], "", type);
userModule.addPermissions([{ userModule.addPermissions([{key: "admin", name: "Device Management Admin"}], "device-mgt", type);
key: "admin", userModule.addPermissions([{key: "user", name: "Device Management User"}], "device-mgt", type);
name: "Device Management Admin"
}], "device-mgt", type);
userModule.addPermissions([{
key: "user",
name: "Device Management User"
}], "device-mgt", type);
userModule.addPermissions([{key: "devices", name: "Devices"}], "device-mgt/admin", type); userModule.addPermissions([{key: "devices", name: "Devices"}], "device-mgt/admin", type);
userModule.addPermissions([{ userModule.addPermissions([{key: "devices/list", name: "List Devices"}], "device-mgt/admin", type);
key: "devices/list", userModule.addPermissions([{key: "devices/operation", name: "Perform Operation"}], "device-mgt/admin", type);
name: "List Devices"
}], "device-mgt/admin", type);
userModule.addPermissions([{
key: "devices/operation",
name: "Perform Operation"
}], "device-mgt/admin", type);
userModule.addPermissions([{key: "users", name: "Users"}], "device-mgt/admin", type); userModule.addPermissions([{key: "users", name: "Users"}], "device-mgt/admin", type);
userModule.addPermissions([{ userModule.addPermissions([{key: "users/add", name: "Add New Users"}], "device-mgt/admin", type);
key: "users/add", userModule.addPermissions([{key: "users/invite", name: "Invite Users"}], "device-mgt/admin", type);
name: "Add New Users" userModule.addPermissions([{key: "users/list", name: "List Users"}], "device-mgt/admin", type);
}], "device-mgt/admin", type); userModule.addPermissions([{key: "users/remove", name: "Remove Users"}], "device-mgt/admin", type);
userModule.addPermissions([{
key: "users/invite",
name: "Invite Users"
}], "device-mgt/admin", type);
userModule.addPermissions([{
key: "users/list",
name: "List Users"
}], "device-mgt/admin", type);
userModule.addPermissions([{
key: "users/remove",
name: "Remove Users"
}], "device-mgt/admin", type);
userModule.addPermissions([{key: "devices", name: "Devices"}], "device-mgt/user", type); userModule.addPermissions([{key: "devices", name: "Devices"}], "device-mgt/user", type);
userModule.addPermissions([{ userModule.addPermissions([{key: "devices/list", name: "List Devices"}], "device-mgt/user", type);
key: "devices/list", userModule.addPermissions([{key: "devices/operation", name: "Perform Operation"}], "device-mgt/user", "init");
name: "List Devices"
}], "device-mgt/user", type);
userModule.addPermissions([{
key: "devices/operation",
name: "Perform Operation"
}], "device-mgt/user", "init");
}; };
return publicMethods; return publicMethods;

@ -1,4 +1,3 @@
{{authorized}}
{{layout "fluid"}} {{layout "fluid"}}
{{#zone "title"}} {{#zone "title"}}
WSO2 DC | Device Cloud WSO2 DC | Device Cloud

@ -4,5 +4,5 @@
{{/zone}} {{/zone}}
{{#zone "body"}} {{#zone "body"}}
{{unit "appbar" link="store" title="STORE"}} {{unit "appbar" link="store" title="STORE"}}
{{unit "android"}} {{unit "devices/android"}}
{{/zone}} {{/zone}}

@ -4,5 +4,5 @@
{{/zone}} {{/zone}}
{{#zone "body"}} {{#zone "body"}}
{{unit "appbar" link="store" title="STORE"}} {{unit "appbar" link="store" title="STORE"}}
{{unit "android_sense"}} {{unit "devices/android_sense"}}
{{/zone}} {{/zone}}

@ -4,5 +4,5 @@
{{/zone}} {{/zone}}
{{#zone "body"}} {{#zone "body"}}
{{unit "appbar" link="store" title="STORE"}} {{unit "appbar" link="store" title="STORE"}}
{{unit "arduino"}} {{unit "devices/arduino"}}
{{/zone}} {{/zone}}

@ -4,5 +4,5 @@
{{/zone}} {{/zone}}
{{#zone "body"}} {{#zone "body"}}
{{unit "appbar" link="store" title="STORE"}} {{unit "appbar" link="store" title="STORE"}}
{{unit "digital_display"}} {{unit "devices/digital_display"}}
{{/zone}} {{/zone}}

@ -4,5 +4,5 @@
{{/zone}} {{/zone}}
{{#zone "body"}} {{#zone "body"}}
{{unit "appbar" link="store" title="STORE"}} {{unit "appbar" link="store" title="STORE"}}
{{unit "firealarm"}} {{unit "devices/firealarm"}}
{{/zone}} {{/zone}}

@ -4,7 +4,7 @@
Devices Devices
{{/zone}} {{/zone}}
{{#zone "body"}} {{#zone "body"}}
{{unit "appbar" link="device-mgt" title="My Devices"}} {{unit "appbar" link="device-mgt" title="Device Management"}}
{{unit "extended-search-box"}} {{unit "extended-search-box"}}
{{unit "operation-mod"}} {{unit "operation-mod"}}
<div class="wr-device-list row"> <div class="wr-device-list row">

@ -4,5 +4,5 @@
{{/zone}} {{/zone}}
{{#zone "body"}} {{#zone "body"}}
{{unit "appbar" link="store" title="STORE"}} {{unit "appbar" link="store" title="STORE"}}
{{unit "raspberrypi"}} {{unit "devices/raspberrypi"}}
{{/zone}} {{/zone}}

@ -4,5 +4,5 @@
{{/zone}} {{/zone}}
{{#zone "body"}} {{#zone "body"}}
{{unit "appbar" link="store" title="STORE"}} {{unit "appbar" link="store" title="STORE"}}
{{unit "sensebot"}} {{unit "devices/sensebot"}}
{{/zone}} {{/zone}}

@ -4,5 +4,5 @@
{{/zone}} {{/zone}}
{{#zone "body"}} {{#zone "body"}}
{{unit "appbar" link="store" title="STORE"}} {{unit "appbar" link="store" title="STORE"}}
{{unit "windows"}} {{unit "devices/windows"}}
{{/zone}} {{/zone}}

@ -1,9 +0,0 @@
{{authorized}}
{{layout "fluid"}}
{{#zone "title"}}
WSO2 DC | Add New Policy
{{/zone}}
{{#zone "body"}}
{{unit "appbar" link="policies" title="My Policies"}}
{{unit "policy-create"}}
{{/zone}}

@ -1,21 +0,0 @@
{{authorized}}
{{layout "fluid"}}
{{#zone "title"}}
Policies
{{/zone}}
{{#zone "body"}}
{{unit "appbar" link="policies" title="My Policies"}}
{{unit "extended-search-box"}}
<div class="wr-device-list row">
<div class="wr-hidden-operations wr-advance-operations">
</div>
<div class="col-md-12 wr-page-content">
<!-- content -->
<div>
{{unit "policy-listing"}}
</div>
<!-- /content -->
</div>
</div>
{{/zone}}

@ -1,100 +0,0 @@
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
describe('Device Module', function () {
var log = new Log();
var mobileDB;
var cdmDB;
var deviceModule = require("/modules/device.js").deviceModule;
function tearUp() {
mobileDB = new Database("MobileDM_DS");
cdmDB = new Database("DM_DS");
cdmDB.query("insert into dm_device(description, name, date_of_enrollment, date_of_last_update, " +
"ownership,status, device_type_id, device_identification, owner, tenant_id ) " +
"values ('Galaxy Tab','Admin Samsung', 1425467382, 1425467382, 'BYOD', 'ACTIVE'," +
" 1,'4892813d-0b18-4a02-b7b1-61775257488e', 'admin@wso2.com', '-1234');");
cdmDB.query("insert into dm_device(description, name, date_of_enrollment, date_of_last_update, " +
"ownership,status, device_type_id, device_identification, owner, tenant_id ) " +
"values ('Galaxy Tab','Admin Samsung', 1425467382, 1425467382, 'BYOD', 'ACTIVE'," +
" 1,'4892813d-0b18-4a02-b7b1-61775257488F', 'mdm@wso2.com', '-1234');");
mobileDB.query("insert into mbl_device (mobile_device_id, push_token, imei ,imsi, os_version, " +
"device_model , vendor ,latitude ,longitude , challenge ,token, unlock_token ,serial ) " +
"values ('4892813d-0b18-4a02-b7b1-61775257488e', 'sdfsdf', 'cxv', 'vbcb', '4.1', " +
"'Galaxy Tab', 'Samsung', '234234234', '4345345234234', 'dfjsdlfk', 'wuweir234', " +
"'ksdfjlskfjwer', '234234');");
mobileDB.query("insert into mbl_device (mobile_device_id, push_token, imei ,imsi, os_version, " +
"device_model , vendor ,latitude ,longitude , challenge ,token, unlock_token ,serial ) " +
"values ('4892813d-0b18-4a02-b7b1-61775257488F', 'sdfsdf', 'cxv', 'vbcb', '4.1', " +
"'Galaxy Tab', 'Samsung', '234234234', '4345345234234', 'dfjsdlfk', 'wuweir234', " +
"'ksdfjlskfjwer', '234234');");
}
function tearDown() {
deleteData();
mobileDB.close();
cdmDB.close();
}
function deleteData(){
cdmDB.query("delete from dm_device where device_identification='4892813d-0b18-4a02-b7b1-61775257488e'");
cdmDB.query("delete from dm_device where device_identification='4892813d-0b18-4a02-b7b1-61775257488F'");
mobileDB.query("delete from mbl_device where mobile_device_id='4892813d-0b18-4a02-b7b1-61775257488e'");
mobileDB.query("delete from mbl_device where mobile_device_id='4892813d-0b18-4a02-b7b1-61775257488F'");
}
it('List all Devices - Device Module', function () {
try {
tearUp();
var results = deviceModule.listDevices();
expect(results.length).not.toBe(0);
} catch (e) {
log.error(e);
throw e;
} finally {
tearDown();
}
});
it('List Devices for User - Device Module', function () {
try {
tearUp();
var results = deviceModule.listDevicesForUser("mdm@wso2.com");
expect(results.length).toBe(1);
} catch (e) {
log.error(e);
throw e;
} finally {
tearDown();
}
});
it('Perform operation on the device', function(){
try {
tearUp();
var devices = [{"id": "4892813d-0b18-4a02-b7b1-61775257488e", "type": "android"}];
var operation = {"featureName": "DEVICE_LOCK", "type": "COMMAND", "properties": {"enabled": true}}
var results = deviceModule.performOperation(devices, operation);
expect(results.length).toBe(1);
} catch (e) {
log.error(e);
throw e;
} finally {
tearDown();
}
});
});

@ -1,88 +0,0 @@
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
describe('Device Module', function () {
var log = new Log();
var mobileDB;
var cdmDB;
var deviceModule = require("/modules/device.js").deviceModule;
var userModule = require("/modules/user.js").userModule;
var constants = require("/modules/constants.js");
function tearUp() {
mobileDB = new Database("MobileDM_DS");
cdmDB = new Database("DM_DS");
cdmDB.query("insert into dm_device(description, name, date_of_enrollment, date_of_last_update, " +
"ownership,status, device_type_id, device_identification, owner, tenant_id ) " +
"values ('Galaxy Tab','Admin Samsung', 1425467382, 1425467382, 'BYOD', 'ACTIVE'," +
" 1,'4892813d-0b18-4a02-b7b1-61775257488e', 'admin@wso2.com', '-1234');");
cdmDB.query("insert into dm_device(description, name, date_of_enrollment, date_of_last_update, " +
"ownership,status, device_type_id, device_identification, owner, tenant_id ) " +
"values ('Galaxy Tab','Admin Samsung', 1425467382, 1425467382, 'BYOD', 'ACTIVE'," +
" 1,'4892813d-0b18-4a02-b7b1-61775257488F', 'mdm@wso2.com', '-1234');");
mobileDB.query("insert into mbl_device (mobile_device_id, push_token, imei ,imsi, os_version, " +
"device_model , vendor ,latitude ,longitude , challenge ,token, unlock_token ,serial ) " +
"values ('4892813d-0b18-4a02-b7b1-61775257488e', 'sdfsdf', 'cxv', 'vbcb', '4.1', " +
"'Galaxy Tab', 'Samsung', '234234234', '4345345234234', 'dfjsdlfk', 'wuweir234', " +
"'ksdfjlskfjwer', '234234');");
mobileDB.query("insert into mbl_device (mobile_device_id, push_token, imei ,imsi, os_version, " +
"device_model , vendor ,latitude ,longitude , challenge ,token, unlock_token ,serial ) " +
"values ('4892813d-0b18-4a02-b7b1-61775257488F', 'sdfsdf', 'cxv', 'vbcb', '4.1', " +
"'Galaxy Tab', 'Samsung', '234234234', '4345345234234', 'dfjsdlfk', 'wuweir234', " +
"'ksdfjlskfjwer', '234234');");
session.put(constants.USER_SESSION_KEY, {"username" : "admin", "domain": "carbon.super", "tenantId": "-1234"});
}
function tearDown() {
deleteData();
mobileDB.close();
cdmDB.close();
session.put(constants.USER_SESSION_KEY, null);
}
function deleteData(){
cdmDB.query("delete from dm_device where device_identification='4892813d-0b18-4a02-b7b1-61775257488e'");
cdmDB.query("delete from dm_device where device_identification='4892813d-0b18-4a02-b7b1-61775257488F'");
mobileDB.query("delete from mbl_device where mobile_device_id='4892813d-0b18-4a02-b7b1-61775257488e'");
mobileDB.query("delete from mbl_device where mobile_device_id='4892813d-0b18-4a02-b7b1-61775257488F'");
}
it('List all users', function () {
try {
tearUp();
var results = userModule.getUsers();
expect(results.length).not.toBe(0);
} catch (e) {
log.error(e);
throw e;
} finally {
tearDown();
}
});
it('Check permission for user', function () {
try {
tearUp();
expect(userModule.isAuthorized("/permission/device-mgt/user/devices/list")).toBe(true);
} catch (e) {
log.error(e);
throw e;
} finally {
tearDown();
}
});
});

@ -48,8 +48,6 @@
</div> </div>
<div id="div-bulbData"> <div id="div-bulbData">
</div> </div>
<div id="div-cpuTemperatureData">
</div>
<div id="div-CPUData"> <div id="div-CPUData">
</div> </div>
<div id="div-RAMData"> <div id="div-RAMData">
@ -72,5 +70,4 @@
<script src="{{self.publicURL}}/js/graphs/sonar_graph.js"></script> <script src="{{self.publicURL}}/js/graphs/sonar_graph.js"></script>
<script src="{{self.publicURL}}/js/graphs/cpu_graph.js"></script> <script src="{{self.publicURL}}/js/graphs/cpu_graph.js"></script>
<script src="{{self.publicURL}}/js/graphs/ram_graph.js"></script> <script src="{{self.publicURL}}/js/graphs/ram_graph.js"></script>
<script src="{{self.publicURL}}/js/graphs/cpu_temperature_graph.js"></script>
{{/zone}} {{/zone}}

@ -1,10 +1,6 @@
var fromDate; var fromDate;
var toDate; var toDate;
var currentDay = new Date();
var startDate = new Date(currentDay.getTime() - (60 * 60 * 24 * 100));
var endDate = new Date(currentDay.getTime());
// create a custom bar renderer that has no gaps // create a custom bar renderer that has no gaps
Rickshaw.Graph.Renderer.BarNoGap = Rickshaw.Class.create(Rickshaw.Graph.Renderer.Bar, { Rickshaw.Graph.Renderer.BarNoGap = Rickshaw.Class.create(Rickshaw.Graph.Renderer.Bar, {
name: 'bar_no_gap', name: 'bar_no_gap',
@ -15,11 +11,10 @@ Rickshaw.Graph.Renderer.BarNoGap = Rickshaw.Class.create(Rickshaw.Graph.Renderer
} }
}); });
function initDate(){
currentDay = new Date(); var currentDay = new Date();
startDate = new Date(currentDay.getTime() - (60 * 60 * 24 * 100)); var startDate = new Date(currentDay.getTime() - (60 * 60 * 24 * 100));
endDate = new Date(currentDay.getTime()); var endDate = new Date(currentDay.getTime());
}
var configObject = { var configObject = {
startOfWeek: 'monday', startOfWeek: 'monday',
@ -43,7 +38,6 @@ var configObject = {
var DateRange = convertDate(startDate) + " " + configObject.separator + " " + convertDate(endDate); var DateRange = convertDate(startDate) + " " + configObject.separator + " " + convertDate(endDate);
$(document).ready(function () { $(document).ready(function () {
initDate();
$('#date-range').dateRangePicker(configObject) $('#date-range').dateRangePicker(configObject)
.bind('datepicker-apply', function (event, dateRange) { .bind('datepicker-apply', function (event, dateRange) {
$(this).addClass('active'); $(this).addClass('active');
@ -67,25 +61,21 @@ $(document).ready(function () {
//day picker //day picker
$('#today-btn').on('click', function () { $('#today-btn').on('click', function () {
initDate();
getDateTime(currentDay.getTime() - 86400000, currentDay.getTime()); getDateTime(currentDay.getTime() - 86400000, currentDay.getTime());
}); });
//hour picker //hour picker
$('#hour-btn').on('click', function () { $('#hour-btn').on('click', function () {
initDate();
getDateTime(currentDay.getTime() - 3600000, currentDay.getTime()); getDateTime(currentDay.getTime() - 3600000, currentDay.getTime());
}); })
//week picker //week picker
$('#week-btn').on('click', function () { $('#week-btn').on('click', function () {
initDate();
getDateTime(currentDay.getTime() - 604800000, currentDay.getTime()); getDateTime(currentDay.getTime() - 604800000, currentDay.getTime());
}); })
//month picker //month picker
$('#month-btn').on('click', function () { $('#month-btn').on('click', function () {
initDate();
getDateTime(currentDay.getTime() - (604800000 * 4), currentDay.getTime()); getDateTime(currentDay.getTime() - (604800000 * 4), currentDay.getTime());
}); });
@ -221,14 +211,6 @@ function updateGraphs(stats) {
$('#div-RAMData').html(""); $('#div-RAMData').html("");
} }
var cpuTemperatureData = stats['cpuTemperatureData'];
if (typeof cpuTemperatureData != 'undefined') {
$('#div-cpuTemperatureData').html("").html("<div class='row margin-double'><div><h2 class='grey'>CPU Temperature</h2><hr><div id='canvas-wrapper9'></div></div><hr></div>");
updateCPUTemperatureGraph(convertStatsToGraphData(cpuTemperatureData));
} else {
$('#div-cpuTemperatureData').html("");
}
scaleGraphs(); scaleGraphs();
} }
@ -237,18 +219,8 @@ function scaleGraphs() {
if (sliders.length == 0) { if (sliders.length == 0) {
return; return;
} }
var graphWidth = 0;
for (var i = 1; i < 10; i++){
if ($('#canvas-wrapper' + i).length){
graphWidth = $('#canvas-wrapper' + i).width() - 50;
break;
}
}
if (graphWidth <= 0){
return;
}
var graphWidth = $('#canvas-wrapper1').width() - 50;
//Scale graphs //Scale graphs
var sliderX = graphWidth * 60 * 60 / (toDate - fromDate); var sliderX = graphWidth * 60 * 60 / (toDate - fromDate);
if (sliderX < graphWidth) { if (sliderX < graphWidth) {

@ -1,70 +0,0 @@
function updateCPUTemperatureGraph(temperatureData) {
console.log("cpuTemperatureData");
renderCPUTemperatureChart(temperatureData);
}
function renderCPUTemperatureChart(chartDataRaw) {
var chartWrapperElmId = "#canvas-wrapper9";
var graphWidth = $(chartWrapperElmId).width() - 50;
if (chartDataRaw.length == 0) {
$(chartWrapperElmId).html("No data available...");
return;
}
var chartData = [];
for (var i = 0; i < chartDataRaw.length; i++) {
chartData.push({x: parseInt(chartDataRaw[i].x), y: parseInt(chartDataRaw[i].y)});
}
//var i = parseInt(fromDate);
//while (i < parseInt(toDate)){
// var rnd = Math.random() * (30 - 20) + 20;
// chartData.push({x:i * 1000, y:rnd});
// i += 60 * 5;
//}
var chartDiv = "chart9";
var sliderDiv = "slider9";
var x_axis = "x_axis9";
var y_axis = "y_axis9";
$(chartWrapperElmId).html("").html('<div id="' + y_axis + '" class="custom_y_axis"></div><div id="' + chartDiv + '" class="custom_rickshaw_graph"></div><div id="' + x_axis + '" class="custom_x_axis"></div><div id="' + sliderDiv + '" class="custom_slider"></div>');
var graph = new Rickshaw.Graph({
element: document.getElementById(chartDiv),
width: graphWidth,
height: 400,
strokeWidth: 1,
renderer: 'line',
xScale: d3.time.scale(),
padding: {top: 0.2, left: 0.02, right: 0.02, bottom: 0},
series: [
{color: '#FF4000', data: chartData}
]
});
graph.render();
var xAxis = new Rickshaw.Graph.Axis.X({
graph: graph,
orientation: 'bottom',
element: document.getElementById(x_axis),
tickFormat: graph.x.tickFormat()
});
xAxis.render();
var yAxis = new Rickshaw.Graph.Axis.Y({
graph: graph,
orientation: 'left',
element: document.getElementById(y_axis),
width: 40,
height: 410
});
yAxis.render();
var slider = new Rickshaw.Graph.RangeSlider.Preview({
graph: graph,
element: document.getElementById(sliderDiv)
});
}

@ -1,4 +0,0 @@
function onRequest(context){
context.sketchPath = "api/device/sketch/download";
return context;
}

@ -1,4 +0,0 @@
function onRequest(context){
context.sketchPath = "api/device/sketch/download";
return context;
}

@ -41,11 +41,11 @@
<!-- common navigation --> <!-- common navigation -->
<div id="hiddenNav" class="wr-hidden-nav"> <div id="hiddenNav" class="wr-hidden-nav">
<ul> <ul>
<li><a href="/iotserver/devices"><i class="fw fw-mobile"></i>My Devices</a></li> <li><a href="/iotserver/devices"><i class="fw fw-mobile"></i>Device Management</a></li>
{{#if permissions.ADD_USER}} {{#if permissions.ADD_USER}}
<li><a href="/iotserver/users"><i class="fw fw-user"></i>User Management</a></li> <li><a href="/iotserver/users"><i class="fw fw-user"></i>User Management</a></li>
{{/if}} {{/if}}
<li><a href="/iotserver/policies"><i class="fw fw-policy"></i>Policy Management</a></li> <li><a href="#"><i class="fw fw-policy"></i>Policy Management</a></li>
<li><a href="/iotserver/dashboard"><i class="fw fw-settings"></i>Dashboard</a></li> <li><a href="/iotserver/dashboard"><i class="fw fw-settings"></i>Dashboard</a></li>
</ul> </ul>
</div> </div>

@ -1,6 +1,6 @@
function onRequest(context) { function onRequest(context) {
var constants = require("/modules/constants.js"); var constants = require("/modules/constants.js");
var carbonUser = session.get(constants.USER_SESSION_KEY); var user = session.get(constants.USER_SESSION_KEY);
var links = { var links = {
"users": [], "users": [],
@ -18,7 +18,7 @@ function onRequest(context) {
}; };
var deviceMgtLink = { var deviceMgtLink = {
title: "Go back to My Devices", title: "Go back to Device Management",
icon: "fw-left-arrow", icon: "fw-left-arrow",
url: "/iotserver/devices" url: "/iotserver/devices"
}; };
@ -38,12 +38,9 @@ function onRequest(context) {
links.analytics.push(deviceMgtLink); links.analytics.push(deviceMgtLink);
links['device-mgt'].push(dashboardLink); links['device-mgt'].push(dashboardLink);
if (!carbonUser) { if (user) {
//user is not logged in
}else{
var userModule = require("/modules/user.js").userModule; var userModule = require("/modules/user.js").userModule;
var permissions = userModule.getUIPermissions(); var permissions = userModule.getUIPermissions();
context.permissions = permissions; context.permissions = permissions;
//if (permissions.ADD_USER) { //if (permissions.ADD_USER) {

@ -1,4 +0,0 @@
function onRequest(context){
context.sketchPath = "api/device/sketch/download";
return context;
}

@ -93,7 +93,7 @@
<div class="col-lg-5 col-md-6 col-centered"> <div class="col-lg-5 col-md-6 col-centered">
<h3>Device was successfully updated.</h3> <h3>Device was successfully updated.</h3>
<div class="buttons"> <div class="buttons">
<a href="#" id="edit-device-200-link" class="btn-operations"> <a href="#" id="remove-device-200-link" class="btn-operations">
&nbsp;&nbsp;&nbsp;&nbsp;Ok&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;Ok&nbsp;&nbsp;&nbsp;&nbsp;
</a> </a>
</div> </div>

@ -168,7 +168,7 @@ function loadDevices(searchType, searchParam) {
addDeviceSelectedClass(this); addDeviceSelectedClass(this);
}); });
attachEvents(); attachEvents();
//formatDates(); formatDates();
} }
}; };
invokerUtil.get(serviceURL, invokerUtil.get(serviceURL,
@ -253,25 +253,24 @@ function attachEvents() {
$("a#remove-device-yes-link").click(function () { $("a#remove-device-yes-link").click(function () {
invokerUtil.get( invokerUtil.get(
removeDeviceAPI, removeDeviceAPI,
function (data,txtStatus,jqxhr) { function (data) {
var status = jqxhr.status; if (data == 200) {
if (status == 200) { $("#" + username).addClass("hide");
$(modalPopupContent).html($('#remove-device-200-content').html()); $(modalPopupContent).html($('#remove-device-200-content').html());
$('div[data-deviceid="' + deviceId + '"]').remove();
$("a#remove-device-200-link").click(function () { $("a#remove-device-200-link").click(function () {
hidePopup(); hidePopup();
}); });
} else if (status == 400) { } else if (data == 400) {
$(modalPopupContent).html($('#remove-device-400-content').html()); $(modalPopupContent).html($('#remove-device-400-content').html());
$("a#remove-device-400-link").click(function () { $("a#remove-device-400-link").click(function () {
hidePopup(); hidePopup();
}); });
} else if (status == 403) { } else if (data == 403) {
$(modalPopupContent).html($('#remove-device-403-content').html()); $(modalPopupContent).html($('#remove-device-403-content').html());
$("a#remove-device-403-link").click(function () { $("a#remove-device-403-link").click(function () {
hidePopup(); hidePopup();
}); });
} else if (status == 409) { } else if (data == 409) {
$(modalPopupContent).html($('#remove-device-409-content').html()); $(modalPopupContent).html($('#remove-device-409-content').html());
$("a#remove-device-409-link").click(function () { $("a#remove-device-409-link").click(function () {
hidePopup(); hidePopup();
@ -309,30 +308,28 @@ function attachEvents() {
showPopup(); showPopup();
$("a#edit-device-yes-link").click(function () { $("a#edit-device-yes-link").click(function () {
var newDeviceName = $('#edit-device-name').val(); var device={"device":{"name" : $('#edit-device-name').val()}};
var device={"device":{"name" : newDeviceName}};
invokerUtil.post( invokerUtil.post(
editDeviceAPI, editDeviceAPI,
device, device,
function (data,txtStatus,jqxhr) { function (data) {
var status = jqxhr.status; if (data == 200) {
if (status == 200) { $("#" + username).addClass("hide");
$(modalPopupContent).html($('#edit-device-200-content').html()); $(modalPopupContent).html($('#edit-device-200-content').html());
$("div[data-deviceid='"+deviceId+"'] .ast-name").html(newDeviceName);
$("a#edit-device-200-link").click(function () { $("a#edit-device-200-link").click(function () {
hidePopup(); hidePopup();
}); });
} else if (status == 400) { } else if (data == 400) {
$(modalPopupContent).html($('#edit-device-400-content').html()); $(modalPopupContent).html($('#edit-device-400-content').html());
$("a#edit-device-400-link").click(function () { $("a#edit-device-400-link").click(function () {
hidePopup(); hidePopup();
}); });
} else if (status == 403) { } else if (data == 403) {
$(modalPopupContent).html($('#edit-device-403-content').html()); $(modalPopupContent).html($('#edit-device-403-content').html());
$("a#edit-device-403-link").click(function () { $("a#edit-device-403-link").click(function () {
hidePopup(); hidePopup();
}); });
} else if (status == 409) { } else if (data == 409) {
$(modalPopupContent).html($('#edit-device-409-content').html()); $(modalPopupContent).html($('#edit-device-409-content').html());
$("a#edit-device-409-link").click(function () { $("a#edit-device-409-link").click(function () {
hidePopup(); hidePopup();

@ -1,6 +1,6 @@
{{#each devices}} {{#each devices}}
{{deviceMap this}} {{deviceMap this}}
<div class="ctrl-wr-asset" data-deviceid="{{deviceIdentifier}}" data-type="{{type}}"> <div class="ctrl-wr-asset" data-deviceid="{{id}}" data-type="{{type}}">
<div class="itm-select"> <div class="itm-select">
<label class="wr-input-control checkbox"> <label class="wr-input-control checkbox">
<input type="checkbox"/> <input type="checkbox"/>
@ -12,7 +12,7 @@
<div class="ast-img"><img src="{{../imageLocation}}{{type}}.png"/></div> <div class="ast-img"><img src="{{../imageLocation}}{{type}}.png"/></div>
<div class="ast-desc"> <div class="ast-desc">
<div class="ast-title"> <div class="ast-title">
<h3 class="ast-name">{{name}}</h3> <h3 class="ast-name">Device {{name}}</h3>
<span class="ast-auth">Device Type: {{type}}</span> <span class="ast-auth">Device Type: {{type}}</span>
<span class="ast-auth">Date of Enrollment: <span class="formatDate">{{dateOfEnrolment}}</span></span> <span class="ast-auth">Date of Enrollment: <span class="formatDate">{{dateOfEnrolment}}</span></span>
</div> </div>

@ -0,0 +1,90 @@
{{#zone "main"}}
<div class="container container-bg white-bg">
<div class=" margin-top-double">
<div class="row row padding-top-double padding-bottom-double margin-bottom-double">
<div class="col-lg-12 margin-top-double">
<h1 class="grey ">Fire Alarm</h1>
<hr>
<p class="margin-bottom-double light-grey ">Connect your Fire Alarm device
to the WSO2 device cloud. </p>
</div>
</div>
<div class="row margin-bottom-double">
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-4 padding-top">
<img src="{{self.publicURL}}/images/firealarm.png" class="img-responsive">
</div>
<div class="col-xs-12 col-sm-6 col-md-8 col-lg-8 padding-top">
<h2 class="uppercase">Ingredients</h2>
<hr>
<p class="grey margin-top">Hardware Requirements </p>
<br><br>
<span class="fw-stack fw-lg margin-right">
<i class="fw fw-ring fw-stack-2x"> </i>
<i class="fw fw-right-arrow-2 fw-stack-1x"></i>
</span>Arduino Uno<br><br>
<span class="fw-stack fw-lg margin-right">
<i class="fw fw-ring fw-stack-2x"> </i>
<i class="fw fw-right-arrow-2 fw-stack-1x"></i>
</span>Arduino Ethernet / WiFi Shield
<br /><br />
<form method="POST" class="float-left margin-right"
action="{{sketchPath}}">
<input type="hidden" name="deviceType" value="firealarm" />
<input type="hidden" name="sketchType" value="firealarm_wifi" />
<button class="wr-btn" type="submit">Create Sketch for
Wifi
</button>
</form>
<form method="POST" class="form-login-box float-left"
action="{{sketchPath}}">
<input type="hidden" name="deviceType" value="firealarm" />
<input type="hidden" name="sketchType" value="firealarm" />
<button class="wr-btn margin-right" type="submit">Create
Sketch
for Ethernet</button>
</form>
<br/>
</div>
<div class ="col-xs-12 col-sm-6 col-md-3 col-lg-12 padding-double grey-bg ">
<h2 class="uppercase">Prepare</h2><hr>
<p class="grey margin-top">Get your device ready </p>
<div class="margin-doubles padding-top-double light-grey margin-left-double margin-bottom ">
<span class="circle">01 </span> <span class="padding-left"> Mount the Ethernet / Wifi shield on the Arduino Uno device.</span>
</div>
<div class="margin-doubles padding-top-double light-grey margin-left-double margin-bottom">
<span class="circle">02 </span> <span class="padding-left"> Mount the Ethernet / Wifi shield on the Arduino Uno device.</span>
</div>
<div class="margin-doubles padding-top-double margin-bottom-double light-grey margin-left-double margin-bottom">
<span class="circle">03 </span> <span class="padding-left"> Mount the Ethernet / Wifi shield on the Arduino Uno device.</span>
</div>
</div>
</div>
<div class="row row padding-top-double padding-bottom-double margin-bottom-double ">
<div class="col-lg-12 margin-top-double">
<h2 class="uppercase ">Connect (Quickstart)</h2>
<hr>
<p class="margin-bottom-double light-grey ">Internet of Things Foundation Quickstart connection </p>
<div class="margin-doubles padding-top-double light-grey margin-left-double margin-bottom ">
<span class="circle">01 </span> <span class="padding-left">Use the following command to download the installer from GitHub:</span><br>
</div>
<div class="margin-doubles padding-top-double light-grey margin-left-double margin-bottom ">
<span class="circle">02 </span> <span class="padding-left">Download the Sketch installer from the Arduino website http://arduino.cc/en/Main/Software</span><br>
</div>
<div class="margin-doubles padding-top-double light-grey margin-left-double margin-bottom ">
<span class="circle">03 </span> <span class="padding-left"> Install the Sketch program</span><br>
</div>
<div class="margin-doubles padding-top-double light-grey margin-left-double margin-bottom ">
<span class="circle">04 </span> <span class="padding-left">Use the Sketch program to open the samples code samples/quickstart/quickstart.ino</span><br>
</div>
<div class="margin-doubles padding-top-double light-grey margin-left-double margin-bottom ">
<span class="circle">05 </span> <span class="padding-left">View the lower part of the Sketch pad window to check that the COM connection is shown as active</span><br>
</div>
</div>
</div>
</div>
{{/zone}}
{{#zone "topCss"}}
<link href="{{self.publicURL}}/css/fontwso2.css" rel="stylesheet">
<link href="{{self.publicURL}}/css/fontwso2-extend.css" rel="stylesheet">
{{/zone}}

@ -0,0 +1,4 @@
function onRequest(context){
context.sketchPath = "../api/device/sketch/download";
return context;
}

@ -0,0 +1,4 @@
function onRequest(context){
context.sketchPath = "../api/device/sketch/download";
return context;
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save