diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/api/invoker-api.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/api/invoker-api.jag new file mode 100644 index 000000000..191614376 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/api/invoker-api.jag @@ -0,0 +1,104 @@ +<% +/* + * Copyright (c) 2016, 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 log = new Log("api/invoker-api.jag"); + +var uri = request.getRequestURI(); +var uriMatcher = new URIMatcher(String(uri)); + +var constants = require("/app/modules/constants.js"); +var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; +var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; + +if (uriMatcher.match("/{context}/api/invoker/execute/")) { + var restAPIRequestDetails = request.getContent(); + + var requestMethod = restAPIRequestDetails["requestMethod"]; + var requestURL = restAPIRequestDetails["requestURL"]; + var requestPayload = restAPIRequestDetails["requestPayload"]; + + if (!requestMethod) { + requestMethod = parse(restAPIRequestDetails)["requestMethod"]; + } + + if (!requestURL) { + requestURL = parse(restAPIRequestDetails)["requestURL"]; + } + + if (!requestPayload) { + requestPayload = parse(restAPIRequestDetails)["requestPayload"]; + } + + var restAPIEndpoint = devicemgtProps["httpsURL"] + requestURL; + + try { + switch (requestMethod) { + case constants["HTTP_GET"]: + serviceInvokers.XMLHttp.get( + restAPIEndpoint, + function (restAPIResponse) { + response["status"] = restAPIResponse["status"]; + if (restAPIResponse["responseText"]) { + response["content"] = restAPIResponse["responseText"]; + } + } + ); + break; + case constants["HTTP_POST"]: + serviceInvokers.XMLHttp.post( + restAPIEndpoint, + requestPayload, + function (restAPIResponse) { + response["status"] = restAPIResponse["status"]; + if (restAPIResponse["responseText"]) { + response["content"] = restAPIResponse["responseText"]; + } + } + ); + break; + case constants["HTTP_PUT"]: + serviceInvokers.XMLHttp.put( + restAPIEndpoint, + requestPayload, + function (restAPIResponse) { + response["status"] = restAPIResponse["status"]; + if (restAPIResponse["responseText"]) { + response["content"] = restAPIResponse["responseText"]; + } + } + ); + break; + case constants["HTTP_DELETE"]: + serviceInvokers.XMLHttp.delete( + restAPIEndpoint, + function (restAPIResponse) { + response["status"] = restAPIResponse["status"]; + if (restAPIResponse["responseText"]) { + response["content"] = restAPIResponse["responseText"]; + } + } + ); + break; + } + } catch (e) { + throw new Error("Exception occurred while trying to access " + + "backend REST API services from Jaggery API invoker layer", e); + } +} +%> diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/api/user-api.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/api/user-api.jag new file mode 100644 index 000000000..b038e66ad --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/api/user-api.jag @@ -0,0 +1,185 @@ +<% +/* + * Copyright (c) 2016, 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/user-api.jag"); + +var constants = require("/app/modules/constants.js"); +var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; +var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; +var deviceModule = require("/app/modules/business-controllers/device.js")["deviceModule"]; +var utility = require("/app/modules/utility.js").utility; +var apiWrapperUtil = require("/app/modules/oauth/token-handlers.js")["handlers"]; +var util = require("/app/modules/oauth/token-handler-utils.js")["utils"]; + +var responseProcessor = require('utils').response; + +var result; + +if (uriMatcher.match("/{context}/api/user/authenticate")) { + var username = request.getParameter("username"); + var password = request.getParameter("password"); + //Check if a username and password is provided + if ((!username) || (!password)) { + response = responseProcessor.buildErrorResponse(response, 400, 'Username and Password must be provided'); + } else { + try { + userModule.login(username, password, function (user) { + if (log.isDebugEnabled()) { + log.debug("User Logged In : " + user); + } + apiWrapperUtil.setupTokenPairByPasswordGrantType(username, password); + }, function () { + response = responseProcessor.buildSuccessResponse(response, 200, {'sessionId': session.getId()}); + }); + } catch (e) { + log.error("Exception occurred while a user tried to login to MDM", e); + response = responseProcessor.buildErrorResponse(response, 401, 'username/password is incorrect'); + } + } +} else if (uriMatcher.match("/{context}/api/user/login/")) { + username = request.getParameter("username"); + password = request.getParameter("password"); + username = util.decode(username); + password = util.decode(password); + try { + userModule.login(username, password, function (user) { + if (log.isDebugEnabled()) { + log.debug("User Logged In : " + user); + } + + apiWrapperUtil.setupTokenPairByPasswordGrantType(username, password); + var permissions = userModule.getUIPermissions(); + if (permissions.VIEW_DASHBOARD) { + response.sendRedirect(constants.WEB_APP_CONTEXT); + } else { + response.sendRedirect(constants.WEB_APP_CONTEXT + "/devices"); + } + }, function () { + response.sendRedirect(devicemgtProps.appContext + "login?#auth-failed"); + }); + } catch (e) { + log.error("Exception occurred while a user tried to login to MDM", e); + response.sendRedirect(devicemgtProps.appContext + "login?#error"); + } +} else if (uriMatcher.match("/{context}/api/user/logout/")) { + userModule.logout(function () { + response.sendRedirect(devicemgtProps.appContext + "login"); + }); +} else if (uriMatcher.match("/{context}/api/user/devices/")) { + /* + @Deprecated + */ + if (userModule.isAuthorized("/permission/admin/device-mgt/user/devices/list")) { + carbonUser = session.get(constants.USER_SESSION_KEY); + result = deviceModule.listDevicesForUser(carbonUser.username); + } else { + response.sendError(403); + } +} else if (uriMatcher.match("/{context}/api/user/{username}/invite")) { + /* + @Deprecated + */ + if (userModule.isAuthorized("/permission/admin/device-mgt/admin/user/invite")) { + elements = uriMatcher.elements(); + username = elements.username; + userModule.inviteUser(username); + } else { + response.sendError(403); + } +} else if (uriMatcher.match("/{context}/api/user/add")) { + /* + @Deprecated + */ + if (userModule.isAuthorized("/permission/admin/device-mgt/admin/user/add")) { + addUserFormData = request.getContent(); + username = addUserFormData.username; + firstname = addUserFormData.firstname; + lastname = addUserFormData.lastname; + emailAddress = addUserFormData.emailAddress; + + if (!addUserFormData.userRoles) { + userRoles = null; + } else { + userRoles = String(addUserFormData.userRoles).split(","); + } + if (username.length < devicemgtProps.usernameLength) { + log.error("Username Must be between 1 and " + devicemgtProps.usernameLength + " characters long"); + result = "Username Must be between 1 and " + devicemgtProps.usernameLength + " characters long"; + } else { + try { + result = userModule.addUser(username, firstname, lastname, emailAddress, userRoles); + } catch (e) { + log.error("Exception occurred while trying to add a user to MDM User Store", e); + // http status code 400 refers to - Bad request. + result = 400; + } + } + } else { + // http status code 403 refers to - forbidden. + result = 403; + } +} else if (uriMatcher.match("/{context}/api/user/register")) { + + addUserFormData = request.getContent(); + username = addUserFormData.username; + firstname = addUserFormData.firstname; + lastname = addUserFormData.lastname; + emailAddress = addUserFormData.emailAddress; + password = addUserFormData.password; + userRoles = ["internal/devicemgt-user"]; + + try { + result = userModule.registerUser(username, firstname, lastname, emailAddress, password, + userRoles); + } catch (e) { + log.error("Exception occurred while trying to registering a new user to DC User Store", e); + // http status code 400 refers to - Bad request. + result = 400; + } + +} else if (uriMatcher.match("/{context}/api/user/{username}/remove")) { + /* + @Deprecated + */ + if (userModule.isAuthorized("/permission/admin/device-mgt/admin/user/remove")) { + elements = uriMatcher.elements(); + username = elements.username; + try { + result = userModule.removeUser(username); + } catch (e) { + log.error("Exception occurred while trying to remove a user from MDM User Store", e); + // http status code 400 refers to - Bad request. + result = 400; + } + } else { + // http status code 403 refers to - forbidden. + result = 403; + } +} else if (uriMatcher.match("/{context}/api/user/all")) { + result = userModule.getUsers(); +} + +// returning the result. +if (result) { + print(result); +} +%> diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/conf/app-conf.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/conf/app-conf.json new file mode 100644 index 000000000..f3dae0dea --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/conf/app-conf.json @@ -0,0 +1,52 @@ +{ + "appName": "WSO2 Enterprise Mobility Manager", + "cachingEnabled": false, + "debuggingEnabled": false, + "permissionRoot": "/", + "loginPage": "cdmf.page.sign-in", + "adminServicesUrl": "https://${server.ip}:${server.https_port}/admin/services/", + "authModule": { + "enabled": true, + "login": { + "onSuccess": { + "script": "/app/modules/login.js", + "page": "mdm.page.dashboard" + }, + "onFail": { + "script": "/app/modules/login.js", + "page": "cdmf.page.sign-in" + } + }, + "logout": { + "onSuccess": { + "page": "cdmf.page.sign-in" + }, + "onFail": { + "page": "mdm.page.dashboard" + } + }, + "sso": { + "enabled": false, + "issuer" : "emm", + "appName" : "emm", + "identityProviderUrl" : "https://localhost:9443/samlsso", + "acs": "https://localhost:9443/emm/uuf/sso/acs", + "identityAlias": "wso2carbon", + "responseSigningEnabled" : "true", + "useTenantKey": false + } + }, + "generalConfig" : { + "host" : "https://localhost:9443", + "companyName" : "WSO2 Enterprise Mobility Manager", + "browserTitle" : "WSO2 EMM", + "copyrightPrefix" : "\u00A9 %date-year%, ", + "copyrightOwner" : "WSO2 Inc.", + "copyrightOwnersSite" : "http://www.wso2.org", + "copyrightSuffix" : "" + }, + "errorPages": { + "404": "mdm.page.error", + "default": "uuf.page.error" + } +} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/conf/config.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/conf/config.json new file mode 100644 index 000000000..67df3a79d --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/conf/config.json @@ -0,0 +1,108 @@ +{ + "appContext" : "/emm-web-agent/", + "apiContext" : "api", + "httpsURL" : "%https.ip%", + "httpURL" : "%http.ip%", + "enrollmentDir": "/emm-web-agent/enrollment", + "iOSConfigRoot" : "%https.ip%/ios-enrollment/", + "iOSAPIRoot" : "%https.ip%/ios/", + "dynamicClientRegistrationEndPoint" : "%https.ip%/dynamic-client-web/register/", + "adminService":"%https.ip%", + "idPServer":"%https.ip%", + "callBackUrl":"%https.ip%/mdm-admin", + "oauthProvider": { + "appRegistration": { + "appType": "webapp", + "clientName": "emm-web-agent", + "owner": "admin@carbon.super", + "dynamicClientAppRegistrationServiceURL": "%https.ip%/dynamic-client-web/register", + "apiManagerClientAppRegistrationServiceURL": "%https.ip%/api-application-registration/register/tenants", + "grantType": "password refresh_token urn:ietf:params:oauth:grant-type:saml2-bearer", + "tokenScope": "admin", + "callbackUrl": "%https.ip%/api/device-mgt/v1.0" + }, + "tokenServiceURL": "%https.ip%/oauth2/token" + }, + "adminUser":"admin", + "usernameLength":30, + "device" : { + "ios" : { + "location" : "%http.ip%/emm-web-agent/public/mdm.page.enrollments.ios.download-agent/asset/ios-agent.ipa", + "bundleID" : "org.wso2.carbon.emm.iOSMDMAgent", + "version" : "1.0", + "appName" : "EMM iOS Agent" + } + }, + "androidAgentApp" : "android-agent.apk", + "windowsConfigRoot" : "%http.ip%/api/device-mgt/windows/v1.0/services/federated/bst/authentication", + "ssoConfiguration" : { + "enabled" : false, + "issuer" : "mdm", + "appName" : "admin_emm-web-agent", + "identityProviderURL" : "%https.ip%/sso/samlsso.jag", + "responseSigningEnabled" : "true", + "keyStorePassword" : "wso2carbon", + "identityAlias" : "wso2carbon", + "keyStoreName" : "/repository/resources/security/wso2carbon.jks" + }, + "generalConfig" : { + "host" : "%https.ip%", + "companyName" : "WSO2 Enterprise Mobility Manager", + "browserTitle" : "WSO2 EMM", + "copyrightText" : "\u00A9 %date-year%, WSO2 Inc. (http://www.wso2.org) All Rights Reserved." + }, + "isOAuthEnabled" : true, + "scopes" : ["activity:view", + "application:install", + "application:uninstall", + "device:view", + "user:modify", + "configuration:view", + "configuration:modify", + "device:list", + "device:search", + "notification:view", + "policy:list", + "policy:add", + "polciy:modify", + "policy:view", + "role:list", + "role:add", + "role:view", + "role:modify", + "user:list", + "user:add", + "user:view", + "certificate:view", + "certificate:add", + "certificate:modify", + "device:android:get-applications", + "device:android:blacklist-applications", + "device:android:change-lock-code", + "device:android:clear-password", + "device:android:vpn", + "device:android:wifi", + "device:android:camera", + "device:android:encrypt", + "device:android:enterprise-wipe", + "device:android:info", + "device:android:install-application", + "device:android:location", + "device:android:lock", + "device:android:mute", + "device:android:reboot", + "device:android:ring", + "device:android:send-notification", + "device:android:set-password-policy", + "device:android:webclip", + "device:android:uninstall-application", + "device:android:unlock", + "device:android:update-application", + "device:android:upgrade-firmware", + "device:android:wipe", + "device:configuration:view", + "device:android:configuration:modify", + "device:android:enroll", + "device:android:event:publish", + "device:android:event:view"] +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/layouts/mdm.layout.enrollment.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/layouts/mdm.layout.enrollment.hbs new file mode 100644 index 000000000..cee58594d --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/layouts/mdm.layout.enrollment.hbs @@ -0,0 +1,67 @@ +{{!-- Copyright (c) 2016, 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. --}} + +{{!-- Copyright (c) 2016, 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. --}} +{{~defineZone "accessControl"~}} + + + + + + {{defineZone "favicon"}} + + {{defineZone "title"}} + + {{defineZone "topCss"}} + {{defineZone "topJs"}} + + +
+
+
+ +
+
+
+
+

{{defineZone "headerTitle"}}

+
+
+ + {{defineZone "content"}} + +
+ {{!-- {{ defineZone "footer"}} --}} +
+{{defineZone "bottomJs" }} + + \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/device.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/device.js new file mode 100644 index 000000000..dbc76aabc --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/device.js @@ -0,0 +1,348 @@ +/* + * Copyright (c) 2016, 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 deviceModule; +deviceModule = function () { + var log = new Log("/app/modules/business-controllers/device.js"); + + var utility = require('/app/modules/utility.js').utility; + var constants = require('/app/modules/constants.js'); + var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; + var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; + +// var ArrayList = Packages.java.util.ArrayList; +// var Properties = Packages.java.util.Properties; +// var DeviceIdentifier = Packages.org.wso2.carbon.device.mgt.common.DeviceIdentifier; +// var DeviceManagerUtil = Packages.org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil; +// var SimpleOperation = Packages.org.wso2.carbon.device.mgt.core.operation.mgt.SimpleOperation; +// var ConfigOperation = Packages.org.wso2.carbon.device.mgt.core.operation.mgt.ConfigOperation; +// var CommandOperation = Packages.org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation; + + var publicMethods = {}; + var privateMethods = {}; + +// var deviceCloudService = devicemgtProps["httpsURL"] + "/common/device_manager"; + + privateMethods.validateAndReturn = function (value) { + return (value == undefined || value == null) ? constants.UNSPECIFIED : value; + }; + + /* + @Deprecated + */ +// publicMethods.listDevices = function () { +// var carbonUser = session.get(constants.USER_SESSION_KEY); +// var utility = require('/app/modules/utility.js').utility; +// if (!carbonUser) { +// log.error("User object was not found in the session"); +// throw constants.ERRORS.USER_NOT_FOUND; +// } +// try { +// utility.startTenantFlow(carbonUser); +// var deviceManagementService = utility.getDeviceManagementService(); +// var devices = deviceManagementService.getAllDevices(); +// var deviceList = []; +// var i, device, propertiesList, deviceObject; +// for (i = 0; i < devices.size(); i++) { +// device = devices.get(i); +// propertiesList = DeviceManagerUtil.convertDevicePropertiesToMap(device.getProperties()); +// +// deviceObject = {}; +// deviceObject[constants.DEVICE_IDENTIFIER] = +// privateMethods.validateAndReturn(device.getDeviceIdentifier()); +// deviceObject[constants.DEVICE_NAME] = +// privateMethods.validateAndReturn(device.getName()); +// deviceObject[constants.DEVICE_OWNERSHIP] = +// privateMethods.validateAndReturn(device.getEnrolmentInfo().getOwnership()); +// deviceObject[constants.DEVICE_OWNER] = +// privateMethods.validateAndReturn(device.getEnrolmentInfo().getOwner()); +// deviceObject[constants.DEVICE_TYPE] = +// privateMethods.validateAndReturn(device.getType()); +// deviceObject[constants.DEVICE_PROPERTIES] = {}; +// if (device.getType() == constants.PLATFORM_IOS) { +// deviceObject[constants.DEVICE_PROPERTIES][constants.DEVICE_MODEL] = +// privateMethods.validateAndReturn(propertiesList.get(constants.DEVICE_PRODUCT)); +// deviceObject[constants.DEVICE_PROPERTIES][constants.DEVICE_VENDOR] = constants.VENDOR_APPLE; +// } else { +// deviceObject[constants.DEVICE_PROPERTIES][constants.DEVICE_MODEL] = +// privateMethods.validateAndReturn(propertiesList.get(constants.DEVICE_MODEL)); +// deviceObject[constants.DEVICE_PROPERTIES][constants.DEVICE_VENDOR] = +// privateMethods.validateAndReturn(propertiesList.get(constants.DEVICE_VENDOR)); +// } +// deviceObject[constants.DEVICE_PROPERTIES][constants.DEVICE_OS_VERSION] = +// privateMethods.validateAndReturn(propertiesList.get(constants.DEVICE_OS_VERSION)); +// +// deviceList.push(deviceObject); +// } +// return deviceList; +// } catch (e) { +// throw e; +// } finally { +// utility.endTenantFlow(); +// } +// }; + + /* + @Deprecated + */ + /* + Get the supported features by the device type + */ +// publicMethods.getFeatures = function (deviceType) { +// var carbonUser = session.get(constants.USER_SESSION_KEY); +// var utility = require('/app/modules/utility.js').utility; +// if (!carbonUser) { +// log.error("User object was not found in the session"); +// throw constants.ERRORS.USER_NOT_FOUND; +// } +// try { +// utility.startTenantFlow(carbonUser); +// var deviceManagementService = utility.getDeviceManagementService(); +// var features = deviceManagementService.getFeatureManager(deviceType).getFeatures(); +// var featuresConverted = {}; +// if (features) { +// var i, feature, featureObject; +// for (i = 0; i < features.size(); i++) { +// feature = features.get(i); +// featureObject = {}; +// featureObject[constants.FEATURE_NAME] = feature.getName(); +// featureObject[constants.FEATURE_DESCRIPTION] = feature.getDescription(); +// featuresConverted[feature.getName()] = featureObject; +// } +// } +// return featuresConverted; +// } catch (e) { +// throw e; +// } finally { +// utility.endTenantFlow(); +// } +// }; + + /* + @Deprecated + */ +// publicMethods.performOperation = function (devices, operation) { +// var carbonUser = session.get(constants.USER_SESSION_KEY); +// var utility = require('/app/modules/utility.js').utility; +// if (!carbonUser) { +// log.error("User object was not found in the session"); +// throw constants.ERRORS.USER_NOT_FOUND; +// } +// try { +// utility.startTenantFlow(carbonUser); +// var deviceManagementService = utility.getDeviceManagementService(); +// var operationInstance; +// if (operation.type == "COMMAND") { +// operationInstance = new CommandOperation(); +// } else if (operation.type == "CONFIG") { +// operationInstance = new ConfigOperation(); +// } else { +// operationInstance = new SimpleOperation(); +// } +// operationInstance.setCode(operation.featureName); +// var props = new Properties(); +// var i, object; +// for (i = 0; i < operation.properties.length; i++) { +// object = properties[i]; +// props.setProperty(object.key, object.value); +// } +// operationInstance.setProperties(props); +// var deviceList = new ArrayList(); +// var j, device, deviceIdentifier; +// for (j = 0; j < devices.length; i++) { +// device = devices[j]; +// deviceIdentifier = new DeviceIdentifier(); +// deviceIdentifier.setId(device.id); +// deviceIdentifier.setType(device.type); +// deviceList.add(deviceIdentifier); +// } +// deviceManagementService.addOperation(operationInstance, deviceList); +// } catch (e) { +// throw e; +// } finally { +// utility.endTenantFlow(); +// } +// }; + + /* + @Deprecated + */ +// privateMethods.getDevice = function (type, deviceId) { +// var carbonUser = session.get(constants.USER_SESSION_KEY); +// var utility = require('/app/modules/utility.js').utility; +// if (!carbonUser) { +// log.error("User object was not found in the session"); +// throw constants.ERRORS.USER_NOT_FOUND; +// } +// try { +// utility.startTenantFlow(carbonUser); +// var deviceManagementService = utility.getDeviceManagementService(); +// var deviceIdentifier = new DeviceIdentifier(); +// deviceIdentifier.setType(type); +// deviceIdentifier.setId(deviceId); +// return deviceManagementService.getDevice(deviceIdentifier); +// } catch (e) { +// throw e; +// } finally { +// utility.endTenantFlow(); +// } +// }; + + /* + @Updated + */ + publicMethods.viewDevice = function (deviceType, deviceId) { + 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 utility = require('/app/modules/utility.js')["utility"]; + try { + utility.startTenantFlow(carbonUser); + + var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/devices/view?type=" + deviceType + + "&id=" + deviceId; + return serviceInvokers.XMLHttp.get( + url, function (responsePayload) { + var device = responsePayload.responseContent; + if (device) { + var propertiesList = device["properties"]; + var properties = {}; + if (propertiesList) { + for (var i = 0; i < propertiesList.length; i++) { + properties[propertiesList[i]["name"]] = propertiesList[i]["value"]; + } + } + var deviceObject = {}; + deviceObject[constants["DEVICE_IDENTIFIER"]] = device["deviceIdentifier"]; + deviceObject[constants["DEVICE_NAME"]] = device["name"]; + deviceObject[constants["DEVICE_OWNERSHIP"]] = device["enrolmentInfo"]["ownership"]; + deviceObject[constants["DEVICE_OWNER"]] = device["enrolmentInfo"]["owner"]; + deviceObject[constants["DEVICE_STATUS"]] = device["enrolmentInfo"]["status"]; + deviceObject[constants["DEVICE_TYPE"]] = device["type"]; + if (device["type"] == constants["PLATFORM_IOS"]) { + properties[constants["DEVICE_MODEL"]] = properties[constants["DEVICE_PRODUCT"]]; + delete properties[constants["DEVICE_PRODUCT"]]; + properties[constants["DEVICE_VENDOR"]] = constants["VENDOR_APPLE"]; + } + deviceObject[constants["DEVICE_PROPERTIES"]] = properties; + return deviceObject; + } + }, + function (responsePayload) { + var response = {}; + response["status"] = "error"; + return response; + } + ); + } catch (e) { + throw e; + } finally { + utility.endTenantFlow(); + } + }; + + // Refactored methods + publicMethods.getDevicesCount = function () { + var carbonUser = session.get(constants.USER_SESSION_KEY); + if (carbonUser) { + var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; + var uiPermissions = userModule.getUIPermissions(); + var url; + if (uiPermissions.LIST_DEVICES) { + url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/devices/count"; + } else if (uiPermissions.LIST_OWN_DEVICES) { + url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/devices/user/" + + carbonUser.username + + "/count"; + } else { + log.error("Access denied for user: " + carbonUser.username); + return -1; + } + return serviceInvokers.XMLHttp.get( + url, function (responsePayload) { + return responsePayload; + }, + function (responsePayload) { + log.error(responsePayload); + return -1; + } + ); + } else { + log.error("User object was not found in the session"); + throw constants["ERRORS"]["USER_NOT_FOUND"]; + } + }; + + publicMethods.getDeviceTypes = function () { + var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/devices/types"; + return serviceInvokers.XMLHttp.get( + url, function (responsePayload) { + return responsePayload; + }, + function (responsePayload) { + log.error(responsePayload); + return -1; + } + ); + }; + + //Old methods + //TODO: make sure these methods are updated + /* + @Updated + */ + publicMethods.getLicense = function (deviceType) { + var url; + var license; + if (deviceType == "windows") { + url = devicemgtProps["httpURL"] + "/mdm-windows-agent/services/device/license"; + } else if (deviceType == "ios") { + url = devicemgtProps["httpsURL"] + "/ios-enrollment/license/"; + } + if (url != null && url != undefined) { + return serviceInvokers.XMLHttp.get( + url, function (responsePayload) { + return "" + parse(responsePayload.responseText).text; + }, + function (responsePayload) { + return null; + } + ); + } + return null; + }; + + publicMethods.getDevices = function (userName) { + var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/devices/user/" + userName; + return serviceInvokers.XMLHttp.get( + url, function (responsePayload) { + for (var i = 0; i < responsePayload.length; i++) { + responsePayload[i].thumb = utility.getDeviceThumb(responsePayload[i].type); + } + return responsePayload; + }, + function (responsePayload) { + log.error(responsePayload); + return -1; + } + ); + }; + return publicMethods; +}(); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/group.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/group.js new file mode 100644 index 000000000..02b2198b4 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/group.js @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2016, 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 groupModule = {}; +(function (groupModule) { + var log = new Log("/app/modules/business-controllers/group.js"); + + var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; + var constants = require('/app/modules/constants.js'); + var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; + var utility = require("/app/modules/utility.js").utility; + var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; + + var groupServiceEndpoint = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/groups"; + + var user = session.get(constants.USER_SESSION_KEY); + + var endPoint; + + groupModule.getGroupCount = function () { + var permissions = userModule.getUIPermissions(); + if (permissions.LIST_ALL_GROUPS) { + endPoint = groupServiceEndpoint + "/count"; + } else if (permissions.LIST_GROUPS) { + endPoint = groupServiceEndpoint + "/user/" + user.username + "/count"; + } else { + log.error("Access denied for user: " + carbonUser.username); + return -1; + } + return serviceInvokers.XMLHttp.get( + endPoint, function (responsePayload) { + return responsePayload; + }, + function (responsePayload) { + log.error(responsePayload); + return -1; + } + ); + }; + + groupModule.getGroupDeviceCount = function (groupName, owner) { + endPoint = groupServiceEndpoint + "/owner/" + owner + "/name/" + groupName + "/devices/count"; + return serviceInvokers.XMLHttp.get( + endPoint, function (responsePayload) { + return responsePayload; + }, + function (responsePayload) { + log.error(responsePayload); + return -1; + } + ); + }; + + groupModule.getGroupDevices = function (groupName, owner) { + endPoint = groupServiceEndpoint + "/owner/" + owner + "/name/" + groupName + "/devices"; + return serviceInvokers.XMLHttp.get( + endPoint, function (responsePayload) { + return responsePayload; + }, + function (responsePayload) { + log.error(responsePayload); + return responsePayload; + } + ); + }; + +}(groupModule)); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/operation.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/operation.js new file mode 100644 index 000000000..e96ffcdec --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/operation.js @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2016, 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 operationModule = function () { + var log = new Log("/app/modules/business-controllers/operation.js"); + var utility = require('/app/modules/utility.js').utility; + var constants = require('/app/modules/constants.js'); + var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; + var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; + + var publicMethods = {}; + var privateMethods = {}; + + /** + * This method reads the token from the Token client and return the access token. + * If the token pair s not set in the session this will send a redirect to the login page. + */ + function getAccessToken(deviceType, owner, deviceId) { + var TokenClient = Packages.org.wso2.carbon.device.mgt.iot.apimgt.TokenClient; + var accessTokenClient = new TokenClient(deviceType); + var accessTokenInfo = accessTokenClient.getAccessToken(owner, deviceId); + return accessTokenInfo.getAccess_token(); + } + + privateMethods.getOperationsFromFeatures = function (deviceType, operationType) { + var url = devicemgtProps["httpsURL"] + constants.ADMIN_SERVICE_CONTEXT + "/features/" + deviceType; + var featuresList = serviceInvokers.XMLHttp.get(url, function (responsePayload) { + var features = responsePayload; + var featureList = []; + var feature; + for (var i = 0; i < features.length; i++) { + feature = {}; + var analyticStreams = utility.getDeviceTypeConfig(deviceType)["analyticStreams"]; + if (analyticStreams) { + for (var stream in analyticStreams) { + if (analyticStreams[stream].name == features[i].name) { + feature.ui_unit = analyticStreams[stream].ui_unit; + break; + } + } + } + + feature["operation"] = features[i].code; + feature["name"] = features[i].name; + feature["description"] = features[i].description; + feature["deviceType"] = deviceType; + feature["params"] = []; + var metaData = features[i].metadataEntries; + if (metaData) { + for (var j = 0; j < metaData.length; j++) { + feature["params"].push(metaData[j].value); + } + featureList.push(feature); + } + } + return featureList; + }, function (responsePayload) { + var response = {}; + response["status"] = "error"; + return response; + } + ); + return featuresList; + }; + + publicMethods.getControlOperations = function (deviceType) { + var operations = privateMethods.getOperationsFromFeatures(deviceType, "operation"); + for (var op in operations) { + var iconPath = utility.getOperationIcon(deviceType, operations[op].operation); + if (iconPath) { + operations[op]["icon"] = iconPath; + } + } + return operations; + }; + + publicMethods.getMonitorOperations = function (deviceType) { + return privateMethods.getOperationsFromFeatures(deviceType, "monitor"); + }; + + publicMethods.handlePOSTOperation = function (deviceType, operation, deviceId, params) { + var user = session.get(constants.USER_SESSION_KEY); + var endPoint = devicemgtProps["httpsURL"] + '/' + deviceType + "/controller/" + operation; + var header = '{"owner":"' + user.username + '","deviceId":"' + deviceId + + '","protocol":"mqtt", "sessionId":"' + session.getId() + '", "' + + constants.AUTHORIZATION_HEADER + '":"' + constants.BEARER_PREFIX + + getAccessToken(deviceType, user.username, deviceId) + '"}'; + return post(endPoint, params, JSON.parse(header), "json"); + }; + + publicMethods.handleGETOperation = function (deviceType, operation, operationName, deviceId) { + var user = session.get(constants.USER_SESSION_KEY); + var endPoint = devicemgtProps["httpsURL"] + '/' + deviceType + "/controller/" + operation; + var header = '{"owner":"' + user.username + '","deviceId":"' + deviceId + + '","protocol":"mqtt", "' + constants.AUTHORIZATION_HEADER + '":"' + + constants.BEARER_PREFIX + getAccessToken(deviceType, user.username, deviceId) + + '"}'; + var result = get(endPoint, {}, JSON.parse(header), "json"); + if (result.data) { + var values = result.data.sensorValue.split(','); + if (operationName == 'gps') { + result.data.map = { + lat: parseFloat(values[0]), + lng: parseFloat(values[1]) + } + } else { + var sqSum = 0; + for (var v in values) { + sqSum += Math.pow(values[v], 2); + } + result.data[operationName] = Math.sqrt(sqSum); + } + delete result.data['sensorValue']; + } + return result; + }; + + return publicMethods; +}(); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/policy.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/policy.js new file mode 100644 index 000000000..00b82116c --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/policy.js @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2016, 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("/app/modules/business-controllers/policy.js"); + + var constants = require('/app/modules/constants.js'); + var utility = require("/app/modules/utility.js")["utility"]; + var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; + var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; + + var publicMethods = {}; + var privateMethods = {}; + + privateMethods.handleGetAllPoliciesResponse = function (backendResponse) { + var response = {}; + if (backendResponse.status == 200 && backendResponse.responseText) { + var isUpdated = false; + var policyListFromRestEndpoint = parse(backendResponse.responseText)["policies"]; + + var policyListToView = []; + var i, policyObjectFromRestEndpoint, policyObjectToView; + for (i = 0; i < policyListFromRestEndpoint.length; i++) { + // get list object + policyObjectFromRestEndpoint = policyListFromRestEndpoint[i]; + // populate list object values to view-object + policyObjectToView = {}; + policyObjectToView["id"] = policyObjectFromRestEndpoint["id"]; + policyObjectToView["priorityId"] = policyObjectFromRestEndpoint["priorityId"]; + policyObjectToView["name"] = policyObjectFromRestEndpoint["policyName"]; + policyObjectToView["platform"] = policyObjectFromRestEndpoint["profile"]["deviceType"]; + policyObjectToView["icon"] = utility.getDeviceThumb(policyObjectToView["platform"]); + policyObjectToView["ownershipType"] = policyObjectFromRestEndpoint["ownershipType"]; + + var assignedRoleCount = policyObjectFromRestEndpoint["roles"].length; + var assignedUserCount = policyObjectFromRestEndpoint["users"].length; + + if (assignedRoleCount == 0) { + policyObjectToView["roles"] = "None"; + } else if (assignedRoleCount == 1) { + policyObjectToView["roles"] = policyObjectFromRestEndpoint["roles"][0]; + } else if (assignedRoleCount > 1) { + policyObjectToView["roles"] = policyObjectFromRestEndpoint["roles"][0] + ", ..."; + } + + if (assignedUserCount == 0) { + policyObjectToView["users"] = "None"; + } else if (assignedUserCount == 1) { + policyObjectToView["users"] = policyObjectFromRestEndpoint["users"][0]; + } else if (assignedUserCount > 1) { + policyObjectToView["users"] = policyObjectFromRestEndpoint["users"][0] + ", ..."; + } + + policyObjectToView["compliance"] = policyObjectFromRestEndpoint["compliance"]; + + if (policyObjectFromRestEndpoint["active"] == true && + policyObjectFromRestEndpoint["updated"] == true) { + policyObjectToView["status"] = "Active/Updated"; + isUpdated = true; + } else if (policyObjectFromRestEndpoint["active"] == true && + policyObjectFromRestEndpoint["updated"] == false) { + policyObjectToView["status"] = "Active"; + } else if (policyObjectFromRestEndpoint["active"] == false && + policyObjectFromRestEndpoint["updated"] == true) { + policyObjectToView["status"] = "Inactive/Updated"; + isUpdated = true; + } else if (policyObjectFromRestEndpoint["active"] == false && + policyObjectFromRestEndpoint["updated"] == false) { + policyObjectToView["status"] = "Inactive"; + } + // push view-objects to list + policyListToView.push(policyObjectToView); + } + // generate response + response.updated = isUpdated; + response.status = "success"; + response.content = policyListToView; + + return response; + } else { + response.status = "error"; + /* backendResponse.responseText == "Scope validation failed" + Here the response.context("Scope validation failed") is used other then response.status(401). + Reason for this is IDP return 401 as the status in 4 different situations such as, + 1. UnAuthorized. + 2. Scope Validation Failed. + 3. Permission Denied. + 4. Access Token Expired. + 5. Access Token Invalid. + In these cases in order to identify the correct situation we have to compare the unique value from status and + context which is context. + */ + if (backendResponse.responseText == "Scope validation failed") { + response.content = "Permission Denied"; + } else { + response.content = backendResponse.responseText; + } + return response; + } + }; + + /* + @Updated + */ + publicMethods.getAllPolicies = function () { + 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"]; + } + try { + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + + "/policies?offset=0&limit=100"; + return serviceInvokers.XMLHttp.get(url, privateMethods.handleGetAllPoliciesResponse); + } catch (e) { + throw e; + } + }; + + /* + @Updated - used by getAllPolicies + */ + privateMethods.getElementsInAString = function (elementList) { + var i, elementsInAString = ""; + for (i = 0; i < elementList.length; i++) { + if (i == elementList.length - 1) { + elementsInAString += elementList[i]; + } else { + elementsInAString += elementList[i] + ", "; + } + } + return elementsInAString; + }; + + return publicMethods; +}(); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/user.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/user.js new file mode 100644 index 000000000..93f76b3e8 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/business-controllers/user.js @@ -0,0 +1,540 @@ +/* + * Copyright (c) 2016, 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. + */ + +/* + * This module contains user and roles related functionality. + */ +var userModule = function () { + var log = new Log("/app/modules/business-controllers/user.js"); + + var constants = require("/app/modules/constants.js"); + var utility = require("/app/modules/utility.js")["utility"]; + var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; + var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; + + /* Initializing user manager */ + var carbon = require("carbon"); + var url = carbon.server.address("https") + "/admin/services"; + var server = new carbon.server.Server(url); + + var publicMethods = {}; + var privateMethods = {}; + + /** + * Get the carbon user object from the session. If not found - it will throw a user not found error. + * @returns {object} carbon user object + */ + privateMethods.getCarbonUser = function () { + var carbon = require("carbon"); + var carbonUser = session.get(constants["USER_SESSION_KEY"]); + var utility = require("/modules/utility.js")["utility"]; + if (!carbonUser) { + log.error("User object was not found in the session"); + throw constants["ERRORS"]["USER_NOT_FOUND"]; + } + return carbonUser; + }; + + /** + * Only GET method is implemented for now since there are no other type of methods used this method. + * @param url - URL to call the backend without the host + * @param method - HTTP Method (GET, POST) + * @returns An object with 'status': 'success'|'error', 'content': {} + */ + privateMethods.callBackend = function (url, method) { + if (constants["HTTP_GET"] == method) { + return serviceInvokers.XMLHttp.get(url, + function (backendResponse) { + var response = {}; + response.content = backendResponse.responseText; + if (backendResponse.status == 200) { + response.status = "success"; + } else if (backendResponse.status == 400 || backendResponse.status == 401 || + backendResponse.status == 404 || backendResponse.status == 500) { + response.status = "error"; + } + return response; + } + ); + } else { + log.error("Runtime error : This method only support HTTP GET requests."); + } + }; + + /** + * Register user to dc-user-store. + * + * @param username Username of the user + * @param firstname First name of the user + * @param lastname Last name of the user + * @param emailAddress Email address of the user + * @param password Password of the user + * @param userRoles Roles assigned to the user + * + * @returns {number} HTTP Status code 201 if succeeded, 409 if user already exists + */ + publicMethods.registerUser = function (username, firstname, lastname, emailAddress, password, userRoles) { + var carbon = require('carbon'); + var tenantId = carbon.server.tenantId(); + var url = carbon.server.address('https') + "/admin/services"; + var server = new carbon.server.Server(url); + var userManager = new carbon.user.UserManager(server, tenantId); + + try { + if (userManager.userExists(username)) { + if (log.isDebugEnabled()) { + log.debug("A user with name '" + username + "' already exists."); + } + // http status code 409 refers to - conflict. + return constants.HTTP_CONFLICT; + } else { + var defaultUserClaims = privateMethods.buildDefaultUserClaims(firstname, lastname, emailAddress); + userManager.addUser(username, password, userRoles, defaultUserClaims, "default"); + if (log.isDebugEnabled()) { + log.debug("A new user with name '" + username + "' was created."); + } + // http status code 201 refers to - created. + return constants.HTTP_CREATED; + } + } catch (e) { + throw e; + } + }; + + /* + @Updated + */ + publicMethods.getUsers = function () { + var carbonUser = session.get(constants["USER_SESSION_KEY"]); + var utility = require("/app/modules/utility.js")["utility"]; + if (!carbonUser) { + log.error("User object was not found in the session"); + throw constants["ERRORS"]["USER_NOT_FOUND"]; + } + try { + utility.startTenantFlow(carbonUser); + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users?offset=0&limit=100"; + var response = privateMethods.callBackend(url, constants["HTTP_GET"]); + if (response.status == "success") { + response.content = parse(response.content).users; + } + return response; + } catch (e) { + throw e; + } finally { + utility.endTenantFlow(); + } + }; + + /** + * Return a User object from the backend by calling the JAX-RS + * @param username + * @returns {object} a response object with status and content on success. + */ + publicMethods.getUser = function (username) { + var carbonUser = privateMethods.getCarbonUser(); + try { + utility.startTenantFlow(carbonUser); + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users/" + + encodeURIComponent(username); + var response = privateMethods.callBackend(url, constants["HTTP_GET"]); + response["content"] = parse(response.content); + response["userDomain"] = carbonUser.domain; + return response; + } catch (e) { + throw e; + } finally { + utility.endTenantFlow(); + } + }; + + /** + * Returns a set of roles assigned to a particular user + * @param username + * @returns {object} a response object with status and content on success. + */ + publicMethods.getRolesByUsername = function (username) { + var carbonUser = privateMethods.getCarbonUser(); + try { + utility.startTenantFlow(carbonUser); + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/users/" + + encodeURIComponent(username) + "/roles"; + return privateMethods.callBackend(url, constants["HTTP_GET"]); + } catch (e) { + throw e; + } finally { + utility.endTenantFlow(); + } + }; + + /* + @NewlyAdded + */ + publicMethods.getUsersByUsername = function () { + var carbonUser = session.get(constants["USER_SESSION_KEY"]); + var utility = require("/app/modules/utility.js")["utility"]; + if (!carbonUser) { + log.error("User object was not found in the session"); + throw constants["ERRORS"]["USER_NOT_FOUND"]; + } + try { + utility.startTenantFlow(carbonUser); + var url = devicemgtProps["httpsURL"] + "/mdm-admin/users/users-by-username"; + return privateMethods.callBackend(url, constants["HTTP_GET"]); + } catch (e) { + throw e; + } finally { + utility.endTenantFlow(); + } + }; + + /* + @Updated + */ + /** + * Get User Roles from user store (Internal roles not included). + */ + publicMethods.getRoles = function () { + var carbonUser = session.get(constants["USER_SESSION_KEY"]); + var utility = require("/app/modules/utility.js")["utility"]; + if (!carbonUser) { + log.error("User object was not found in the session"); + throw constants["ERRORS"]["USER_NOT_FOUND"]; + } + try { + utility.startTenantFlow(carbonUser); + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + + "/roles?offset=0&limit=100"; + var response = privateMethods.callBackend(url, constants["HTTP_GET"]); + if (response.status == "success") { + response.content = parse(response.content).roles; + } + return response; + } catch (e) { + throw e; + } finally { + utility.endTenantFlow(); + } + }; + + /* + @Updated + */ + /** + * Get User Roles from user store (Internal roles not included). + * @returns {object} a response object with status and content on success. + */ + publicMethods.getRolesByUserStore = function () { + var ROLE_LIMIT = devicemgtProps["pageSize"]; + var carbonUser = session.get(constants["USER_SESSION_KEY"]); + var utility = require("/app/modules/utility.js")["utility"]; + if (!carbonUser) { + log.error("User object was not found in the session"); + throw constants["ERRORS"]["USER_NOT_FOUND"]; + } + try { + utility.startTenantFlow(carbonUser); + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/roles?limit=" + ROLE_LIMIT; + var response = privateMethods.callBackend(url, constants["HTTP_GET"]); + if (response.status == "success") { + response.content = parse(response.content).roles; + } + return response; + } catch (e) { + throw e; + } finally { + utility.endTenantFlow(); + } + }; + + /** + * Get Platforms. + */ + //TODO Move this piece of logic out of user.js to somewhere else appropriate. + publicMethods.getPlatforms = function () { + var carbonUser = session.get(constants["USER_SESSION_KEY"]); + var utility = require("/app/modules/utility.js")["utility"]; + if (!carbonUser) { + log.error("User object was not found in the session"); + throw constants["ERRORS"]["USER_NOT_FOUND"]; + } + try { + utility.startTenantFlow(carbonUser); + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + "/admin/device-types"; + var response = privateMethods.callBackend(url, constants["HTTP_GET"]); + if (response.status == "success") { + response.content = parse(response.content); + } + return response; + } catch (e) { + throw e; + } finally { + utility.endTenantFlow(); + } + }; + + /** + * Get role + */ + publicMethods.getRole = function (roleName) { + var carbonUser = session.get(constants["USER_SESSION_KEY"]); + var utility = require("/app/modules/utility.js")["utility"]; + if (!carbonUser) { + log.error("User object was not found in the session"); + throw constants["ERRORS"]["USER_NOT_FOUND"]; + } + try { + utility.startTenantFlow(carbonUser); + var url = devicemgtProps["httpsURL"] + devicemgtProps["backendRestEndpoints"]["deviceMgt"] + + "/roles/" + encodeURIComponent(roleName); + var response = privateMethods.callBackend(url, constants["HTTP_GET"]); + response.content = parse(response.content); + return response; + } catch (e) { + throw e; + } finally { + utility.endTenantFlow(); + } + }; + + /** + * Authenticate a user when he or she attempts to login to MDM. + * + * @param username Username of the user + * @param password Password of the user + * @param successCallback Function to be called at the event of successful authentication + * @param failureCallback Function to be called at the event of failed authentication + */ + publicMethods.login = function (username, password, successCallback, failureCallback) { + var carbonModule = require("carbon"); + var carbonServer = application.get("carbonServer"); + try { + // check if the user is an authenticated user. + var isAuthenticated = carbonServer.authenticate(username, password); + if (!isAuthenticated) { + failureCallback("authentication"); + return; + } + var tenantUser = carbonModule.server.tenantUser(username); + var isAuthorizedToLogin = privateMethods.isAuthorizedToLogin(tenantUser); + if (!isAuthorizedToLogin) { + failureCallback("authorization"); + return; + } + session.put(constants.USER_SESSION_KEY, tenantUser); + successCallback(tenantUser); + } catch (e) { + throw e; + } + }; + + publicMethods.logout = function (successCallback) { + session.invalidate(); + successCallback(); + }; + + publicMethods.isAuthorized = function (permission) { + var carbon = require("carbon"); + var carbonServer = application.get("carbonServer"); + var carbonUser = session.get(constants.USER_SESSION_KEY); + var utility = require('/app/modules/utility.js').utility; + if (!carbonUser) { + log.error("User object was not found in the session"); + response.sendError(401, constants.ERRORS.USER_NOT_FOUND); + exit(); + } + + try { + utility.startTenantFlow(carbonUser); + var tenantId = carbon.server.tenantId(); + var userManager = new carbon.user.UserManager(server, tenantId); + var user = new carbon.user.User(userManager, carbonUser.username); + return user.isAuthorized(permission, "ui.execute"); + } catch (e) { + throw e; + } finally { + utility.endTenantFlow(); + } + }; + + privateMethods.isAuthorizedToLogin = function(carbonUser) { + var utility = require('/app/modules/utility.js').utility; + try { + utility.startTenantFlow(carbonUser); + var tenantId = carbon.server.tenantId(); + var userManager = new carbon.user.UserManager(server, tenantId); + var user = new carbon.user.User(userManager, carbonUser.username); + return user.isAuthorized("/permission/admin/login", "ui.execute"); + } catch (e) { + throw e; + } finally { + utility.endTenantFlow(); + } + }; + + publicMethods.getUIPermissions = function () { + var permissions = {}; + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/devices/list")) { + permissions["LIST_DEVICES"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/user/devices/list")) { + permissions["LIST_OWN_DEVICES"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/groups/list")) { + permissions["LIST_ALL_GROUPS"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/user/groups/list")) { + permissions["LIST_GROUPS"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/users/list")) { + permissions["LIST_USERS"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/roles/list")) { + permissions["LIST_ROLES"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/policies/list")) { + permissions["LIST_ALL_POLICIES"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/user/policies/list")) { + permissions["LIST_POLICIES"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/user/devices/add")) { + permissions["ADD_DEVICE"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/user/groups/add")) { + permissions["ADD_GROUP"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/users/add")) { + permissions["ADD_USER"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/users/remove")) { + permissions["REMOVE_USER"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/roles/add")) { + permissions["ADD_ROLE"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/policies/add")) { + permissions["ADD_ADMIN_POLICY"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/user/policies/add")) { + permissions["ADD_POLICY"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/policies/priority")) { + permissions["CHANGE_POLICY_PRIORITY"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/dashboard/view")) { + permissions["VIEW_DASHBOARD"] = true; + } + if (publicMethods.isAuthorized("/permission/admin/device-mgt/admin/platform-configs/view")) { + permissions["TENANT_CONFIGURATION"] = true; + } + + return permissions; + }; + + publicMethods.addPermissions = function (permissionList, path, init) { + var registry, carbon = require("carbon"); + var carbonServer = application.get("carbonServer"); + var utility = require('/app/modules/utility.js').utility; + var options = {system: true}; + if (init == "login") { + try { + 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; + } + utility.startTenantFlow(carbonUser); + var tenantId = carbon.server.tenantId(); + if (carbonUser) { + options.tenantId = tenantId; + } + registry = new carbon.registry.Registry(carbonServer, options); + var i, permission, resource; + for (i = 0; i < permissionList.length; i++) { + permission = permissionList[i]; + resource = { + collection: true, + name: permission.name, + properties: { + name: permission.name + } + }; + if (path != "") { + registry.put("/_system/governance/permission/admin/" + path + "/" + permission.key, resource); + } else { + registry.put("/_system/governance/permission/admin/" + permission.key, resource); + } + } + } catch (e) { + throw e; + } finally { + utility.endTenantFlow(); + } + } else { + registry = new carbon.registry.Registry(carbonServer, options); + var i, permission, resource; + for (i = 0; i < permissionList.length; i++) { + permission = permissionList[i]; + resource = { + collection: true, + name: permission.name, + properties: { + name: permission.name + } + }; + if (path != "") { + registry.put("/_system/governance/permission/admin/" + path + "/" + permission.key, resource); + } else { + registry.put("/_system/governance/permission/admin/" + permission.key, resource); + } + } + } + }; + + /** + * Private method to be used by addUser() to + * retrieve secondary user stores. + * This needs Authentication since the method access admin services. + * + * @returns Array of secondary user stores. + */ + publicMethods.getSecondaryUserStores = function () { + var returnVal = []; + var endpoint = devicemgtProps["adminService"] + constants["USER_STORE_CONFIG_ADMIN_SERVICE_END_POINT"]; + var wsPayload = ""; + serviceInvokers.WS.soapRequest( + "urn:getSecondaryRealmConfigurations", + wsPayload, + endpoint, + function (wsResponse) { + var domainIDs = stringify(wsResponse.*::['return']. *::domainId.text()); + if (domainIDs != "\"\"") { + var regExpForSearch = new RegExp(constants["USER_STORES_NOISY_CHAR"], "g"); + domainIDs = domainIDs.replace(regExpForSearch, ""); + returnVal = domainIDs.split(constants["USER_STORES_SPLITTING_CHAR"]); + } + }, function (e) { + log.error("Error retrieving secondary user stores", e); + }, + constants["SOAP_VERSION"]); + return returnVal; + }; + + return publicMethods; +}(); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/conf-reader/main.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/conf-reader/main.js new file mode 100644 index 000000000..f81849fe3 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/conf-reader/main.js @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2016, 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 conf = function () { + var conf = application.get("CONF"); + if (!conf) { + conf = require("/app/conf/config.json"); + var pinch = require("/app/modules/conf-reader/pinch.min.js")["pinch"]; + var server = require("carbon")["server"]; + pinch(conf, /^/, + function (path, key, value) { + if ((typeof value === "string") && value.indexOf("%https.ip%") > -1) { + //noinspection JSUnresolvedFunction + return value.replace("%https.ip%", server.address("https")); + } else if ((typeof value === "string") && value.indexOf("%http.ip%") > -1) { + //noinspection JSUnresolvedFunction + return value.replace("%http.ip%", server.address("http")); + } else if ((typeof value === "string") && value.indexOf("%date-year%") > -1) { + var year = new Date().getFullYear(); + return value.replace("%date-year%", year); + } + return value; + } + ); + application.put("CONF", conf); + } + return conf; +}(); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/conf-reader/pinch.min.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/conf-reader/pinch.min.js new file mode 100644 index 000000000..5d22ca0eb --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/conf-reader/pinch.min.js @@ -0,0 +1,26 @@ +/* +* Copyright (c) 2011 František Hába +* +* Permission is hereby granted, free of charge, to any person obtaining a copy of +* this software and associated documentation files (the 'Software'), to deal in +* the Software without restriction, including without limitation the rights to use, +* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the +* Software, and to permit persons to whom the Software is furnished to do so, +* subject to the following conditions: +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. + +* THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +* +* Reference:- https://github.com/Baggz/Pinch +* */ +(function(){var k=function(a,c){return a.length!==c.length?!1:a.every(function(a,b){return c[b]===a})},j=function(a,c,d){var b,e;if("[object Array]"===Object.prototype.toString.call(a)){b=0;for(e=a.length;b \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-controller.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-controller.jag new file mode 100644 index 000000000..f6bafeacd --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-controller.jag @@ -0,0 +1,80 @@ +<% +/* + * Copyright (c) 2016, 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 log = new Log("/modules/enrollments/ios/agent-controller.jag"); + +var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; +var UAParser = require("/app/modules/ua-parser.min.js")["UAParser"]; +var tokenUtil = require("/app/modules/oauth/token-handlers.js")["handlers"]; +var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; +var constants = require("/app/modules/constants.js"); + +var parser = new UAParser(); +var userAgent = request.getHeader("User-Agent"); +parser.setUA(userAgent); +parser.getResult(); +var os = parser.getOS(); +var platform = os.name; + +if (platform != "iOS") { + response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); +} else if (session.get("lastAccessedPage") != "login-agent") { + response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); +} else { + var username = request.getParameter("username"); + var password = request.getParameter("password"); + var ownership = request.getParameter("ownership"); + var domain = request.getParameter("domain"); + if (!username || !password || !ownership) { + response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); + } else { + var fullyQualifiedUsername = username; + if(domain != null && domain != ''){ + fullyQualifiedUsername = username + "@" + domain; + } + tokenUtil.setupTokenPairByPasswordGrantType(fullyQualifiedUsername, password); + var authUrl = mdmProps["iOSConfigRoot"] + "authenticate"; + var payload = { + "username": username, "password": password, "ownership": ownership, + "tenantDomain": domain + }; + serviceInvokers.XMLHttp.post( + authUrl, + stringify(payload), + function (restAPIResponse) { + var status = restAPIResponse["status"]; + if (status == 200) { + var responseContent = parse(restAPIResponse.responseText); + session.put("authenticatedUser", username); + session.put("authenticatedUserPassword", password); + session.put("authenticatedUserDeviceOwnership", ownership); + session.put("authenticatedUserDomain", domain); + session.put("iOSChallengeToken", responseContent["challengeToken"]); + response.sendRedirect(mdmProps["appContext"] + "enrollments/ios/license-agent"); + } else if (status == 403) { + response.sendRedirect(mdmProps["appContext"] + "enrollments/ios/login-agent?error=auth-failed"); + } else { + // one visible possibility would be server sending 500 + response.sendRedirect(mdmProps["appContext"] + "enrollments/ios/login-agent?error=unexpected"); + } + } + ); + } +} +%> diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-enroll.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-enroll.jag new file mode 100644 index 000000000..eb3e3acbc --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent-enroll.jag @@ -0,0 +1,85 @@ +<% +/* + * Copyright (c) 2016, 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 log = new Log("/app/modules/enrollments/ios/agent-enroll.jag"); + +var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; +var UAParser = require("/app/modules/ua-parser.min.js")["UAParser"]; + +var parser = new UAParser(); +var userAgent = request.getHeader("User-Agent"); +parser.setUA(userAgent); +parser.getResult(); +var os = parser.getOS(); +var platform = os.name; + +if (platform != "iOS") { + response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); +} else if (session.get("lastAccessedPage") != "license-agent") { + response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); +} else { + var authenticatedUser = session.get("authenticatedUser"); + if (!authenticatedUser) { + response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); + } else { + var HttpClient = Packages.org.apache.commons.httpclient.HttpClient; + var PostMethod = Packages.org.apache.commons.httpclient.methods.PostMethod; + var Header = Packages.org.apache.commons.httpclient.Header; + var StringRequestEntity = Packages.org.apache.commons.httpclient.methods.StringRequestEntity; + var ByteArrayInputStream = Packages.java.io.ByteArrayInputStream; + + var client = new HttpClient(); + var enrollUrl = mdmProps["iOSConfigRoot"] + "enroll"; + var method = new PostMethod(enrollUrl); + var header = new Header(); + + header.setName("Content-Type"); + header.setValue("application/json"); + method.addRequestHeader(header); + + var username = authenticatedUser; + var password = session.get("authenticatedUserPassword"); + var tenantDomain = session.get("authenticatedUserDomain"); + var challengeToken = session.get("iOSChallengeToken"); + + var inputs = {"username": username, "password": password, "challengeToken": challengeToken, "tenantDomain": tenantDomain}; + var stringRequestEntity = new StringRequestEntity(stringify(inputs)); + method.setRequestEntity(stringRequestEntity); + try { + client.executeMethod(method); + var status = method.getStatusCode(); + if (status == 200) { + session.put("enrolledUser", authenticatedUser); + var stream = method.getResponseBody(); + var byteArrayInputStream = new ByteArrayInputStream(stream); + response.contentType = "application/x-apple-aspen-config"; + print(new Stream(byteArrayInputStream)); + } else { + // two visible possibilities would be server sending 401 and 500 + response.sendRedirect(mdmProps["appContext"] + "enrollments/ios/login-agent?error=unexpected"); + } + } catch (e) { + log.error("Error occurred in enrolling ios device", e); + response.sendRedirect(mdmProps["appContext"] + "enrollments/ios/login-agent?error=unexpected"); + } finally { + method.releaseConnection(); + } + } +} +%> diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent.jag new file mode 100644 index 000000000..45a08c762 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/agent.jag @@ -0,0 +1,47 @@ +<% +/* + * Copyright (c) 2016, 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 log = new Log("/app/modules/enrollments/ios/agent.jag"); + +var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; + +var userAgent = request.getHeader("User-Agent"); +var userAgentIsiPhone = (userAgent.indexOf("iPhone") > -1); +var userAgentIsiPad = (userAgent.indexOf("iPad") > -1); +var userAgentIsiPodTouch = (userAgent.indexOf("iPod Touch") > -1); + +if (!userAgentIsiPhone && !userAgentIsiPad && !userAgentIsiPodTouch) { + response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); +} else { + var enrollmentUtils = require("/app/modules/enrollments/util/utils.js")["methods"]; + var Handlebars = require("/lib/modules/handlebars/handlebars-v2.0.0.js")["Handlebars"]; + var template = Handlebars.compile(enrollmentUtils. + getResource("/app/modules/enrollments/ios/config/ios-manifest-template.hbs")); + + var iOSManifest = template({ + "url" : mdmProps["device"]["ios"]["location"], + "bundleID" : mdmProps["device"]["ios"]["bundleID"], + "bundleVersion" : mdmProps["device"]["ios"]["version"], + "appName" : mdmProps["device"]["ios"]["appName"] + }); + + response.contentType = "application/xml"; + response.content = iOSManifest; +} +%> \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/certificate.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/certificate.jag new file mode 100644 index 000000000..d3cb1c5d6 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/certificate.jag @@ -0,0 +1,26 @@ +<% +var HttpClient = Packages.org.apache.commons.httpclient.HttpClient; +var GetMethod = Packages.org.apache.commons.httpclient.methods.GetMethod; +var StringRequestEntity = Packages.org.apache.commons.httpclient.methods.StringRequestEntity; + +var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; +var caURL = mdmProps["iOSConfigRoot"] + 'ca'; +var client = new HttpClient(); +var method = new GetMethod(caURL); + +try { + client.executeMethod(method); + var status = method.getStatusCode(); + + if (status == 200) { + var stream = method.getResponseBody(); + response.contentType = "application/x-x509-ca-cert"; + var byteArrayInputStream = new Packages.java.io.ByteArrayInputStream(stream); + print(new Stream(byteArrayInputStream)); + } else { + response.sendRedirect("/errorpage"); + } +} catch (e) { + log.error("Error occurred when downloading CA " + e); +} +%> diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/config/ios-manifest-template.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/config/ios-manifest-template.hbs new file mode 100644 index 000000000..37deaf50c --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/ios/config/ios-manifest-template.hbs @@ -0,0 +1,31 @@ + + + + + items + + + assets + + + kind + software-package + url + {{url}} + + + metadata + + bundle-identifier + {{bundleID}} + bundle-version + {{bundleVersion}} + kind + software + title + {{appName}} + + + + + \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/util/utils.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/util/utils.js new file mode 100644 index 000000000..91175c764 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/util/utils.js @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2016, 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 methods; +methods = function () { + var log = new Log("modules/enrollments/util/utils.js"); + + var publicMethods = {}; + + publicMethods.getResource = function (resourcePath) { + var file = new File(resourcePath); + var resource = null; + try { + file.open("r"); + resource = file.readAll(); + } catch (e) { + log.error("Error in reading resource"); + } finally { + file.close(); + } + return resource; + }; + + return publicMethods; +}(); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/agent-controller.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/agent-controller.jag new file mode 100644 index 000000000..f76bcf925 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/agent-controller.jag @@ -0,0 +1,96 @@ +<% +/* + * Copyright (c) 2016, 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 log = new Log("/app/modules/enrollments/windows/agent-controller.jag"); + +var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; +var UAParser = require("/app/modules/ua-parser.min.js")["UAParser"]; +var tokenUtil = require("/app/modules/oauth/token-handlers.js")["handlers"]; +var serviceInvokers = require("/app/modules/oauth/token-protected-service-invokers.js")["invokers"]; +var constants = require("/app/modules/constants.js"); + +var parser = new UAParser(); +var userAgent = request.getHeader("User-Agent"); +parser.setUA(userAgent); +parser.getResult(); +var os = parser.getOS(); +var platform = os.name; + +if (platform != "Windows Phone") { + response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); +} else if (session.get("lastAccessedPage") != "login-agent") { + response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); +} else { + var username = request.getParameter("username"); + var email = session.get("email"); + var password = request.getParameter("password"); + var domain = request.getParameter("domain"); + if (!username || !email || !password) { + response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); + } else { + var authUrl = mdmProps["windowsConfigRoot"]; + var fullyQualifiedUsername = username; + if(domain != null && domain != ''){ + fullyQualifiedUsername = username + "@" + domain; + } + tokenUtil.setupTokenPairByPasswordGrantType(fullyQualifiedUsername, password); + var payload = { + "credentials": { + "username": username, "email": email, + "password": password, "token": getAccessToken() + } + }; + serviceInvokers.XMLHttp.post( + authUrl, + stringify(payload), + function (restAPIResponse) { + var status = restAPIResponse["status"]; + if (status == 200) { + session.put("authenticatedUser", username); + session.put("windowsBinaryToken", parse(xmlHttpRequest["responseText"]).UserToken); + response.sendRedirect(mdmProps["appContext"] + "enrollments/windows/license-agent"); + } else if (status == 403) { + response.sendRedirect(mdmProps["appContext"] + "enrollments/windows/login-agent?error=auth-failed"); + } else if (status == 409) { + response.sendRedirect(mdmProps["appContext"] + "enrollments/windows/login-agent?" + + "error=auth-failed&message=Provided Workplace email does not match with username. Please check."); + } else { + // one visible possibility would be server sending 500 + response.sendRedirect(mdmProps["appContext"] + "enrollments/windows/login-agent?error=unexpected"); + } + } + ); + } +} + + +/** + * This method reads the token pair from the session and return the access token. + * If the token pair is not set in the session, this will return null. + */ +function getAccessToken() { + var tokenPair = parse(session.get(constants["TOKEN_PAIR"])); + if (tokenPair) { + return tokenPair["accessToken"]; + } else { + return null; + } +}; + +%> \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/agent-enroll.jag b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/agent-enroll.jag new file mode 100644 index 000000000..1ad693001 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/agent-enroll.jag @@ -0,0 +1,55 @@ +<% +/* + * Copyright (c) 2016, 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 log = new Log("/app/modules/enrollments/windows/agent-enroll.jag"); + +var UAParser = require("/app/modules/ua-parser.min.js")["UAParser"]; +var parser = new UAParser(); +var userAgent = request.getHeader("User-Agent"); +parser.setUA(userAgent); +parser.getResult(); +var os = parser.getOS(); +var platform = os.name; + +if (platform != "Windows Phone") { + response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); +} else if (session.get("lastAccessedPage") != "license-agent") { + response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); +} else { + var authenticatedUser = session.get("authenticatedUser"); + if (!authenticatedUser) { + response.sendRedirect(mdmProps["appContext"] + "enrollments/error/unintentional-request"); + } else { + var enrollmentUtils = require("/modules/enrollments/util/utils.js")["methods"]; + var Handlebars = require("/lib/handlebars-v2.0.0.js")["Handlebars"]; + var template = Handlebars.compile(enrollmentUtils. + getResource("/modules/enrollments/windows/config/workplace-switch-request-template.hbs")); + + var windowsWorkplaceAppID = session.get("windowsWorkplaceAppID"); + var windowsBinaryToken = session.get("windowsBinaryToken"); + var workplaceSwitchRequest = template({ + "windowsWorkplaceAppID" : windowsWorkplaceAppID, + "windowsBinaryToken" : windowsBinaryToken + }); + + response.contentType = "text/html"; + response.content = workplaceSwitchRequest; + } +} +%> \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/config/workplace-switch-request-template.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/config/workplace-switch-request-template.hbs new file mode 100644 index 000000000..8911383b5 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/enrollments/windows/config/workplace-switch-request-template.hbs @@ -0,0 +1,20 @@ + + + + + Working... + + + + +
+

+ +
+ + \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/init.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/init.js new file mode 100644 index 000000000..d9f442cdd --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/init.js @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2016, 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 carbonModule = require("carbon"); +var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; +var carbonServer = new carbonModule.server.Server({ + tenanted: true, + url: devicemgtProps["httpsURL"] + "/admin" +}); +application.put("carbonServer", carbonServer); + +var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; +var utility = require("/app/modules/utility.js")["utility"]; + +var permissions = { + '/permission/admin/device-mgt/user': ['ui.execute'], + '/permission/admin/manage/api/subscribe': ['ui.execute'] +}; +//userModule.addRole("internal/devicemgt-user", ["admin"], permissions); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/login.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/login.js new file mode 100644 index 000000000..87f840d3c --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/login.js @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2016, 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 onSuccess; +var onFail; + +(function () { + var log = new Log("/app/modules/login.js"); + var constants = require("/app/modules/constants.js"); + onSuccess = function (context) { + var utility = require("/app/modules/utility.js").utility; + var apiWrapperUtil = require("/app/modules/oauth/token-handlers.js")["handlers"]; + if (context.input.samlToken) { + apiWrapperUtil.setupTokenPairBySamlGrantType(context.input.username, context.input.samlToken); + } else { + apiWrapperUtil.setupTokenPairByPasswordGrantType(context.input.username, context.input.password); + } + var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; + var carbonServer = require("carbon").server; + (new carbonServer.Server({url: devicemgtProps["adminService"]})) + .login(context.input.username, context.input.password); + }; + + onFail = function (error) { + log.error(error.message); + } +})(); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/oauth/token-handler-utils.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/oauth/token-handler-utils.js new file mode 100644 index 000000000..2ed241d0d --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/modules/oauth/token-handler-utils.js @@ -0,0 +1,295 @@ +/* + * Copyright (c) 2016, 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 utils = function () { + var log = new Log("/app/modules/oauth/token-handler-utils.js"); + + var deviceMgtProps = require("/app/modules/conf-reader/main.js")["conf"]; + var constants = require("/app/modules/constants.js"); + var carbon = require("carbon"); + + //noinspection JSUnresolvedVariable + var Base64 = Packages.org.apache.commons.codec.binary.Base64; + //noinspection JSUnresolvedVariable + var String = Packages.java.lang.String; + + var publicMethods = {}; + var privateMethods = {}; + + publicMethods["encode"] = function (payload) { + //noinspection JSUnresolvedFunction + return String(Base64.encodeBase64(String(payload).getBytes())); + }; + + publicMethods["decode"] = function (payload) { + //noinspection JSUnresolvedFunction + return String(Base64.decodeBase64(String(payload).getBytes())); + }; + + publicMethods["getDynamicClientAppCredentials"] = function () { + // setting up dynamic client application properties + var dcAppProperties = { + "applicationType": deviceMgtProps["oauthProvider"]["appRegistration"]["appType"], + "clientName": deviceMgtProps["oauthProvider"]["appRegistration"]["clientName"], + "owner": deviceMgtProps["oauthProvider"]["appRegistration"]["owner"], + "tokenScope": deviceMgtProps["oauthProvider"]["appRegistration"]["tokenScope"], + "grantType": deviceMgtProps["oauthProvider"]["appRegistration"]["grantType"], + "callbackUrl": deviceMgtProps["oauthProvider"]["appRegistration"]["callbackUrl"], + "saasApp" : true + }; + // calling dynamic client app registration service endpoint + var requestURL = deviceMgtProps["oauthProvider"]["appRegistration"] + ["dynamicClientAppRegistrationServiceURL"]; + var requestPayload = dcAppProperties; + + var xhr = new XMLHttpRequest(); + xhr.open("POST", requestURL, false); + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.send(stringify(requestPayload)); + + var dynamicClientAppCredentials = {}; + if (xhr["status"] == 201 && xhr["responseText"]) { + var responsePayload = parse(xhr["responseText"]); + dynamicClientAppCredentials["clientId"] = responsePayload["client_id"]; + dynamicClientAppCredentials["clientSecret"] = responsePayload["client_secret"]; + } else if (xhr["status"] == 400) { + log.error("{/app/modules/oauth/token-handler-utils.js - getDynamicClientAppCredentials()} " + + "Bad request. Invalid data provided as dynamic client application properties."); + dynamicClientAppCredentials = null; + } else { + log.error("{/app/modules/oauth/token-handler-utils.js - getDynamicClientAppCredentials()} " + + "Error in retrieving dynamic client credentials."); + dynamicClientAppCredentials = null; + } + // returning dynamic client credentials + return dynamicClientAppCredentials; + }; + + publicMethods["getTenantBasedClientAppCredentials"] = function (username, jwtToken) { + if (!username || !jwtToken) { + log.error("{/app/modules/oauth/token-handler-utils.js} Error in retrieving tenant " + + "based client app credentials. No username or jwt token is found " + + "as input - getTenantBasedClientAppCredentials(x, y)"); + return null; + } else { + //noinspection JSUnresolvedFunction, JSUnresolvedVariable + var tenantDomain = carbon.server.tenantDomain({username: username}); + if (!tenantDomain) { + log.error("{/app/modules/oauth/token-handler-utils.js} Error in retrieving tenant " + + "based client application credentials. Unable to obtain a valid tenant domain for provided " + + "username - getTenantBasedClientAppCredentials(x, y)"); + return null; + } else { + var cachedTenantBasedClientAppCredentials = privateMethods. + getCachedTenantBasedClientAppCredentials(tenantDomain); + if (cachedTenantBasedClientAppCredentials) { + return cachedTenantBasedClientAppCredentials; + } else { + // register a tenant based client app at API Manager + var applicationName = "webapp_" + tenantDomain; + var requestURL = deviceMgtProps["oauthProvider"]["appRegistration"] + ["apiManagerClientAppRegistrationServiceURL"] + + "?tenantDomain=" + tenantDomain + "&applicationName=" + applicationName; + + var xhr = new XMLHttpRequest(); + xhr.open("POST", requestURL, false); + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.setRequestHeader("Authorization", "Bearer " + jwtToken); + xhr.send(); + + if (xhr["status"] == 201 && xhr["responseText"]) { + var responsePayload = parse(xhr["responseText"]); + var tenantBasedClientAppCredentials = {}; + tenantBasedClientAppCredentials["clientId"] = responsePayload["client_id"]; + tenantBasedClientAppCredentials["clientSecret"] = responsePayload["client_secret"]; + privateMethods. + setCachedTenantBasedClientAppCredentials(tenantDomain, tenantBasedClientAppCredentials); + return tenantBasedClientAppCredentials; + } else { + log.error("{/app/modules/oauth/token-handler-utils.js} Error in retrieving tenant " + + "based client application credentials from API " + + "Manager - getTenantBasedClientAppCredentials(x, y)"); + return null; + } + } + } + } + }; + + privateMethods["setCachedTenantBasedClientAppCredentials"] = function (tenantDomain, clientAppCredentials) { + var cachedTenantBasedClientAppCredentialsMap = application.get(constants["CACHED_CREDENTIALS"]); + if (!cachedTenantBasedClientAppCredentialsMap) { + cachedTenantBasedClientAppCredentialsMap = {}; + cachedTenantBasedClientAppCredentialsMap[tenantDomain] = clientAppCredentials; + application.put(constants["CACHED_CREDENTIALS"], cachedTenantBasedClientAppCredentialsMap); + } else if (!cachedTenantBasedClientAppCredentialsMap[tenantDomain]) { + cachedTenantBasedClientAppCredentialsMap[tenantDomain] = clientAppCredentials; + } + }; + + privateMethods["getCachedTenantBasedClientAppCredentials"] = function (tenantDomain) { + var cachedTenantBasedClientAppCredentialsMap = application.get(constants["CACHED_CREDENTIALS"]); + if (!cachedTenantBasedClientAppCredentialsMap || + !cachedTenantBasedClientAppCredentialsMap[tenantDomain]) { + return null; + } else { + return cachedTenantBasedClientAppCredentialsMap[tenantDomain]; + } + }; + + publicMethods["getTokenPairByPasswordGrantType"] = function (username, password, encodedClientAppCredentials, scopes) { + if (!username || !password || !encodedClientAppCredentials || !scopes) { + log.error("{/app/modules/oauth/token-handler-utils.js} Error in retrieving access token by password " + + "grant type. No username, password, encoded client app credentials or scopes are " + + "found - getTokenPairByPasswordGrantType(a, b, c, d)"); + return null; + } else { + // calling oauth provider token service endpoint + var requestURL = deviceMgtProps["oauthProvider"]["tokenServiceURL"]; + var requestPayload = "grant_type=password&username=" + + username + "&password=" + password + "&scope=" + scopes; + + var xhr = new XMLHttpRequest(); + xhr.open("POST", requestURL, false); + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + xhr.setRequestHeader("Authorization", "Basic " + encodedClientAppCredentials); + xhr.send(requestPayload); + + if (xhr["status"] == 200 && xhr["responseText"]) { + var responsePayload = parse(xhr["responseText"]); + var tokenData = {}; + tokenData["accessToken"] = responsePayload["access_token"]; + tokenData["refreshToken"] = responsePayload["refresh_token"]; + tokenData["scopes"] = responsePayload["scope"]; + return tokenData; + } else { + log.error("{/app/modules/oauth/token-handler-utils.js} Error in retrieving access token " + + "by password grant type - getTokenPairByPasswordGrantType(a, b, c, d)"); + return null; + } + } + }; + + publicMethods["getTokenPairBySAMLGrantType"] = function (assertion, encodedClientAppCredentials, scopes) { + if (!assertion || !encodedClientAppCredentials || !scopes) { + log.error("{/app/modules/oauth/token-handler-utils.js} Error in retrieving access token by saml " + + "grant type. No assertion, encoded client app credentials or scopes are " + + "found - getTokenPairBySAMLGrantType(x, y, z)"); + return null; + } else { + var assertionXML = publicMethods.decode(assertion); + /* + TODO: make assertion extraction with proper parsing. + Since Jaggery XML parser seem to add formatting which causes signature verification to fail. + */ + var assertionStartMarker = " + * Dual licensed under GPLv2 & MIT + */ +(function(window,undefined){"use strict";var LIBVERSION="0.7.3",EMPTY="",UNKNOWN="?",FUNC_TYPE="function",UNDEF_TYPE="undefined",OBJ_TYPE="object",MAJOR="major",MODEL="model",NAME="name",TYPE="type",VENDOR="vendor",VERSION="version",ARCHITECTURE="architecture",CONSOLE="console",MOBILE="mobile",TABLET="tablet",SMARTTV="smarttv",WEARABLE="wearable",EMBEDDED="embedded";var util={extend:function(regexes,extensions){for(var i in extensions){if("browser cpu device engine os".indexOf(i)!==-1&&extensions[i].length%2===0){regexes[i]=extensions[i].concat(regexes[i])}}return regexes},has:function(str1,str2){if(typeof str1==="string"){return str2.toLowerCase().indexOf(str1.toLowerCase())!==-1}},lowerize:function(str){return str.toLowerCase()}};var mapper={rgx:function(){var result,i=0,j,k,p,q,matches,match,args=arguments;while(i0){if(q.length==2){if(typeof q[1]==FUNC_TYPE){result[q[0]]=q[1].call(this,match)}else{result[q[0]]=q[1]}}else if(q.length==3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){result[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{result[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length==4){result[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{result[q]=match?match:undefined}}}}i+=2}return result},str:function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j +
+ If you have not already enrolled this device with {{companyName}}, + Download and install following EMM Agent to continue. + +
+ +{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.js new file mode 100644 index 000000000..45dbdad72 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.js @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2016, 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. + */ + +function onRequest(context) { + var log = new Log("mdm.page.enrollments.android.agent.download"); + + var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; + var viewModel = {}; + + // setting android agent download URL + viewModel.agentDownloadURL = context.page.publicUri + "/asset/" + mdmProps["androidAgentApp"]; + var companyProps = session.get("COMPANY_DETAILS"); + if (!companyProps) { + viewModel.companyName = mdmProps.generalConfig.companyName; + } else { + viewModel.companyName = companyProps.companyName; + } + return viewModel; +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.json new file mode 100644 index 000000000..2a09cb084 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/download-agent.json @@ -0,0 +1,6 @@ +{ + "version": "1.0.0", + "uri": "/enrollments/android/download-agent", + "layout": "mdm.layout.enrollment", + "isAnonymous": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/public/asset/android-agent.apk b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/public/asset/android-agent.apk new file mode 100644 index 000000000..8f86ac592 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.android.download-agent/public/asset/android-agent.apk differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.hbs new file mode 100644 index 000000000..f263f350b --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.hbs @@ -0,0 +1,17 @@ +{{!-- Copyright (c) 2016, 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. --}} + +{{!-- This page will route into relevant download url based on User-Agent --}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.js new file mode 100644 index 000000000..5cbfb3c70 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.js @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2016, 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. + */ + +function onRequest(context) { + var log = new Log("mdm.page.enrollments.default"); + var UAParser = require("/app/modules/ua-parser.min.js")["UAParser"]; + + var parser = new UAParser(); + var userAgent = request.getHeader("User-Agent"); + parser.setUA(userAgent); + parser.getResult(); + var os = parser.getOS(); + var platform = os.name; + + if (platform == "Android") { + response.sendRedirect(context.app.context + "/enrollments/android/download-agent"); + } else if (platform == "iOS") { + response.sendRedirect(context.app.context + "/enrollments/ios/download-agent"); + } else if (platform == "Windows Phone") { + response.sendRedirect(context.app.context + "/enrollments/windows/invoke-agent"); + } else { + response.sendRedirect(context.app.context + "/enrollments/error/unintentional-request"); + } +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.json new file mode 100644 index 000000000..25b719866 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.default/default.json @@ -0,0 +1,6 @@ +{ + "version": "1.0.0", + "uri": "/enrollment", + "layout": "mdm.layout.enrollment", + "isAnonymous": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.hbs new file mode 100644 index 000000000..94e4604ef --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.hbs @@ -0,0 +1,33 @@ +{{!-- Copyright (c) 2016, 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. --}} + +{{!-- Inputting content into defined zones in enrollment layout --}} +{{unit "mdm.unit.ui.title" pageTitle="Device Enrollment"}} +{{#zone "headerTitle"}} + Unintentional Request +{{/zone}} +{{#zone "content"}} +
+

Possible Causes :

+
+ [1] You have tried making a request call intended to be made by a different Platform.
+ [2] You have tried accessing enrollment steps out of order.
+
+
+ Redirect +
+
+{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.json new file mode 100644 index 000000000..ba7b6802b --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.errors.unintentional-request/unintentional-request.json @@ -0,0 +1,6 @@ +{ + "version": "1.0.0", + "uri": "/enrollments/error/unintentional-request", + "layout": "mdm.layout.enrollment", + "isAnonymous": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.certificate-error/certificate-error.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.certificate-error/certificate-error.hbs new file mode 100644 index 000000000..3251535bb --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.certificate-error/certificate-error.hbs @@ -0,0 +1,34 @@ +{{!-- Copyright (c) 2016, 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. --}} + +{{!-- Inputting content into defined zones in enrollment layout --}} +{{unit "mdm.unit.ui.title" pageTitle="iOS Enrollment | Certificate Download Failure"}} +{{#zone "headerTitle"}} + iOS Certificate Download Failure +{{/zone}} +{{#zone "content"}} +
+

Possible Causes :

+
+ [1] Network Issue.
+ [2] Bad Request Call to Server.
+ [3] Internal Server Error.
+
+
+ Redirect +
+
+{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.certificate-error/certificate-error.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.certificate-error/certificate-error.json new file mode 100644 index 000000000..a2a10b89d --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.certificate-error/certificate-error.json @@ -0,0 +1,6 @@ +{ + "version": "1.0.0", + "uri": "/enrollments/error/ios/certificate-download-failure", + "layout": "mdm.layout.enrollment", + "isAnonymous": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.hbs new file mode 100644 index 000000000..6827ec7b0 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.hbs @@ -0,0 +1,55 @@ +{{!-- Copyright (c) 2016, 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. --}} + +{{!-- defining controlled access parameters --}} +{{#zone "accessControl"}} + {{ + unit "mdm.unit.enrollments.access-control" + allowedPlatform = "iOS" + currentPage = "download-agent" + nextPage = "login-agent" + }} +{{/zone}} +{{!-- Inputting content into defined zones in enrollment layout --}} +{{unit "mdm.unit.ui.title" pageTitle="iOS Enrollment | Install Certificate and Agent"}} +{{#zone "headerTitle"}} + iOS Enrollment +{{/zone}} +{{#zone "content"}} + {{ + unit "mdm.unit.wizard-stepper" + steps = "Install Certificate and Agent, + Login to Enterprise Mobility Manager, + Accept End User License Agreement" + currentStep = "Install Certificate and Agent" + currentStepIndex = 0 + }} +
+
+ If you have not already enrolled this device with {{companyName}}, + Install following EMM Certificate and Agent to continue. + +
+ Also note : EMM certificate should be first installed on the device for a + successful installation of the agent. + +
+
+{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.js new file mode 100644 index 000000000..cdc1d7695 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.js @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2016, 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. + */ + +function onRequest(context) { + var log = new Log("asset-download-agent-ios-unit"); + log.debug("calling asset-download-agent-ios-unit backend js"); + + var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; + var viewModel = {}; + // setting iOS certificate download URL + viewModel.emmCertificateDownloadURL = context.app.context + "/enrollment/ios/download-certificate"; + // setting iOS agent download URL + viewModel.agentDownloadURL = "itms-services://?action=download-manifest&url=" + + mdmProps["httpsURL"] + context.app.context + "/enrollment/ios/download-agent"; + var companyProps = session.get("COMPANY_DETAILS"); + if (!companyProps) { + viewModel.companyName = mdmProps.generalConfig.companyName; + } else { + viewModel.companyName = companyProps.companyName; + } + return viewModel; +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.json new file mode 100644 index 000000000..ee5e8ebae --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/download-agent.json @@ -0,0 +1,6 @@ +{ + "version": "1.0.0", + "uri": "/enrollments/ios/download-agent", + "layout": "mdm.layout.enrollment", + "isAnonymous": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/public/asset/Readme.txt b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/public/asset/Readme.txt new file mode 100644 index 000000000..d6e6df93e --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.download-agent/public/asset/Readme.txt @@ -0,0 +1 @@ +Add the iOS-agent with the name "ios-agent.ipa" into this folder. \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.hbs new file mode 100644 index 000000000..796ff5a96 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.hbs @@ -0,0 +1,59 @@ +{{!-- Copyright (c) 2016, 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. --}} + +{{!-- defining controlled access parameters --}} +{{#zone "accessControl"}} + {{ + unit "mdm.unit.enrollments.access-control" + allowedPlatform = "iOS" + currentPage = "license-agent" + lastPage = "login-agent" + nextPage = "thank-you-agent" + }} +{{/zone}} +{{!-- Inputting content into defined zones in enrollment layout --}} +{{unit "mdm.unit.ui.title" pageTitle="iOS Enrollment | Accept End User License Agreement"}} + +{{#zone "headerTitle"}} + iOS Enrollment +{{/zone}} + +{{#zone "content"}} + {{ + unit "mdm.unit.wizard-stepper" + steps = "Install Certificate and Agent, + Login to Enterprise Mobility Manager, + Accept End User License Agreement" + currentStep = "Accept End User License Agreement" + currentStepIndex = 2 + }} + {{ + unit "mdm.unit.enrollments.license-box" + platform = "ios" + languageCode = "en_US" + licenseAcceptActionURL = iosLicenseAcceptURL + }} +{{/zone}} + +{{#zone "topJs"}} + +{{/zone}} + +{{#zone "bottomJs"}} + {{js "/js/enrollment-completion-checker-ios.js"}} +{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.js new file mode 100644 index 000000000..6193ae753 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.js @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2016, 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. + */ + +function onRequest(context) { + var viewModel = {}; + // setting iOS license download URL + viewModel.iosLicenseAcceptURL = context.app.context + "/enrollment/ios/enroll"; + return viewModel; +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.json new file mode 100644 index 000000000..eaf1ab577 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/license.json @@ -0,0 +1,6 @@ +{ + "version": "1.0.0", + "uri": "/enrollments/ios/license-agent", + "layout": "mdm.layout.enrollment", + "isAnonymous": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/public/js/enrollment-completion-checker-ios.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/public/js/enrollment-completion-checker-ios.js new file mode 100644 index 000000000..169fdbdd3 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.license/public/js/enrollment-completion-checker-ios.js @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2016, 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. + */ + +$(document).ready(function () { + var iOSCheckUrl = contextPath + "/enrollment/ios/check"; + setInterval(function () { + $.post(iOSCheckUrl, function (data, status) { + var parsedData = JSON.parse(data); + var deviceId = parsedData["deviceID"]; + var refreshToken = parsedData["refreshToken"]; + var accessToken = parsedData["accessToken"]; + var clientCredentials = parsedData["clientCredentials"]; + if (deviceId) { + window.location = contextPath + "/enrollments/ios/thank-you-agent?device-id=" + encodeURI(deviceId) + + "&accessToken=" + encodeURI(accessToken) + "&refreshToken=" + encodeURI(refreshToken) + + "&clientCredentials=" + encodeURI(clientCredentials); + } + }); + }, 1000); +}); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.hbs new file mode 100644 index 000000000..a185d5f1f --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.hbs @@ -0,0 +1,45 @@ +{{!-- Copyright (c) 2016, 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. --}} + +{{!-- defining controlled access parameters --}} +{{#zone "accessControl"}} + {{ + unit "mdm.unit.enrollments.access-control" + allowedPlatform = "iOS" + currentPage = "login-agent" + lastPage = "download-agent" + nextPage = "license-agent" + }} +{{/zone}} +{{!-- Inputting content into defined zones in enrollment layout --}} +{{unit "mdm.unit.ui.title" pageTitle="iOS Enrollment | Login to Enterprise Mobility Manager"}} +{{#zone "headerTitle"}} + iOS Enrollment +{{/zone}} +{{#zone "content"}} + {{ + unit "mdm.unit.wizard-stepper" + steps = "Install Certificate and Agent, + Login to Enterprise Mobility Manager, + Accept End User License Agreement" + currentStep = "Login to Enterprise Mobility Manager" + currentStepIndex = 1 + }} + {{ + unit "mdm.unit.enrollments.login-box" + loginActionURL = iosLoginActionURL + }} +{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.js new file mode 100644 index 000000000..7ffe438b5 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.js @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2016, 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. + */ + +function onRequest(context) { + var viewModel = {}; + // setting iOS login URL + viewModel.iosLoginActionURL = context.app.context + "/enrollment/ios/login"; + return viewModel; +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.json new file mode 100644 index 000000000..26572e27a --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.login/login.json @@ -0,0 +1,6 @@ +{ + "version": "1.0.0", + "uri": "/enrollments/ios/login-agent", + "layout": "mdm.layout.enrollment", + "isAnonymous": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/public/js/enrollment-success-note-ios.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/public/js/enrollment-success-note-ios.js new file mode 100644 index 000000000..5d53d804b --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/public/js/enrollment-success-note-ios.js @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2016, 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 getParameterByName = function (name) { + name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); + var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); + return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); +}; + +$(document).ready(function () { + setTimeout(function () { + var deviceID = getParameterByName("device-id"); + var accessToken = getParameterByName("accessToken"); + var refreshToken = getParameterByName("refreshToken"); + var clientCredentials = getParameterByName("clientCredentials"); +// window.location.href = "wso2agent://" + deviceID; + window.location.href = "wso2agent://" + deviceID + "?accessToken=" + + accessToken +"&refreshToken=" + refreshToken + "&clientCredentials=" + clientCredentials; + }, 1000); +}); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.hbs new file mode 100644 index 000000000..5bc7a1ae5 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.hbs @@ -0,0 +1,52 @@ +{{!-- Copyright (c) 2016, 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. --}} + +{{!-- defining controlled access parameters --}} +{{#zone "accessControl"}} + {{ + unit "mdm.unit.enrollments.access-control" + allowedPlatform = "iOS" + currentPage = "thank-you-agent" + lastPage = "license-agent" + }} +{{/zone}} +{{!-- Inputting content into defined zones in enrollment layout --}} +{{unit "mdm.unit.ui.title" pageTitle="iOS Enrollment | Success Note"}} +{{#zone "headerTitle"}} + iOS Enrollment +{{/zone}} +{{#zone "content"}} +
+

DEVICE ADDED

+
+ You have successfully enrolled your iOS device with {{companyName}}. +
+
+ Device Owner : {{deviceOwner}} +
+
+ Changes related to your company device policy will usually be applied + on your phone with in the next couple of minutes. +
+
+ Thank You. +
+ {{companyName}} +{{/zone}} + +{{#zone "bottomJs"}} + {{js "/js/enrollment-success-note-ios.js"}} +{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.js new file mode 100644 index 000000000..90be52949 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.js @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2016, 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. + */ + +function onRequest (context) { + var viewModel = {}; + var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; + viewModel.deviceOwner = session.get("enrolledUser"); + viewModel.serverURL = mdmProps["httpsURL"] + context.app.context; + var companyProps = session.get("COMPANY_DETAILS"); + if (!companyProps) { + viewModel.companyName = mdmProps.generalConfig.companyName; + } else { + viewModel.companyName = companyProps.companyName; + } + return viewModel; +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.json new file mode 100644 index 000000000..adfc78e7e --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.ios.thank-you/thank-you.json @@ -0,0 +1,6 @@ +{ + "version": "1.0.0", + "uri": "/enrollments/ios/thank-you-agent", + "layout": "mdm.layout.enrollment", + "isAnonymous": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.hbs new file mode 100644 index 000000000..18375a801 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.hbs @@ -0,0 +1,53 @@ +{{!-- Copyright (c) 2016, 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. --}} + +{{!-- defining controlled access parameters --}} +{{#zone "accessControl"}} + {{ + unit "mdm.unit.enrollments.access-control" + allowedPlatform = "Windows Phone" + currentPage = "invoke-agent" + nextPage = "login-agent" + }} +{{/zone}} +{{!-- Inputting content into defined zones in enrollment layout --}} +{{unit "mdm.unit.ui.title" pageTitle="Windows Phone Enrollment | Start Workplace"}} +{{#zone "headerTitle"}} + Windows Phone Enrollment +{{/zone}} +{{#zone "content"}} + {{ + unit "mdm.unit.wizard-stepper" + steps = "Start Workplace, + Login to Enterprise Mobility Manager, + Accept End User License Agreement" + currentStep = "Start Workplace" + currentStepIndex = 0 + }} + Start the Workplace app to continue device enrollment. +
+
+ Setting up a Workplace account with WSO2 Enterprise Mobility Manager + will offer you company policies, certificates and apps that help you connect + to your business. +
+
+
+ +
+{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.json new file mode 100644 index 000000000..2c1154779 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.invoke-agent/invoke-agent.json @@ -0,0 +1,6 @@ +{ + "version": "1.0.0", + "uri": "/enrollments/windows/invoke-agent", + "layout": "mdm.layout.enrollment", + "isAnonymous": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.hbs new file mode 100644 index 000000000..e51813f42 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.hbs @@ -0,0 +1,46 @@ +{{!-- Copyright (c) 2016, 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. --}} + +{{!-- defining controlled access parameters --}} +{{#zone "accessControl"}} + {{ + unit "mdm.unit.enrollments.access-control" + allowedPlatform = "Windows Phone" + currentPage = "license-agent" + lastPage = "login-agent" + }} +{{/zone}} +{{!-- Inputting content into defined zones in enrollment layout --}} +{{unit "mdm.unit.ui.title" pageTitle="Windows Phone Enrollment | Accept End User License Agreement"}} +{{#zone "headerTitle"}} + Windows Phone Enrollment +{{/zone}} +{{#zone "content"}} + {{ + unit "mdm.unit.wizard-stepper" + steps = "Start Workplace, + Login to Enterprise Mobility Manager, + Accept End User License Agreement" + currentStep = "Accept End User License Agreement" + currentStepIndex = 2 + }} + {{ + unit "mdm.unit.enrollments.license-box" + platform = "windows" + languageCode = "en_US" + licenseAcceptActionURL = windowsLicenseAcceptURL + }} +{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.js new file mode 100644 index 000000000..01da95f27 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.js @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2016, 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. + */ + +function onRequest(context) { + var viewModel = {}; + // setting iOS license download URL + viewModel.windowsLicenseAcceptURL = context.app.context + "/enrollment/windows/enroll"; + return viewModel; +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.json new file mode 100644 index 000000000..574c45a01 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.license/license.json @@ -0,0 +1,6 @@ +{ + "version": "1.0.0", + "uri": "/enrollments/windows/license-agent", + "layout": "mdm.layout.enrollment", + "isAnonymous": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.hbs new file mode 100644 index 000000000..458c63acc --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.hbs @@ -0,0 +1,45 @@ +{{!-- Copyright (c) 2016, 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. --}} + +{{!-- defining controlled access parameters --}} +{{#zone "accessControl"}} + {{ + unit "mdm.unit.enrollments.access-control" + allowedPlatform = "Windows Phone" + currentPage = "login-agent" + lastPage = "invoke-agent" + nextPage = "license-agent" + }} +{{/zone}} +{{!-- Inputting content into defined zones in enrollment layout --}} +{{unit "mdm.unit.ui.title" pageTitle="Windows Phone Enrollment | Login to Enterprise Mobility Manager"}} +{{#zone "headerTitle"}} + Windows Phone Enrollment +{{/zone}} +{{#zone "content"}} + {{ + unit "mdm.unit.wizard-stepper" + steps = "Start Workplace, + Login to Enterprise Mobility Manager, + Accept End User License Agreement" + currentStep = "Login to Enterprise Mobility Manager" + currentStepIndex = 1 + }} + {{ + unit "mdm.unit.enrollments.login-box" + loginActionURL = windowsLoginActionURL + }} +{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.js new file mode 100644 index 000000000..f25943ecc --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.js @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2016, 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. + */ + +function onRequest(context) { + var log = new Log("agent-to-web-context-mapper-windows-unit backend js"); + log.debug("calling agent-to-web-context-mapper-windows-unit"); + + var viewModel = {}; + if (!(session.get("email") && session.get("windowsWorkplaceAppID"))) { + // if both email and windowsWorkplaceAppID session values are not set + // this means either shifting to the page from agent or directly accessing the page out-of-order + + // checking if user is actually shifting to the page from agent + // login_hint passes the user email value entered in Windows workplace app + var userEmail = request.getParameter("login_hint"); + // appru passes app ID of the Windows workplace app + var windowsWorkplaceAppID = request.getParameter("appru"); + if (!userEmail || !windowsWorkplaceAppID) { + response.sendRedirect(context.app.context + "/enrollments/error/unintentional-request"); + } else { + /* allowing to skip first step of windows enrollment by + setting session.put("lastAccessedPage", "invoke-agent")... + This update was proposed to overcome following problem: + First step of enrollment and second step of enrollment being linked with two sessions as + first step is initiated by Internet explorer and the second by an internal web-view */ + session.put("lastAccessedPage", "invoke-agent"); + session.put("email", userEmail); + session.put("windowsWorkplaceAppID", windowsWorkplaceAppID); + } + } + + // setting windows login URL + viewModel.windowsLoginActionURL = context.app.context + "/enrollment/windows/login"; + return viewModel; +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.json new file mode 100644 index 000000000..433caeb46 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.enrollments.windows.login/login.json @@ -0,0 +1,6 @@ +{ + "version": "1.0.0", + "uri": "/enrollments/windows/login-agent", + "layout": "mdm.layout.enrollment", + "isAnonymous": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.error/error.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.error/error.hbs new file mode 100644 index 000000000..2c5ac1084 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.error/error.hbs @@ -0,0 +1,32 @@ +{{!-- Copyright (c) 2016, 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. --}} + +{{!-- Inputting content into defined zones in enrollment layout --}} +{{unit "mdm.unit.ui.title" pageTitle="Page Error"}} +{{#zone "headerTitle"}} + 404 - Resource Not Found +{{/zone}} +{{#zone "content"}} +
+

Possible Causes :

+
+ You are seen this page since the resource you are trying to access is not available.
+ +{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.error/error.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.error/error.json new file mode 100644 index 000000000..8bfc51281 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.error/error.json @@ -0,0 +1,6 @@ +{ + "version": "1.0.0", + "uri": "/error/404", + "layout": "mdm.layout.enrollment", + "isAnonymous": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.home/home.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.home/home.json new file mode 100644 index 000000000..4f2dd893d --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/pages/mdm.page.home/home.json @@ -0,0 +1,6 @@ +{ + "version": "1.0.0", + "uri": "/", + "isAnonymous": true, + "extends": "mdm.page.error" +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.hbs new file mode 100644 index 000000000..ea9d56cae --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.hbs @@ -0,0 +1,15 @@ +{{!-- Copyright (c) 2016, 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. --}} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.js new file mode 100644 index 000000000..58d161f3e --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.js @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2016, 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. + */ + +function onRequest(context) { + var log = new Log("enrollment-access-control-unit backend js"); + log.debug("calling enrollment-access-control-unit"); + + var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; + var UAParser = require("/app/modules/ua-parser.min.js")["UAParser"]; + + var parser = new UAParser(); + var userAgent = request.getHeader("User-Agent"); + parser.setUA(userAgent); + parser.getResult(); + var userAgentPlatform = parser.getOS()["name"]; + + if (userAgentPlatform != context.unit.params["allowedPlatform"]) { + // if userAgentPlatform is not allowed + log.error("platform not allowed"); + response.sendRedirect(context.app.context + "/enrollments/error/unintentional-request"); + } else { + var lastPage = context.unit.params["lastPage"]; + var nextPage = context.unit.params["nextPage"]; + var currentPage = context.unit.params["currentPage"]; + // if userAgentPlatform is allowed, + // restricting unordered intermediate page access + if (lastPage && currentPage && nextPage) { + // meaning it's not first page, but a middle page + if (!session.get("lastAccessedPage")) { + // meaning a middle page is accessed at first + response.sendRedirect(context.app.context + "/enrollments/error/unintentional-request"); + } else if (!(session.get("lastAccessedPage") == currentPage) && + !(session.get("lastAccessedPage") == lastPage) && + !(session.get("lastAccessedPage") == nextPage)) { + response.sendRedirect(context.app.context + "/enrollments/error/unintentional-request"); + } else if (currentPage) { + // if currentPage is set, update lastAccessedPage as currentPage + session.put("lastAccessedPage", currentPage); + } + } else if (lastPage && currentPage && !nextPage) { + // meaning it's not first page, not a middle page, but the last page in wizard + if (!session.get("lastAccessedPage")) { + // this means the last page is accessed at first + response.sendRedirect(context.app.context + "/enrollments/error/unintentional-request"); + } else if (!(session.get("lastAccessedPage") == currentPage) && + !(session.get("lastAccessedPage") == lastPage)) { + response.sendRedirect(context.app.context + "/enrollments/error/unintentional-request"); + } else if (currentPage) { + // if currentPage is set, update lastAccessedPage as currentPage + session.put("lastAccessedPage", currentPage); + } + } else if (currentPage) { + // meaning it's the first page + // if currentPage is set, update lastAccessedPage as currentPage + session.put("lastAccessedPage", currentPage); + } + } + + if (log.isDebugEnabled()) { + log.debug("last-accessed-page = " + session.get("lastAccessedPage") + + " : " + "session-id = " + session.getId()); + } + return context; +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.json new file mode 100644 index 000000000..f2f22da9a --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.access-control/access-control.json @@ -0,0 +1,4 @@ +{ + "version": "1.0.0", + "isAnonymous": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.hbs new file mode 100644 index 000000000..e8a202e6d --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.hbs @@ -0,0 +1,37 @@ +{{!-- Copyright (c) 2016, 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. --}} + +
+
+
+ Please read the following end user license agreement carefully. + In order to complete device enrollment, you must accept these terms. +

+
+

{{companyName}} License Agreement

+

{{license}}

+
+
+
+ +
+{{#zone "bottomJs"}} + {{js "/js/license-box.js"}} +{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.js new file mode 100644 index 000000000..921c34ba7 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.js @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2016, 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. + */ + +function onRequest(context) { + var log = new Log("license-box-agent-unit"); + log.debug("calling license-box-agent-unit backend js"); + + var viewModel = {}; + var deviceModule = require("/app/modules/business-controllers/device.js")["deviceModule"]; + var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; + + var license = deviceModule.getLicense(context.unit.params["platform"], context.unit.params["languageCode"]); + if (license) { + viewModel.license = license; + } else { + viewModel.license = "ERROR: Unable to retrieve License Text."; + } + + var companyProps = session.get("COMPANY_DETAILS"); + if (!companyProps) { + viewModel.companyName = mdmProps.generalConfig.companyName; + } else { + viewModel.companyName = companyProps.companyName; + } + return viewModel; +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.json new file mode 100644 index 000000000..7769b28fb --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/license-box.json @@ -0,0 +1,4 @@ +{ + "version" : "1.0.0", + "isAnonymous" : true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/public/js/license-box.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/public/js/license-box.js new file mode 100644 index 000000000..3a9497885 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.license-box/public/js/license-box.js @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2016, 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. + */ + +$(document).ready(function () { + var license = $("#license-text").text(); + $("#license-text").html(license); +}); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.hbs new file mode 100644 index 000000000..9560b933e --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.hbs @@ -0,0 +1,74 @@ +{{!-- 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. --}} + + +{{#zone "bottomJs"}} + {{js "/js/login-box.js"}} +{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.js new file mode 100644 index 000000000..e1f8bf3b4 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.js @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2016, 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. + */ + +function onRequest(context) { + context.handlebars.registerHelper("excludes", function (lvalue, rvalue, options) { + if (arguments.length < 3) { + throw new Error("Handlebars Helper equal needs 2 parameters"); + } + if (lvalue.indexOf(rvalue) > -1) { + return options.inverse(this); + } else { + return options.fn(this); + } + }); +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.json new file mode 100644 index 000000000..9c7b7aa6d --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/login-box.json @@ -0,0 +1,4 @@ +{ + "version" : "1.0.0", + "isAnonymous" : true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/public/js/login-box.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/public/js/login-box.js new file mode 100644 index 000000000..cbdff9394 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.enrollments.login-box/public/js/login-box.js @@ -0,0 +1,86 @@ +/* + * 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. + */ + +/** + * This method will return query parameter value given its name + * @param name Query parameter name + * @returns {string} Query parameter value + */ +var getParameterByName = function (name) { + name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); + var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), + results = regex.exec(location.search); + return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); +}; + +var errorMsgWrapper = "#enrollment-error-msg"; +var errorMsg = errorMsgWrapper + " span"; + +/** + * This method will execute on login form submission and validate input. + * @returns {boolean} + */ +var validate = function () { + var username = $("input#username").val(); + var password = $("input#password").val(); + + if (!username && !password) { + $(errorMsg).text("Both username and password are empty. You cannot proceed."); + if ($(errorMsgWrapper).hasClass("hidden")) { + $(errorMsgWrapper).removeClass("hidden"); + } + return false; + } else if (!username && password) { + $(errorMsg).text("Username should not be empty."); + if ($(errorMsgWrapper).hasClass("hidden")) { + $(errorMsgWrapper).removeClass("hidden"); + } + return false; + } else if (username && !password) { + $(errorMsg).text("Password should not be empty."); + if ($(errorMsgWrapper).hasClass("hidden")) { + $(errorMsgWrapper).removeClass("hidden"); + } + return false; + } else { + return true; + } +}; + +$(document).ready(function () { + var error = getParameterByName("error"); + if (error == "auth-failed") { + var defaultMessage = "Please provide a correct username and password to continue."; + var customMessage = getParameterByName("message"); + if (customMessage) { + $(errorMsg).text("Authentication failed. " + customMessage); + } else { + $(errorMsg).text("Authentication failed. " + defaultMessage); + } + $(errorMsgWrapper).removeClass("hidden"); + } else if (error == "unexpected") { + $(errorMsg).text("An unexpected error occured. Please try again."); + $(errorMsgWrapper).removeClass("hidden"); + } +}); + +$(".btn-download-agent").click(function () { + $(".form-login-box").submit(); +}); + + diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.content.title/title.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.content.title/title.hbs new file mode 100644 index 000000000..00dbfdafe --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.content.title/title.hbs @@ -0,0 +1,24 @@ +{{! + Copyright (c) 2016, 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. +}} +{{#zone "contentTitle"}} +
+
+ {{@unit.params.pageHeader}} +
+
+{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.content.title/title.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.content.title/title.json new file mode 100644 index 000000000..9eecd8f5b --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.content.title/title.json @@ -0,0 +1,3 @@ +{ + "version": "1.0.0" +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.logo/logo.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.logo/logo.hbs new file mode 100644 index 000000000..02f29a345 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.logo/logo.hbs @@ -0,0 +1,24 @@ +{{! + Copyright (c) 2016, 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. +}} +{{#zone "brand"}} + + +

Enterprise Mobility Manager

+
+{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.logo/logo.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.logo/logo.json new file mode 100644 index 000000000..359f3d131 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.logo/logo.json @@ -0,0 +1,4 @@ +{ + "version": "1.0.0", + "extends": "uuf.unit.header.logo" +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.hbs new file mode 100644 index 000000000..5fc7ac3bc --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.hbs @@ -0,0 +1,22 @@ +{{! + Copyright (c) 2016, 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. +}} +{{#zone "userMenu-items"}} +
  • + Logout +
  • +{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.json new file mode 100644 index 000000000..0fa59af73 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.header.user-menu/user-menu.json @@ -0,0 +1,4 @@ +{ + "version": "1.0.0", + "extends" : "uuf.unit.header.user-menu" +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.hbs new file mode 100644 index 000000000..4aa6a9fdb --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.hbs @@ -0,0 +1,117 @@ +{{! + Copyright (c) 2016, 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. +}} +{{#zone "navMenu-icon"}} + + + +{{/zone}} + +{{#zone "navMenu-items"}} + {{#if permissions.VIEW_DASHBOARD}} +
  • + + + Admin Dashboard + +
  • + {{/if}} + {{#if permissions.LIST_DEVICES_ADMIN}} +
  • + + + Device Management + +
  • + {{else}} + {{#if permissions.LIST_OWN_DEVICES}} +
  • + + + Device Management + +
  • + {{/if}} + {{/if}} + {{#if permissions.LIST_GROUPS}} +
  • + + + Group Management + +
  • + {{/if}} +
  • User Management +
      + {{#if permissions.LIST_USERS}} +
    • Users
    • + {{/if}} + + {{#if permissions.LIST_ROLES}} +
    • Roles
    • + {{/if}} +
    +
  • + {{#if permissions.LIST_POLICIES}} +
  • Policy Management
  • + {{/if}} +
  • Configuration Management + +
  • +{{/zone}} + +{{#zone "navbarCollapsableRightItems"}} + +{{/zone}} +{{#zone "sidePanes"}} + +{{/zone}} +{{#zone "bottomJs"}} + + {{js "js/nav-menu.js"}} +{{/zone}} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.js new file mode 100644 index 000000000..ebf967e07 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.js @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2016, 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. + */ + +function onRequest(context) { + context.handlebars.registerHelper('equal', function (lvalue, rvalue, options) { + if (arguments.length < 3) { + throw new Error("Handlebars Helper equal needs 2 parameters"); + } + if (lvalue != rvalue) { + return options.inverse(this); + } else { + return options.fn(this); + } + }); + var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; + var mdmProps = require("/app/modules/conf-reader/main.js")["conf"]; + var constants = require("/app/modules/constants.js"); + var uiPermissions = userModule.getUIPermissions(); + context["permissions"] = uiPermissions; + + var links = { + "user-mgt": [], + "role-mgt": [], + "policy-mgt": [], + "device-mgt": [] + }; + + // following context.link value comes here based on the value passed at the point + // where units are attached to a page zone. + // eg: {{unit "appbar" pageLink="users" title="User Management"}} + context["currentActions"] = links[context["pageLink"]]; + context["enrollmentURL"] = mdmProps["generalConfig"]["host"] + mdmProps["enrollmentDir"]; + var isAuthorizedForNotifications = + userModule.isAuthorized("/permission/admin/device-mgt/emm-admin/notifications/view"); + var currentUser = session.get(constants["USER_SESSION_KEY"]); + context["isAuthorizedForNotifications"] = isAuthorizedForNotifications; + context["currentUser"] = currentUser; + context["appContext"] = context.app.context; + + return context; +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.json new file mode 100644 index 000000000..c469d0751 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/nav-menu.json @@ -0,0 +1,8 @@ +{ + "version": "1.0.0", + "index": 30, + "pushedUris": [ + "/", + "/{+any}" + ] +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/jquery.qrcode.min.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/jquery.qrcode.min.js new file mode 100644 index 000000000..2a169909b --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/jquery.qrcode.min.js @@ -0,0 +1,47 @@ +//--------------------------------------------------------------------- +// QRCode for JavaScript +// +// Copyright (c) 2009 Kazuhiko Arase +// +// URL: http://www.d-project.com/ +// +// Licensed under the MIT license: +// http://www.opensource.org/licenses/mit-license.php +// +// The word "QR Code" is registered trademark of +// DENSO WAVE INCORPORATED +// http://www.denso-wave.com/qrcode/faqpatent-e.html +// +//--------------------------------------------------------------------- + +//--------------------------------------------------------------------- +// QR8bitByte +//--------------------------------------------------------------------- +(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;da||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]= + 0<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c= + j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount- + b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0g;g++)if(null==this.modules[b][i-g]){var n=!1;f>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a, + c),b=new t,e=0;e8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d= + 0,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+ +a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;dc)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+ +a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256), + LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d + this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b>>7-a%8&1)},put:function(a,c){for(var d=0;d>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1, + correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e").css("height",b+"px").appendTo(c);for(i=0;i").css("width", + d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;jQuery(a).appendTo(this)})}})(jQuery); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/nav-menu.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/nav-menu.js new file mode 100644 index 000000000..679e33079 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/js/nav-menu.js @@ -0,0 +1,351 @@ +/* + * Copyright (c) 2016, 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 modalPopup = ".wr-modalpopup", + modalPopupContainer = modalPopup + " .modalpopup-container", + modalPopupContent = modalPopup + " .modalpopup-content"; + +var emmAdminBasePath = "/api/device-mgt/v1.0"; + +/* + * set popup maximum height function. + */ +function setPopupMaxHeight() { + var maxHeight = "max-height"; + var marginTop = "margin-top"; + var body = "body"; + $(modalPopupContent).css(maxHeight, ($(body).height() - ($(body).height() / 100 * 30))); + $(modalPopupContainer).css(marginTop, (-($(modalPopupContainer).height() / 2))); +} + +/* + * show popup function. + */ +function showPopup() { + $(modalPopup).show(); + setPopupMaxHeight(); +} + +/* + * hide popup function. + */ +function hidePopup() { + $(modalPopupContent).html(""); + $(modalPopupContent).removeClass("operation-data"); + $(modalPopup).hide(); +} + +var updateNotificationCount = function (data, textStatus, jqXHR) { + if (jqXHR.status == 200 && data) { + var responsePayload = JSON.parse(data); + var newNotificationsCount = responsePayload.count; + if (newNotificationsCount > 0) { + $("#notification-bubble").html(newNotificationsCount); + } +// } else { +// $("#notification-bubble").html("Error"); +// } + } +}; + +function loadNotificationsPanel() { + if ("true" == $("#right-sidebar").attr("is-authorized")) { + var serviceURL = emmAdminBasePath + "/notifications?status=NEW"; + invokerUtil.get(serviceURL, updateNotificationCount, hideNotificationCount); + loadNewNotifications(); + } else { + $("#notification-bubble-wrapper").remove(); + } +} + +function hideNotificationCount(jqXHR) { + if (jqXHR.status == 404) { + // this means "no new notifications to show" + $("#notification-bubble").hide(); + } else { + $("#notification-bubble").html("Error"); + } +} + +function loadNewNotifications() { + var messageSideBar = ".sidebar-messages"; + if ($("#right-sidebar").attr("is-authorized") == "true") { + var notifications = $("#notifications"); + var currentUser = notifications.data("currentUser"); + + $.template("notification-listing", notifications.attr("src"), function (template) { + var serviceURL = emmAdminBasePath + "/notifications?status=NEW"; + + var successCallback = function (data, textStatus, jqXHR) { + if (jqXHR.status == 200 && data) { + var viewModel = {}; + var responsePayload = JSON.parse(data); + + if (responsePayload.notifications) { + viewModel.notifications = responsePayload.notifications; + if (responsePayload.count > 0) { + $(messageSideBar).html(template(viewModel)); + } else { + $(messageSideBar).html("

    No new notifications found...

    "); + } + } else { + $(messageSideBar).html("

    Unexpected error occurred while loading new notifications.

    "); + } + } + }; + var errorCallback = function (jqXHR) { + if (jqXHR.status = 500) { + $(messageSideBar).html("

    Unexpected error occurred while trying " + + "to retrieve any new notifications.

    "); + } + }; + invokerUtil.get(serviceURL, successCallback, errorCallback); + }); + } else { + $(messageSideBar).html("

    You are not authorized to view notifications

    "); + } +} + +/** + * Toggle function for + * notification listing sidebar. + * @return {Null} + */ +$.sidebar_toggle = function (action, target, container) { + var elem = '[data-toggle=sidebar]', + button, + containerOffsetLeft, + containerOffsetRight, + targetOffsetLeft, + targetOffsetRight, + targetWidth, + targetSide, + relationship, + pushType, + buttonParent; + + var sidebar_window = { + update: function (target, container, button) { + containerOffsetLeft = $(container).data('offset-left') ? $(container).data('offset-left') : 0; + containerOffsetRight = $(container).data('offset-right') ? $(container).data('offset-right') : 0; + targetOffsetLeft = $(target).data('offset-left') ? $(target).data('offset-left') : 0; + targetOffsetRight = $(target).data('offset-right') ? $(target).data('offset-right') : 0; + targetWidth = $(target).data('width'); + targetSide = $(target).data("side"); + pushType = $(container).parent().is('body') == true ? 'padding' : 'margin'; + + if (button !== undefined) { + relationship = button.attr('rel') ? button.attr('rel') : ''; + buttonParent = $(button).parent(); + } + }, + + show: function () { + if ($(target).data('sidebar-fixed') == true) { + $(target).height($(window).height() - $(target).data('fixed-offset')); + } + $(target).trigger('show.sidebar'); + if (targetWidth !== undefined) { + $(target).css('width', targetWidth); + } + $(target).addClass('toggled'); + if (button !== undefined) { + if (relationship !== '') { + // Removing active class from all relative buttons + $(elem + '[rel=' + relationship + ']:not([data-handle=close])').removeClass("active"); + $(elem + '[rel=' + relationship + ']:not([data-handle=close])').attr('aria-expanded', 'false'); + } + // Adding active class to button + if (button.attr('data-handle') !== 'close') { + button.addClass("active"); + button.attr('aria-expanded', 'true'); + } + if (buttonParent.is('li')) { + if (relationship !== '') { + $(elem + '[rel=' + relationship + ']:not([data-handle=close])').parent().removeClass("active"); + $(elem + '[rel=' + relationship + ']:not([data-handle=close])').parent(). + attr('aria-expanded', 'false'); + } + buttonParent.addClass("active"); + buttonParent.attr('aria-expanded', 'true'); + } + } + // Sidebar open function + if (targetSide == 'left') { + if ((button !== undefined) && (button.attr('data-container-divide'))) { + $(container).css(pushType + '-' + targetSide, targetWidth + targetOffsetLeft); + } + $(target).css(targetSide, targetOffsetLeft); + } else if (targetSide == 'right') { + if ((button !== undefined) && (button.attr('data-container-divide'))) { + $(container).css(pushType + '-' + targetSide, targetWidth + targetOffsetRight); + } + $(target).css(targetSide, targetOffsetRight); + } + $(target).trigger('shown.sidebar'); + }, + + hide: function () { + $(target).trigger('hide.sidebar'); + $(target).removeClass('toggled'); + if (button !== undefined) { + if (relationship !== '') { + // Removing active class from all relative buttons + $(elem + '[rel=' + relationship + ']:not([data-handle=close])').removeClass("active"); + $(elem + '[rel=' + relationship + ']:not([data-handle=close])').attr('aria-expanded', 'false'); + } + // Removing active class from button + if (button.attr('data-handle') !== 'close') { + button.removeClass("active"); + button.attr('aria-expanded', 'false'); + } + if ($(button).parent().is('li')) { + if (relationship !== '') { + $(elem + '[rel=' + relationship + ']:not([data-handle=close])').parent().removeClass("active"); + $(elem + '[rel=' + relationship + ']:not([data-handle=close])').parent(). + attr('aria-expanded', 'false'); + } + } + } + // Sidebar close function + if (targetSide == 'left') { + if ((button !== undefined) && (button.attr('data-container-divide'))) { + $(container).css(pushType + '-' + targetSide, targetOffsetLeft); + } + $(target).css(targetSide, -Math.abs(targetWidth + targetOffsetLeft)); + } else if (targetSide == 'right') { + if ((button !== undefined) && (button.attr('data-container-divide'))) { + $(container).css(pushType + '-' + targetSide, targetOffsetRight); + } + $(target).css(targetSide, -Math.abs(targetWidth + targetOffsetRight)); + } + $(target).trigger('hidden.sidebar'); + } + }; + if (action === 'show') { + sidebar_window.update(target, container); + sidebar_window.show(); + } + if (action === 'hide') { + sidebar_window.update(target, container); + sidebar_window.hide(); + } + // binding click function + var body = 'body'; + $(body).off('click', elem); + $(body).on('click', elem, function (e) { + e.preventDefault(); + button = $(this); + container = button.data('container'); + target = button.data('target'); + sidebar_window.update(target, container, button); + /** + * Sidebar function on data container divide + * @return {Null} + */ + if (button.attr('aria-expanded') == 'false') { + sidebar_window.show(); + } else if (button.attr('aria-expanded') == 'true') { + sidebar_window.hide(); + } + }); +}; + +$.fn.collapse_nav_sub = function () { + var navSelector = 'ul.nav'; + + if (!$(navSelector).hasClass('collapse-nav-sub')) { + $(navSelector + ' > li', this).each(function () { + var position = $(this).offset().left - $(this).parent().scrollLeft(); + $(this).attr('data-absolute-position', (position + 5)); + }); + + $(navSelector + ' li', this).each(function () { + if ($('ul', this).length !== 0) { + $(this).addClass('has-sub'); + } + }); + + $(navSelector + ' > li', this).each(function () { + $(this).css({ + 'left': $(this).data('absolute-position'), + 'position': 'absolute' + }); + }); + + $(navSelector + ' li.has-sub', this).on('click', function () { + var elem = $(this); + if (elem.attr('aria-expanded') !== 'true') { + elem.siblings().fadeOut(100, function () { + elem.animate({'left': '15'}, 200, function () { + $(elem).first().children('ul').fadeIn(200); + }); + }); + elem.siblings().attr('aria-expanded', 'false'); + elem.attr('aria-expanded', 'true'); + } else { + $(elem).first().children('ul').fadeOut(100, function () { + elem.animate({'left': $(elem).data('absolute-position')}, 200, function () { + elem.siblings().fadeIn(100); + }); + }); + elem.siblings().attr('aria-expanded', 'false'); + elem.attr('aria-expanded', 'false'); + } + }); + + $(navSelector + ' > li.has-sub ul', this).on('click', function (e) { + e.stopPropagation(); + }); + $(navSelector).addClass('collapse-nav-sub'); + } +}; + +$(document).ready(function () { + loadNotificationsPanel(); + $.sidebar_toggle(); + + $("#right-sidebar").on("click", ".new-notification", function () { + var notificationId = $(this).data("id"); + var redirectUrl = $(this).data("url"); + var markAsReadNotificationsAPI = "/mdm-admin/notifications/" + notificationId + "/CHECKED"; + var messageSideBar = ".sidebar-messages"; + + invokerUtil.put( + markAsReadNotificationsAPI, + null, + function (data) { + data = JSON.parse(data); + if (data.statusCode == responseCodes["ACCEPTED"]) { + location.href = redirectUrl; + } + }, function () { + var content = "
  • Warning

    " + + "

    Unexpected error occurred while loading notification. Please refresh the page and" + + " try again

  • "; + $(messageSideBar).html(content); + } + ); + }); + + if (typeof $.fn.collapse == 'function') { + $('.navbar-collapse.tiles').on('shown.bs.collapse', function () { + $(this).collapse_nav_sub(); + }); + } +}); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/templates/notifications.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/templates/notifications.hbs new file mode 100644 index 000000000..82edfc498 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.nav-menu/public/templates/notifications.hbs @@ -0,0 +1,14 @@ +{{#each notifications}} +
  • +

    + + + Device Type : {{deviceIdentifier.type}} + +

    +

    {{description}}

    +
  • +{{/each}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.notifications/notifications.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.notifications/notifications.json new file mode 100644 index 000000000..bcab0a4d3 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.notifications/notifications.json @@ -0,0 +1,5 @@ +{ + "version": "1.0.0", + "extends": "uuf.unit.navbar.notifications", + "disabled": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.popover/popover.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.popover/popover.json new file mode 100644 index 000000000..2fba2db14 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.popover/popover.json @@ -0,0 +1,5 @@ +{ + "version": "1.0.0", + "extends": "uuf.unit.navbar.popover", + "disabled": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.left/left.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.left/left.json new file mode 100644 index 000000000..3c39b5235 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.left/left.json @@ -0,0 +1,5 @@ +{ + "version": "1.0.0", + "extends": "uuf.unit.navbar.toggle-menu.left", + "disabled": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.right/right.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.right/right.json new file mode 100644 index 000000000..e8a79dae6 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.navbar.toggle-menu.right/right.json @@ -0,0 +1,5 @@ +{ + "version": "1.0.0", + "extends": "uuf.unit.navbar.toggle-menu.right", + "disabled": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-common.css b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-common.css new file mode 100644 index 000000000..d0e34d8a3 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-common.css @@ -0,0 +1,369 @@ + +/* Regular */ +@font-face { + font-family: 'Open Sans'; + + src: url('../fonts/OpenSans-Regular-webfont.eot'); + src: url('../fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/OpenSans-Regular-webfont.woff') format('woff'), + url('../fonts/OpenSans-Regular-webfont.ttf') format('truetype'), + url('../fonts/OpenSans-Regular-webfont.svg#OpenSansRegular') format('svg'); + font-weight: normal; + font-weight: 400; + font-style: normal; + +} + +/* Italic */ +@font-face { + font-family: 'Open Sans'; + src: url('../fonts/OpenSans-Italic-webfont.eot'); + src: url('../fonts/OpenSans-Italic-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/OpenSans-Italic-webfont.woff') format('woff'), + url('../fonts/OpenSans-Italic-webfont.ttf') format('truetype'), + url('../fonts/OpenSans-Italic-webfont.svg#OpenSansItalic') format('svg'); + font-weight: normal; + font-weight: 400; + font-style: italic; + +} + +/* Light */ +@font-face { + font-family: 'Open Sans'; + src: url('../fonts/OpenSans-Light-webfont.eot'); + src: url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/OpenSans-Light-webfont.woff') format('woff'), + url('../fonts/OpenSans-Light-webfont.ttf') format('truetype'), + url('../fonts/OpenSans-Light-webfont.svg#OpenSansLight') format('svg'); + font-weight: 200; + font-style: normal; + +} + +/* Light Italic */ +@font-face { + font-family: 'Open Sans'; + src: url('../fonts/OpenSans-LightItalic-webfont.eot'); + src: url('../fonts/OpenSans-LightItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/OpenSans-LightItalic-webfont.woff') format('woff'), + url('../fonts/OpenSans-LightItalic-webfont.ttf') format('truetype'), + url('../fonts/OpenSans-LightItalic-webfont.svg#OpenSansLightItalic') format('svg'); + font-weight: 200; + font-style: italic; + +} + +/* Semibold */ +@font-face { + font-family: 'Open Sans'; + src: url('../fonts/OpenSans-Semibold-webfont.eot'); + src: url('../fonts/OpenSans-Semibold-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/OpenSans-Semibold-webfont.woff') format('woff'), + url('../fonts/OpenSans-Semibold-webfont.ttf') format('truetype'), + url('../fonts/OpenSans-Semibold-webfont.svg#OpenSansSemibold') format('svg'); + font-weight: 500; + font-style: normal; + +} + +/* Semibold Italic */ +@font-face { + font-family: 'Open Sans'; + src: url('../fonts/OpenSans-SemiboldItalic-webfont.eot'); + src: url('../fonts/OpenSans-SemiboldItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/OpenSans-SemiboldItalic-webfont.woff') format('woff'), + url('../fonts/OpenSans-SemiboldItalic-webfont.ttf') format('truetype'), + url('../fonts/OpenSans-SemiboldItalic-webfont.svg#OpenSansSemiboldItalic') format('svg'); + font-weight: 500; + font-style: italic; + +} + +/* Bold */ +@font-face { + font-family: 'Open Sans'; + src: url('../fonts/OpenSans-Bold-webfont.eot'); + src: url('../fonts/OpenSans-Bold-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/OpenSans-Bold-webfont.woff') format('woff'), + url('../fonts/OpenSans-Bold-webfont.ttf') format('truetype'), + url('../fonts/OpenSans-Bold-webfont.svg#OpenSansBold') format('svg'); + font-weight: bold; + font-weight: 700; + font-style: normal; + +} + +/* Bold Italic */ +@font-face { + font-family: 'Open Sans'; + src: url('../fonts/OpenSans-BoldItalic-webfont.eot'); + src: url('../fonts/OpenSans-BoldItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/OpenSans-BoldItalic-webfont.woff') format('woff'), + url('../fonts/OpenSans-BoldItalic-webfont.ttf') format('truetype'), + url('../fonts/OpenSans-BoldItalic-webfont.svg#OpenSansBoldItalic') format('svg'); + font-weight: bold; + font-weight: 700; + font-style: italic; + +} + +/* Extra Bold */ +@font-face { + font-family: 'Open Sans'; + src: url('../fonts/OpenSans-ExtraBold-webfont.eot'); + src: url('../fonts/OpenSans-ExtraBold-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/OpenSans-ExtraBold-webfont.woff') format('woff'), + url('../fonts/OpenSans-ExtraBold-webfont.ttf') format('truetype'), + url('../fonts/OpenSans-ExtraBold-webfont.svg#OpenSansExtrabold') format('svg'); + font-weight: 900; + font-style: normal; + +} + +/* Extra Bold Italic */ +@font-face { + font-family: 'Open Sans'; + src: url('../fonts/OpenSans-ExtraBoldItalic-webfont.eot'); + src: url('../fonts/OpenSans-ExtraBoldItalic-webfont.eot?#iefix') format('embedded-opentype'), + url('../fonts/OpenSans-ExtraBoldItalic-webfont.woff') format('woff'), + url('../fonts/OpenSans-ExtraBoldItalic-webfont.ttf') format('truetype'), + url('../fonts/OpenSans-ExtraBoldItalic-webfont.svg#OpenSansExtraboldItalic') format('svg'); + font-weight: 900; + font-style: italic; + +} + +html { + position: relative; + min-height: 100%; + margin:0; + padding:0; + height: 100%; +} + +body { + font-family:'Open Sans'; + background:#fff; + font-weight: 100; + color: #444444; + font-size: 14px; + margin:0; + padding:0; + height: 100%; +} + +.container { + position: relative; + padding-bottom: 20px; + min-height: 100%; +} + +.wr-content { + padding-left:33px; + padding-right:33px; +} + +/* application top level header */ +h2.app-title { + font-weight:400; + font-size:17px; + margin:0; + padding:3px 0 0 0; + color:#fafafa; + text-transform: uppercase; +} + +.wr-global-header { + background:#11375B; +} + +.app-logo { + height:50px; + padding:12px 10px; +} + +.app-logo a { + text-decoration: none; +} + +.app-logo img { + float:left; + margin-right:10px; +} + +@media (max-width: 768px) { + .app-logo { + padding: 16px 10px; + } + .app-logo img { + width: 50px; + height: auto; + margin-right:10px; + } + h2.app-title { + font-size: 15px; + } +} + +@media (max-width: 570px) { + h2.app-title:after { + content: "EMM"; + } + h2.app-title span { + display: none; + } +} + +.wr-app-bar { + background:#526A84; + height:53px; +} + +header { + height:50px; +} + +#nav.affix { + position: fixed; + top: 0; + width: 100%; + z-index:100000; +} + +.auth-user { + display:none; +} + +.wr-auth-container { + padding-right:0; +} + +.auth-img { + float: left; + display:inline-block; + height:50px; + padding:8px 10px; + font-size: 14px; + color:#fff; + text-decoration: none; +} + +.auth-img:hover { + background:#526A84; +} + +.wr-auth.open .auth-img { + background: #526A84; +} + + +/* sticky footer styles */ +.footer { + height: 40px; + background-color: #222; + padding-top:5px; + color:#fff; + font-weight: 500; + padding-left:20px; + font-size:12px; + letter-spacing: 1px; + position:absolute; + width: 100%; + bottom: 0; +} + +.footer p { + padding-top: 5px; + margin: 0; +} + +/* misc */ +br.c-both { + clear:both; +} + +.wr-input-control .helper { + font-weight:100; +} + +.wr-input-control .cus-col-25 { + float:left; + width:25%; +} + +.wr-input-control .cus-col-50 { + float:left; + width:60%; +} + +.wr-input-control .cus-col-70 { + float:left; + width:70%; +} + +.wr-input-control .cus-col-50 input { + width:100%; +} + +.wr-input-control .cus-col-70 input { + width:95%; +} + +.wr-input-control .cus-col-25 input { + width:65%; +} + +/*.wr-input-control .cus-col-50 span, .wr-input-control .cus-col-25 span {*/ + /*padding-left:20px;*/ +/*}*/ + +/* wizard */ +.wr-wizard { + +} + +.itm-wiz-current .wiz-no { + border:1px solid #444; + color:#fff; + background:#444; +} + +.itm-wiz { + font-weight:100; +} + +.itm-wiz div { + display:inline-block; + float:left; +} + +.wiz-no { + width:50px; + height:50px; + font-size:33px; + font-weight: 100; + border-radius: 80px; + border:1px solid #ccc; + color:#fff; + padding:0 12px 10px; + display:inline-block; + text-align: center; + background:#ccc; + margin-right: 10px; +} + +.wiz-lbl { + width:190px; + font-size:17px; +} + +.wiz-lbl > span { + padding-top:0; + display:inline-block; +} + + + + + diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-mobile.css b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-mobile.css new file mode 100644 index 000000000..b455f24b9 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-mobile.css @@ -0,0 +1,137 @@ +/* forms */ +.input-control { + margin-bottom:20px; +} + +.input-control input, .input-control textarea { + border: 1px #999 solid; + width: 100%; + height: 100%; + padding: 6px 10px; + z-index: 1; + -webkit-appearance: none; +} + +.input-control input:focus, .input-control textarea:focus { + border-color: #555; + box-shadow: 0 0px 0px rgba(229, 103, 23, 0.075) inset, 0 0 0px rgba(229, 103, 23, 0.6); + outline: 0 none +} + +.input-control file { + border: 1px #d9d9d9 solid !important; + width: 100%; + height: 100%; + padding: 8px 15px; + z-index: 1; + -webkit-appearance: none; +} + +.input-label { + font-weight:100; + font-size:18px; + color:#555; +} + +.input-label { + font-weight:400; + font-size:14px; + color:#555; +} + +.help-tip { + font-size:14px; + padding:0px 10px; + color:#666; +} + +.wr-notification { + background:#ff5353; + padding:10px 20px; +} + +.form-val-error { + font-size:13px; + color:#ff2353; + font-weight:400; + display:inline-block; + padding-top:3px; +} + +.wr-validation-summary { + padding: 15px 0px 10px 0; + border-top: 1px solid #ffe8e8; + border-bottom: 1px solid #ffe8e8; + background: #fff4f4; + text-align: center; + display:block; + margin-bottom:15px; +} + +span.wr-validation-summary p { + font-size:17px; + font-weight:400; +} + +/* button group */ +.wr-buttons { + margin-top:20px; +} + +/* text content */ +.wr-head h2 { + font-weight:400; + margin-bottom:20px; +} + +.wr-text p { + font-size:24px; + font-weight:100; + color:#555; +} + +a.btn-download-agent { + display:block; + padding:15px 20px; + background:#11375B; + color:#fff; + font-size:18px; + font-weight:100; + text-align: center; + text-decoration: none; +} + +a.btn-download-agent:hover { + background:#16436D; +} + +.wr-agreement { + padding:15px; + border:1px solid #f0f0f0; + background:#fafafa; + height:320px; + overflow-y:auto; +} + +.wr-agreement p { + font-weight:400; + margin-bottom:20px; + font-size:14px; +} + +h3 { + font-weight:400; + margin-bottom:20px; + font-size:18px; +} + +h4 { + font-weight:700; + margin-bottom:20px; + font-size:15px; + text-transform: uppercase; +} + +.itm-wiz { + margin-top: 20px; +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-theme.css b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-theme.css new file mode 100644 index 000000000..a3e2fe3ff --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/css/custom-theme.css @@ -0,0 +1,567 @@ +body { + overflow-x: hidden; + -ms-overflow-x: hidden; +} + +a { + color: #526A84; +} + +textarea { width: 100%; } + +h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { + font-weight: 300; +} + +h1, .h1 { + font-size: 32px; +} + +.well { + border-radius: 0; + -webkit-box-shadow: none; + box-shadow: none; +} + +/* asset type switcher */ +.wr-asset-type-switcher .popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 451px; + padding: 1px; + font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; + font-size: 14px; + font-weight: 400; + line-height: 1.42857143; + text-align: left; + white-space: normal; + background-color: #232323; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 0 solid #232323; + border: 0 solid rgba(0,0,0,.2); + border-radius: 0; + -webkit-box-shadow: 0 0 0 rgba(0,0,0,.2); + box-shadow: 0 0 0 rgba(0,0,0,.2); + padding-bottom:8px; +} + +.wr-asset-type-switcher .popover.bottom>.arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #232323; +} + +.wr-asset-type-switcher .popover>.arrow { + border-width: 11px; +} + +.wr-asset-type-switcher .popover.bottom>.arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #232323; +} + +.wr-asset-type-switcher .popover>.arrow, .popover>.arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.wr-asset-type-switcher .popover-content { + padding: 6px 6px; +} + +.wr-asset-type-switcher .arrow { + left:25px !important; +} + +.wr-asset-type-switcher .popover { + left:10px !important; +} + + +/* sorting */ +.dropdown-menu { + position: absolute; + top: 40px; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 10px 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: transparent; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 0 solid #ccc; + border: 0 solid rgba(0,0,0,.15); + border-radius: 0; + -webkit-box-shadow: 0 0 0 rgba(0,0,0,.175); + box-shadow: 0 0 0 rgba(0,0,0,.175); + +} + +.dropdown-menu-content { + background-color: #e4e4e4; + padding:10px 20px; + color:#fff; +} + +.dropdown-menu-content a { + color:#333; + cursor:pointer; + display:block; +} + +.wr-auth .cu-arrow { + width: 0; + height: 0; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-bottom: 8px solid #e4e4e4; + left:87%; + position:relative; +} + +/* filter */ +.dropdown-menu { + position: absolute; + top: 40px; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 5px 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: transparent; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 0 solid #ccc; + border: 0 solid rgba(0,0,0,.15); + border-radius: 0; + -webkit-box-shadow: 0 0px 0px rgba(0,0,0,.175); + box-shadow: 0 0 0 rgba(0,0,0,.175); + +} + +.dropdown-menu-content { + background-color: #e4e4e4; + padding:5px; + color:#fff; +} + +.dropdown-menu-content a { + color: #11375B; + padding: 8px 10px; + cursor:pointer; + display:block; +} + +.dropdown-menu-content a:hover { + color:#fff; + background: #11375B; +} + + +/* category selection */ +a.ctrl-filter-category { + display:inline-block; + background:#237bd5; + border:1px solid #237bd5; + color:#fff; + text-decoration:none; + padding:7px 10px 7px 20px; + width:230px; + font-size:18px; + font-weight:100; +} + +a.ctrl-filter-category:hover { + background:#666; + color:#e4e4e4; + text-decoration: none; + border:1px solid #666; +} + +.wr-filter-category .dropdown-menu { + border:0px solid #237bd5; + background:#237bd5; + top:53px; + left:20px; + width:230px; + padding-top:0; + padding-bottom:0; + color:#fff; + font-size:17px; +} + +.wr-filter-category .dropdown-menu li a { + padding-top:7px; + padding-bottom:7px; + font-weight:100; + color:#fff; +} + +.wr-filter-category .dropdown-menu li a:hover { + background:#61a3e6; +} + +.ctrl-filter-category .glyphicon { + font-size:13px; + font-weight:100; + margin-left:33px; +} + + + +/* panel */ +.panel-group .panel { + margin-bottom: 0; + border-radius: 0; +} + +.panel { + margin-bottom: 0; + background-color: transparent; + border: 0 solid #e4e4e4; + border-radius: 0; + -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .05); + box-shadow: 0 0 0 rgba(0, 0, 0, .05); +} + +.panel-default > .panel-heading { + background-color: #999; + border-color: #e4e4e4; +} + +.cu-acc-head-title { + font-weight:400; + font-size:22px; +} + +.cu-acc-head-title:hover { + text-decoration: none; +} + +.panel-title a { + text-decoration: none; +} + +.panel-heading { + padding: 0 0 0 15px; + border-bottom: 0 solid transparent; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.panel-title table, .panel-body table { + width:100%; + border: 1px solid #c8c8c8; +} + +.panel-title a { + color:#fff; +} + +.cu-acc-head-created { + font-weight:200; + font-size:16px; +} + +.cu-acc-head-workflow { + font-weight:200; + font-size:16px; +} + +.panel-group .panel-heading + .panel-collapse > .panel-body, .panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 0 solid #e4e4e4; +} + +.panel-body { + padding: 10px; + background:#f9f9f9; +} + +/* input */ +.form-control { + width: 100%; + background-color: #fff; + background-image: none; + border: 1px solid #999; + border-radius: 0; + -webkit-box-shadow: inset 0 0 0 rgba(0, 0, 0, .075); + box-shadow: inset 0 0 0 rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} + +.form-control:focus { + border-color: #555; + outline: 0; + -webkit-box-shadow: inset 0 0 0 rgba(0,0,0,.075), 0 0 0 rgba(102, 175, 233, .6); + box-shadow: inset 0 0 0 rgba(0,0,0,.075), 0 0 0 rgba(102, 175, 233, .6); +} + +.form-control.modal-input, .form-control.modal-input:focus { + border: 1px solid #fff; +} + + +/* progress bar */ +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #e4e4e4; + border-radius: 0; + -webkit-box-shadow: inset 0 0 0 rgba(0, 0, 0, .1); + box-shadow: inset 0 0 0 rgba(0, 0, 0, .1); +} + +.progress-bar { + background-color: #6c5c76; +} + +.t-data-file { + padding-right:20px; +} + +/* tabs */ +.nav-tabs { + border-bottom: 1px solid #6c5c76; +} + +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 0; + color:#6c5c76; +} + +.nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #6c5c76; + border-top:1px solid #6c5c76; + border-bottom-color: transparent; +} + +.nav-tabs > li > a:hover { + border-color: #6c5c76 #6c5c76 #6c5c76; +} +.nav > li > a:hover, .nav > li > a:focus { + text-decoration: none; + background-color: #6c5c76; + color:#fff; +} + +/* nav pills */ +.wr-tabs-grphs .nav-pills > li.active > a, .wr-tabs-grphs .nav-pills > li.active > a:hover, .wr-tabs-grphs .nav-pills > li.active > a:focus { + color: #fff; + background-color: #888; +} + +.wr-tabs-grphs .nav-pills > li > a { + border-radius: 0; +} + +.wr-tabs-grphs { + border-bottom:1px solid #e4e4e4; + padding-bottom:10px; +} + +/* buttons */ +.btn-group { + margin: 30px 0; +} + +.btn-primary { + color: #fff; + background-color: #11375b; + border-color: #11375b; +} + +.btn-primary:hover, .btn-primary:focus, .btn-primary.focus, .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #526A84; + border-color: #526A84; +} + +.btn { + display: inline-block; + padding: 8px 20px; + margin-bottom: 0; + font-size: 16px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 0; + transition: background 0.2s; +} + +.col-centered { + float: none; + margin: 0 auto; +} + +b, strong { + font-weight: 500; +} + +.form-horizontal .control-label { + font-weight: 500; +} + +.form-horizontal .control-value { + padding-top: 7px; + margin-bottom: 0; +} + +.panel-group .panel-heading + .panel-collapse > .panel-body, .panel-group .panel-heading + .panel-collapse > .list-group { + border-top: none; +} + +.panel-default > .panel-heading { + background: transparent; + padding: 0; +} + +.panel-title a { + color: #333333; + padding:15px 0; + display: inline-block; +} + +.panel-body { + background: transparent; + padding: 0; +} + +.list-group-item:first-child, .list-group-item:last-child { border-radius: 0; } + +.row.no-gutter { + margin-right: 0; + margin-left: 0; +} + +.row.no-gutter > [class*='col-']:not(:first-child), .row.no-gutter > [class*='col-']:not(:last-child) { + padding-right: 0; + padding-left: 0; +} + +.table tr.row.no-gutter > td { + border-top: none; + padding: 0; +} + +.table thead th { + font-weight: 200; + text-transform: none; +} + +select.select2 { + height:0 !important; + overflow: hidden; + padding: 0; + margin: 0; + border: none; + outline: none; +} + +.select2-container { + width: 100% !important; +} + +.select2-container--default .select2-selection--multiple, .select2-container--default .select2-selection--single { + border-radius: 0; + height: 34px; + border: 1px solid #999; +} + +.select2-container .select2-search--inline .select2-search__field { + margin-top: 0; + padding: 0; +} +.select2-container--default .select2-selection--multiple .select2-selection__rendered { + padding: 5px 8px; +} + +.select2-container--default .select2-selection--single .select2-selection__rendered { + line-height: 34px; +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice { + margin-bottom: 0; + margin-top: 0; + color: #ffffff; + background: #526A84; + font-size: 11px; + display: inline-block; + cursor: pointer; + padding: 3px 6px; + border-radius: 0; + border: none; +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + color: #ffffff; + font-weight: 500; + font-size: 11px; +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #ffffff; +} +.select2-container--default .select2-results__option--highlighted[aria-selected] { + background-color: #526A84; +} + +.select2-dropdown { + z-index: 10000; +} + +.ui-autocomplete { + max-height: 400px; + overflow-y: auto; + overflow-x: hidden; +} +* html .ui-autocomplete { + height: 400px; +} + +.qr-code canvas{ + border: 2px solid white; +} diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.eot new file mode 100644 index 000000000..5d4a1c477 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.eot differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.svg new file mode 100644 index 000000000..1557f6807 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.svg @@ -0,0 +1,251 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 20102011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.ttf new file mode 100644 index 000000000..7ab5d85bf Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.ttf differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.woff new file mode 100644 index 000000000..869a9ed8a Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Bold-webfont.woff differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.eot new file mode 100644 index 000000000..ad6518076 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.eot differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.svg new file mode 100644 index 000000000..24661f35f --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.svg @@ -0,0 +1,251 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 20102011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.ttf new file mode 100644 index 000000000..6a30fa9dd Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.ttf differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.woff new file mode 100644 index 000000000..46778a217 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-BoldItalic-webfont.woff differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.eot new file mode 100644 index 000000000..2f7ae28d4 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.eot differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.svg new file mode 100644 index 000000000..c3d6642a2 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.svg @@ -0,0 +1,251 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 2011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.ttf new file mode 100644 index 000000000..dacc5bbb5 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.ttf differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.woff new file mode 100644 index 000000000..de4f8e77e Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBold-webfont.woff differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.eot new file mode 100644 index 000000000..e4f4ab0db Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.eot differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.svg new file mode 100644 index 000000000..a699015a3 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.svg @@ -0,0 +1,251 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 20102011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.ttf new file mode 100644 index 000000000..7e636eb4c Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.ttf differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.woff new file mode 100644 index 000000000..f81b21618 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-ExtraBoldItalic-webfont.woff differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.eot new file mode 100644 index 000000000..c31595212 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.eot differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.svg new file mode 100644 index 000000000..537d20ca6 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.svg @@ -0,0 +1,251 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 20102011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.ttf new file mode 100644 index 000000000..cb3fda65e Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.ttf differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.woff new file mode 100644 index 000000000..03eaf5861 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Italic-webfont.woff differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.eot new file mode 100644 index 000000000..f17617e03 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.eot differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.svg new file mode 100644 index 000000000..c7ae13a29 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.svg @@ -0,0 +1,252 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 20102011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.ttf new file mode 100644 index 000000000..b83078a60 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.ttf differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.woff new file mode 100644 index 000000000..ff882b6ac Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Light-webfont.woff differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.eot new file mode 100644 index 000000000..95c6c619d Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.eot differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.svg new file mode 100644 index 000000000..535e68823 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.svg @@ -0,0 +1,252 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 20102011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.ttf new file mode 100644 index 000000000..3162ff8eb Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.ttf differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.woff new file mode 100644 index 000000000..f6e97d5af Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-LightItalic-webfont.woff differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.eot new file mode 100644 index 000000000..545b7c15e Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.eot differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.svg new file mode 100644 index 000000000..ead219a56 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.svg @@ -0,0 +1,252 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 20102011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.ttf new file mode 100644 index 000000000..a5b2378e5 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.ttf differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.woff new file mode 100644 index 000000000..11698afc2 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Regular-webfont.woff differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.eot new file mode 100644 index 000000000..acc32c425 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.eot differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.svg new file mode 100644 index 000000000..9eaa0b710 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.svg @@ -0,0 +1,251 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 2011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.ttf new file mode 100644 index 000000000..a5b9691c1 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.ttf differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.woff new file mode 100644 index 000000000..17fb5dc32 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-Semibold-webfont.woff differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.eot b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.eot new file mode 100644 index 000000000..0048da006 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.eot differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.svg b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.svg new file mode 100644 index 000000000..316b8186d --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.svg @@ -0,0 +1,251 @@ + + + + +This is a custom SVG webfont generated by Font Squirrel. +Copyright : Digitized data copyright 20102011 Google Corporation +Foundry : Ascender Corporation +Foundry URL : httpwwwascendercorpcom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.ttf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.ttf new file mode 100644 index 000000000..61d58bfa3 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.ttf differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.woff b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.woff new file mode 100644 index 000000000..611b39028 Binary files /dev/null and b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/fonts/OpenSans-SemiboldItalic-webfont.woff differ diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/js/responsive-text.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/js/responsive-text.js new file mode 100644 index 000000000..83f177a47 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/js/responsive-text.js @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2016, 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 resTextRatio = 0.2; + +(function($){ + + /* ======================================================================== + * responsive text function + * ======================================================================== */ + $.fn.res_text = function(compress, options){ + + // Setup options + var compressor = compress || 1, + settings = $.extend({ + 'minFontSize' : Number.NEGATIVE_INFINITY, + 'maxFontSize' : Number.POSITIVE_INFINITY + }, options); + + return this.each(function(){ + + /** + * store the object + */ + var $this = $(this); + + /** + * resizer() resizes items based on the object width divided by the compressor * 10 + */ + var resizer = function() { + $this.css('font-size', Math.max(Math.min($this.width() / (compressor*10), parseFloat(settings.maxFontSize)), parseFloat(settings.minFontSize))); + }; + + /** + * call once to set. + */ + resizer(); + + /** + * call on resize. Opera debounces their resize by default. + */ + $(window).on('resize.fittext orientationchange.fittext', resizer); + + }); + + }; + +}(jQuery)); + +$(document).ready(function(){ + $(".icon .text").res_text(resTextRatio); +}); + +$(window).scroll(function(){ + $(".icon .text").res_text(resTextRatio); +}); + +$(document).bind('click', function() { + $(".icon .text").res_text(resTextRatio); +}); \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/less/theme-variables.less b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/less/theme-variables.less new file mode 100644 index 000000000..5dcd3c3ce --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/public/less/theme-variables.less @@ -0,0 +1,48 @@ +/* ======================================================================== + * WSO2 CDMF Theme Variables + * ======================================================================== */ +@font-default: 'Open Sans', Arial, Helvetica, sans-serif; + +@base-dark-color: #11375B; +@base-light-color: #ffffff; +@base-success-color: #5cb85c; +@base-info-color: #009DA7; +@base-warning-color: #f0ad4e; +@base-danger-color: #d9534f; + +@primary-color: #11375b; +@secondary-color: #e4e4e4; +@optional-color: #F47415; + +@navbar-height: 50px; +@navbar-padding: 0 15px; +@navbar-color1: #4D5461; +@navbar-background-color: #526A84; +@navbrand-background-color: darken(@navbar-background-color, 5%); + +@footer-height: 40px; +@footer-background: #000000; +@footer-color: #FFFFFF; +@footer-font-size: 12px; +@footer-letter-spacing: 1px; +@footer-font-weight: 500; + +@inverse-layout-background: @primary-color; +@inverse-layout-color: @base-light-color; + +@loading-background-opacity: 0.9; +@loading-background-color: @base-dark-color; +@loading-color: @base-light-color; +@loading-inverse-background-color: @base-light-color; +@loading-inverse-color: @base-dark-color; + +@dropdown-menu-dark-background-color: #132D45; +@dropdown-menu-dark-color: @base-light-color; +@dropdown-menu-dark-tiles-background-color: #132D45; +@dropdown-menu-dark-tiles-hover-background-color: #526A84; +@dropdown-menu-dark-tiles-color: @base-light-color; + +@button-primary-background-color: @primary-color; +@button-primary-color: @base-light-color; +@button-border: @button-primary-background-color; +@button-primary-hover-background-color: lighten(@button-primary-background-color, 10%); diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/theme.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/theme.hbs new file mode 100644 index 000000000..d1b4855ef --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/theme.hbs @@ -0,0 +1,27 @@ +{{! + Copyright (c) 2016, 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. +}} +{{#zone "topCss" override=false}} + {{css "css/custom-theme.css"}} + {{css "css/custom-common.css" combine=false}} + {{css "css/custom-mobile.css"}} +{{/zone}} + +{{#zone "bottomJs" override=false}} +{{!-- Responsive JS Library--}} + {{js "js/responsive-text.js"}} +{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/theme.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/theme.json new file mode 100644 index 000000000..da92b2608 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.theme/theme.json @@ -0,0 +1,4 @@ +{ + "version": "1.0.0", + "extends": "uuf.unit.theme" +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.title/title.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.title/title.hbs new file mode 100644 index 000000000..5fbe77d38 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.title/title.hbs @@ -0,0 +1,21 @@ +{{! + Copyright (c) 2016, 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. +}} + +{{#zone "title"}} + {{@unit.params.pageTitle}} | {{@app.conf.appName}} +{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.title/title.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.title/title.json new file mode 100644 index 000000000..50380954d --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.ui.title/title.json @@ -0,0 +1,4 @@ +{ + "version": "1.0.0", + "isAnonymous": true, +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/public/css/wizard-stepper.css b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/public/css/wizard-stepper.css new file mode 100644 index 000000000..cd3e25dba --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/public/css/wizard-stepper.css @@ -0,0 +1,45 @@ +/* wizard */ +.wr-wizard { + +} + +.itm-wiz-current .wiz-no { + border:1px solid #444; + color:#fff; + background:#444; +} + +.itm-wiz { + font-weight:100; +} + +.itm-wiz div { + display:inline-block; + float:left; +} + +.wiz-no { + width:50px; + height:50px; + font-size:33px; + font-weight: 100; + border-radius: 80px; + border:1px solid #ccc; + color:#fff; + padding:0px 12px; + padding-bottom:10px; + display:inline-block; + text-align: center; + background:#ccc; + margin-right: 10px; +} + +.wiz-lbl { + width:190px; + font-size:17px; +} + +.wiz-lbl > span { + padding-top:0px; + display:inline-block; +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.hbs b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.hbs new file mode 100644 index 000000000..439dd43de --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.hbs @@ -0,0 +1,66 @@ +{{!-- Copyright (c) 2016, 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. --}} + +
    + {{#unequal steps.length 1}} + {{!-- stepper numbering pane is visible, if steps.length > 1 --}} + {{#each steps}} +
    + {{#equal @index @unit.params.currentStepIndex}} +
    +
    {{math @index "+" 1}}
    + +
    + {{/equal}} + {{#unequal @index @unit.params.currentStepIndex}} +
    +
    {{math @index "+" 1}}
    + +
    + {{/unequal}} +
    + {{/each}} +
    +
    + {{/unequal}} +
    +
    + {{#unequal steps.length 1}} + {{!-- following stepper title format is visible, if steps.length > 1 --}} +

    + Step {{math @unit.params.currentStepIndex "+" 1}} : +

    + {{@unit.params.currentStep}} +

    + {{/unequal}} + {{#equal steps.length 1}} + {{!-- following stepper title format is visible, if steps.length == 1 --}} +

    + One step to go : +

    + {{@unit.params.currentStep}} +

    + {{/equal}} +
    +
    +
    +{{#zone "topCss"}} + {{css "/css/wizard-stepper.css"}} +{{/zone}} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.js b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.js new file mode 100644 index 000000000..ea88f0013 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.js @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2016, 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. + */ + +function onRequest (context) { + var log = new Log("wizard-stepper-unit"); + log.debug("Calling wizard-stepper-unit backend js"); + + context.handlebars.registerHelper('equal', function (lvalue, rvalue, options) { + if (arguments.length < 3) + throw new Error("Handlebars Helper equal needs 2 parameters"); + if( lvalue!=rvalue ) { + return options.inverse(this); + } else { + return options.fn(this); + } + }); + + context.handlebars.registerHelper('unequal', function (lvalue, rvalue, options) { + if (arguments.length < 3) + throw new Error("Handlebars Helper equal needs 2 parameters"); + if ( lvalue == rvalue ) { + return options.inverse(this); + } else { + return options.fn(this); + } + }); + + //TODO: remove these logical calculations from helpers as it violates the vision of handlebars + context.handlebars.registerHelper("math", function (lvalue, operator, rvalue) { + if (arguments.length < 4) + throw new Error("Handlebars Helper math needs 3 parameters"); + + lvalue = parseFloat(lvalue); + rvalue = parseFloat(rvalue); + + return { + "+": lvalue + rvalue, + "-": lvalue - rvalue, + "*": lvalue * rvalue, + "/": lvalue / rvalue, + "%": lvalue % rvalue + }[operator]; + }); + + var viewModel = {}; + // converting the comma-separated list of steps in a string format in to an array + var wizardSteps; + if (context.unit.params.steps) { + wizardSteps = context.unit.params.steps.split(","); + } + viewModel.steps = wizardSteps; + return viewModel; +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.json b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.json new file mode 100644 index 000000000..f2f22da9a --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/app/units/mdm.unit.wizard-stepper/wizard-stepper.json @@ -0,0 +1,4 @@ +{ + "version": "1.0.0", + "isAnonymous": true +} \ No newline at end of file diff --git a/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/jaggery.conf b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/jaggery.conf new file mode 100644 index 000000000..8107ef943 --- /dev/null +++ b/components/mobile-plugins/mobile-base-plugin/org.wso2.carbon.device.mgt.mobile.ui/src/main/resources/jaggeryapps/emm-web-agent/jaggery.conf @@ -0,0 +1,97 @@ +{ + "displayName": "EMM Web Agent", + "logLevel": "error", + "initScripts": ["/app/modules/init.js"], + "urlMappings": [ + { + "url": "/enrollment", + "path": "/lib/pages.jag" + }, + { + "url": "/enrollment/windows/login", + "path": "/app/modules/enrollments/windows/agent-controller.jag" + }, + { + "url": "/enrollment/windows/enroll", + "path": "/app/modules/enrollments/windows/agent-enroll.jag" + }, + { + "url": "/enrollment/ios/download-certificate", + "path": "/app/modules/enrollments/ios/certificate.jag" + }, + { + "url": "/enrollment/ios/download-agent", + "path": "/app/modules/enrollments/ios/agent.jag" + }, + { + "url": "/enrollment/ios/login", + "path": "/app/modules/enrollments/ios/agent-controller.jag" + }, + { + "url": "/enrollment/ios/enroll", + "path": "/app/modules/enrollments/ios/agent-enroll.jag" + }, + { + "url": "/enrollment/ios/check", + "path": "/app/modules/enrollments/ios/agent-check.jag" + }, + { + "url": "/api/invoker/*", + "path": "/api/invoker-api.jag" + }, + { + "url": "/uuf/login", + "path": "/lib/modules/auth/login.jag" + }, + { + "url": "/uuf/logout", + "path": "/lib/modules/auth/logout.jag" + }, + { + "url": "/uuf/sso/acs", + "path": "/lib/modules/auth/acs.jag" + }, + { + "url": "/public/*", + "path": "/lib/static-files.jag" + }, + { + "url": "/unit/*", + "path": "/lib/units.jag" + }, + { + "url": "/*", + "path": "/lib/pages.jag" + } + ], + "securityConstraints": [ + { + "securityConstraint": { + "webResourceCollection": { + "name": "EMM-WEB-AGENT", + "urlPatterns": [ + "/*" + ] + }, + "userDataConstraint": { + "transportGuarantee": "CONFIDENTIAL" + } + } + }, + { + "securityConstraint": { + "webResourceCollection": { + "name": "EMM-WEB-AGENT-http", + "urlPatterns": [ + "/public/*", + "/enrollments/windows/*", + "/enrollment/windows/*" + ] + }, + "userDataConstraint": { + "transportGuarantee": "NONE" + } + } + } + ] +}