forked from community/device-mgt-plugins
parent
04b1a22a00
commit
d70c576ff0
@ -0,0 +1,92 @@
|
||||
{{!
|
||||
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.
|
||||
}}
|
||||
<!-- android -->
|
||||
<div class="panel panel-default">
|
||||
<div id="android-config-body" class="panel-collapse panel-body" role="tabpanel">
|
||||
<div id="android-config-error-msg" class="alert alert-danger hidden" role="alert">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
</div>
|
||||
<h4>
|
||||
Communication Protocol Configuration
|
||||
<hr>
|
||||
</h4>
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="android-config-notifier">
|
||||
Type of Communication
|
||||
<span class="helper" title="Communication method of android agent to contact EMM server">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<select id="android-config-notifier" class="form-control" data-default="0">
|
||||
<option value="1">Local Polling</option>
|
||||
<option value="2">Google Cloud Messaging ( GCM )</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div id="local-inputs">
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="android-config-notifier-frequency">
|
||||
Polling Interval*
|
||||
<span class="helper" title="Time interval after which Android agent will contact EMM server each time to fetch data">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
<br>
|
||||
( Should be in seconds )
|
||||
</label>
|
||||
<input id="android-config-notifier-frequency" type="text" class="form-control" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="gcm-inputs">
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="android-config-gcm-api-key">
|
||||
API Key*
|
||||
<span class="helper" title="GCM API Key">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="android-config-gcm-api-key" type="text" class="form-control" >
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="android-config-gcm-sender-id">
|
||||
Sender ID*
|
||||
<span class="helper" title="GCM Sender ID">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="android-config-gcm-sender-id" type="text" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<h4>
|
||||
End User License Agreement ( EULA )
|
||||
<hr>
|
||||
</h4>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<textarea id="android-eula" type="text" class="form-control"></textarea>
|
||||
</div>
|
||||
<div class="wr-input-control wr-btn-grp">
|
||||
<button id="save-android-btn" class="wr-btn">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /android -->
|
||||
{{#zone "bottomJs"}}
|
||||
{{js "js/platform-configuration.js"}}
|
||||
{{/zone}}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"version" : "1.0.0"
|
||||
}
|
@ -0,0 +1,250 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Checks if provided input is valid against RegEx input.
|
||||
*
|
||||
* @param regExp Regular expression
|
||||
* @param inputString Input string to check
|
||||
* @returns {boolean} Returns true if input matches RegEx
|
||||
*/
|
||||
function isPositiveInteger(str) {
|
||||
return /^\+?(0|[1-9]\d*)$/.test(str);
|
||||
}
|
||||
|
||||
var notifierTypeConstants = {
|
||||
"LOCAL": "1",
|
||||
"GCM": "2"
|
||||
};
|
||||
// Constants to define platform types available
|
||||
var platformTypeConstants = {
|
||||
"ANDROID": "android",
|
||||
"IOS": "ios",
|
||||
"WINDOWS": "windows"
|
||||
};
|
||||
|
||||
var responseCodes = {
|
||||
"CREATED": "Created",
|
||||
"SUCCESS": "201",
|
||||
"INTERNAL_SERVER_ERROR": "Internal Server Error"
|
||||
};
|
||||
|
||||
var configParams = {
|
||||
"NOTIFIER_TYPE": "notifierType",
|
||||
"NOTIFIER_FREQUENCY": "notifierFrequency",
|
||||
"GCM_API_KEY": "gcmAPIKey",
|
||||
"GCM_SENDER_ID": "gcmSenderId",
|
||||
"ANDROID_EULA": "androidEula",
|
||||
"IOS_EULA": "iosEula",
|
||||
"CONFIG_COUNTRY": "configCountry",
|
||||
"CONFIG_STATE": "configState",
|
||||
"CONFIG_LOCALITY": "configLocality",
|
||||
"CONFIG_ORGANIZATION": "configOrganization",
|
||||
"CONFIG_ORGANIZATION_UNIT": "configOrganizationUnit",
|
||||
"MDM_CERT_PASSWORD": "MDMCertPassword",
|
||||
"MDM_CERT_TOPIC_ID": "MDMCertTopicID",
|
||||
"APNS_CERT_PASSWORD": "APNSCertPassword",
|
||||
"MDM_CERT": "MDMCert",
|
||||
"MDM_CERT_NAME": "MDMCertName",
|
||||
"APNS_CERT": "APNSCert",
|
||||
"APNS_CERT_NAME": "APNSCertName",
|
||||
"ORG_DISPLAY_NAME": "organizationDisplayName",
|
||||
"GENERAL_EMAIL_HOST": "emailHost",
|
||||
"GENERAL_EMAIL_PORT": "emailPort",
|
||||
"GENERAL_EMAIL_USERNAME": "emailUsername",
|
||||
"GENERAL_EMAIL_PASSWORD": "emailPassword",
|
||||
"GENERAL_EMAIL_SENDER_ADDRESS": "emailSender",
|
||||
"GENERAL_EMAIL_TEMPLATE": "emailTemplate",
|
||||
"COMMON_NAME": "commonName",
|
||||
"KEYSTORE_PASSWORD": "keystorePassword",
|
||||
"PRIVATE_KEY_PASSWORD": "privateKeyPassword",
|
||||
"BEFORE_EXPIRE": "beforeExpire",
|
||||
"AFTER_EXPIRE": "afterExpire",
|
||||
"WINDOWS_EULA": "windowsLicense",
|
||||
"IOS_CONFIG_MDM_MODE": "iOSConfigMDMMode",
|
||||
"IOS_CONFIG_APNS_MODE": "iOSConfigAPNSMode"
|
||||
};
|
||||
|
||||
$(document).ready(function () {
|
||||
$("#gcm-inputs").hide();
|
||||
tinymce.init({
|
||||
selector: "textarea",
|
||||
height:500,
|
||||
theme: "modern",
|
||||
plugins: [
|
||||
"autoresize",
|
||||
"advlist autolink lists link image charmap print preview anchor",
|
||||
"searchreplace visualblocks code fullscreen",
|
||||
"insertdatetime image table contextmenu paste"
|
||||
],
|
||||
toolbar: "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
|
||||
});
|
||||
|
||||
var androidConfigAPI = "/api/device-mgt/android/v1.0/configuration";
|
||||
|
||||
/**
|
||||
* Following requests would execute
|
||||
* on page load event of platform configuration page in WSO2 EMM Console.
|
||||
* Upon receiving the response, the parameters will be set to the fields,
|
||||
* in case those configurations are already set.
|
||||
*/
|
||||
|
||||
invokerUtil.get(
|
||||
androidConfigAPI,
|
||||
function (data) {
|
||||
data = JSON.parse(data);
|
||||
if (data != null && data.configuration != null) {
|
||||
for (var i = 0; i < data.configuration.length; i++) {
|
||||
var config = data.configuration[i];
|
||||
if (config.name == configParams["NOTIFIER_TYPE"]) {
|
||||
$("#android-config-notifier").val(config.value);
|
||||
if (config.value != notifierTypeConstants["GCM"]) {
|
||||
$("#gcm-inputs").hide();
|
||||
$("#local-inputs").show();
|
||||
} else {
|
||||
$("#gcm-inputs").show();
|
||||
$("#local-inputs").hide();
|
||||
}
|
||||
} else if (config.name == configParams["NOTIFIER_FREQUENCY"]) {
|
||||
$("input#android-config-notifier-frequency").val(config.value / 1000);
|
||||
} else if (config.name == configParams["GCM_API_KEY"]) {
|
||||
$("input#android-config-gcm-api-key").val(config.value);
|
||||
} else if (config.name == configParams["GCM_SENDER_ID"]) {
|
||||
$("input#android-config-gcm-sender-id").val(config.value);
|
||||
} else if (config.name == configParams["ANDROID_EULA"]) {
|
||||
$("#android-eula").val(config.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, function (data) {
|
||||
console.log(data);
|
||||
});
|
||||
|
||||
$("select.select2[multiple=multiple]").select2({
|
||||
tags: true
|
||||
});
|
||||
|
||||
$("#android-config-notifier").change(function () {
|
||||
var notifierType = $("#android-config-notifier").find("option:selected").attr("value");
|
||||
if (notifierType != notifierTypeConstants["GCM"]) {
|
||||
$("#gcm-inputs").hide();
|
||||
$("#local-inputs").show();
|
||||
} else {
|
||||
$("#local-inputs").hide();
|
||||
$("#gcm-inputs").show();
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Following click function would execute
|
||||
* when a user clicks on "Save" button
|
||||
* on Android platform configuration page in WSO2 EMM Console.
|
||||
*/
|
||||
$("button#save-android-btn").click(function () {
|
||||
var notifierType = $("#android-config-notifier").find("option:selected").attr("value");
|
||||
var notifierFrequency = $("input#android-config-notifier-frequency").val();
|
||||
var gcmAPIKey = $("input#android-config-gcm-api-key").val();
|
||||
var gcmSenderId = $("input#android-config-gcm-sender-id").val();
|
||||
var androidLicense = tinyMCE.activeEditor.getContent();
|
||||
alert(androidLicense);
|
||||
var errorMsgWrapper = "#android-config-error-msg";
|
||||
var errorMsg = "#android-config-error-msg span";
|
||||
if (notifierType == notifierTypeConstants["LOCAL"] && !notifierFrequency) {
|
||||
$(errorMsg).text("Notifier frequency is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (notifierType == notifierTypeConstants["LOCAL"] && !isPositiveInteger(notifierFrequency)) {
|
||||
$(errorMsg).text("Provided notifier frequency is invalid. ");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (notifierType == notifierTypeConstants["GCM"] && !gcmAPIKey) {
|
||||
$(errorMsg).text("GCM API Key is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (notifierType == notifierTypeConstants["GCM"] && !gcmSenderId) {
|
||||
$(errorMsg).text("GCM Sender ID is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else {
|
||||
|
||||
var addConfigFormData = {};
|
||||
var configList = new Array();
|
||||
|
||||
var type = {
|
||||
"name": configParams["NOTIFIER_TYPE"],
|
||||
"value": notifierType,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var frequency = {
|
||||
"name": configParams["NOTIFIER_FREQUENCY"],
|
||||
"value": String(notifierFrequency * 1000),
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var gcmKey = {
|
||||
"name": configParams["GCM_API_KEY"],
|
||||
"value": gcmAPIKey,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var gcmId = {
|
||||
"name": configParams["GCM_SENDER_ID"],
|
||||
"value": gcmSenderId,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var androidEula = {
|
||||
"name": configParams["ANDROID_EULA"],
|
||||
"value": androidLicense,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
configList.push(type);
|
||||
configList.push(frequency);
|
||||
configList.push(androidEula);
|
||||
if (notifierType == notifierTypeConstants["GCM"]) {
|
||||
configList.push(gcmKey);
|
||||
configList.push(gcmId);
|
||||
}
|
||||
|
||||
addConfigFormData.type = platformTypeConstants["ANDROID"];
|
||||
addConfigFormData.configuration = configList;
|
||||
|
||||
var addConfigAPI = androidConfigAPI;
|
||||
|
||||
invokerUtil.put(
|
||||
addConfigAPI,
|
||||
addConfigFormData,
|
||||
function (data, textStatus, jqXHR) {
|
||||
data = JSON.parse(data);
|
||||
if (jqXHR.status == 201) {
|
||||
$("#config-save-form").addClass("hidden");
|
||||
$("#record-created-msg").removeClass("hidden");
|
||||
}
|
||||
|
||||
}, function (data) {
|
||||
if (data.status == 500) {
|
||||
$(errorMsg).text("Exception occurred at backend.");
|
||||
} else if (data.status == 403) {
|
||||
$(errorMsg).text("Action was not permitted.");
|
||||
} else {
|
||||
$(errorMsg).text("An unexpected error occurred.");
|
||||
}
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
@ -1,501 +0,0 @@
|
||||
{{!
|
||||
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.
|
||||
}}
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<!-- content -->
|
||||
<div id="config-save-form" class="container col-centered">
|
||||
<br>
|
||||
General and Platform Specific Server Settings for the Tenant
|
||||
<br>
|
||||
<br>
|
||||
<div class="wr-advance-operations">
|
||||
<div class="row no-gutter" id="typeDiv" typeData="{{#each types}}{{name}},{{/each}}">
|
||||
<div class="wr-hidden-operations-nav col-lg-4">
|
||||
<a id="generalConfigLink" href="javascript:void(0)" onclick="showAdvanceOperation('general', this)" class="selected">
|
||||
<span class="wr-hidden-operations-icon fw-stack">
|
||||
<i class="fw fw-settings fw-stack-2x"></i>
|
||||
</span>
|
||||
General Configurations
|
||||
</a>
|
||||
<div id="supportedPlatforms" class="hidden"
|
||||
{{#each types}}
|
||||
{{#equal name "android"}} data-android-id={{id}}
|
||||
data-android="true"
|
||||
{{/equal}}
|
||||
{{#equal name "ios"}} data-ios-id={{id}}
|
||||
data-ios="true"
|
||||
{{/equal}}
|
||||
{{#equal name "windows"}}
|
||||
data-windows="true" data-windows-id={{id}}
|
||||
{{/equal}}
|
||||
{{/each}}
|
||||
></div>
|
||||
<a id="androidConfigLink" href="javascript:void(0)" onclick="showAdvanceOperation('android', this)">
|
||||
<span class="wr-hidden-operations-icon fw-stack">
|
||||
<i class="fw fw-android fw-stack-2x"></i>
|
||||
</span>
|
||||
Android Configurations
|
||||
</a>
|
||||
<a id="iosConfigLink" href="javascript:void(0)" onclick="showAdvanceOperation('ios', this)">
|
||||
<span class="wr-hidden-operations-icon fw-stack">
|
||||
<i class="fw fw-apple fw-stack-2x"></i>
|
||||
</span>
|
||||
iOS Configurations
|
||||
</a>
|
||||
<a id="windowsConfigLink" href="javascript:void(0)" onclick="showAdvanceOperation('windows', this)">
|
||||
<span class="wr-hidden-operations-icon fw-stack">
|
||||
<i class="fw fw-windows fw-stack-2x"></i>
|
||||
</span>
|
||||
Windows Configurations
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="wr-hidden-operations-content col-lg-8">
|
||||
<!-- error -->
|
||||
<div data-operation="error" class="wr-hidden-operation alert alert-danger" role="alert">
|
||||
<div id="platform-config-main-error-msg" class="panel panel-default">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- general -->
|
||||
<div class="wr-hidden-operation" data-operation="general" style="display: block">
|
||||
<div class="panel panel-default">
|
||||
<div id="email-config-body" class="panel-collapse panel-body" role="tabpanel">
|
||||
<div id="email-config-error-msg" class="alert alert-danger hidden" role="alert">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
</div>
|
||||
<h4>
|
||||
Policy Compliance Monitoring
|
||||
<hr>
|
||||
</h4>
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="config-frequency">
|
||||
Compliance Monitoring Time Interval*
|
||||
<span class="helper" title="Time Interval after which EMM server will contact devices and monitor the compliance of policies applied to them">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
<br>
|
||||
( Should be in seconds )
|
||||
</label>
|
||||
<input id="monitoring-config-frequency" type="text" class="form-control" >
|
||||
</div>
|
||||
<div class="wr-input-control wr-btn-grp">
|
||||
<button id="save-general-btn" class="wr-btn">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
<!--<div id="general-config-heading" class="panel-heading" role="tab">
|
||||
<h2 class="sub-title panel-title">
|
||||
Email Configurations
|
||||
<hr>
|
||||
</h2>
|
||||
</div>-->
|
||||
<!--<div id="email-config-body" class="panel-collapse panel-body" role="tabpanel">
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="email-config-host">
|
||||
Host
|
||||
<span class="helper" title="SMTP Server Host">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="email-config-host" type="text" class="form-control" placeholder="[ Required Field ]">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="email-config-port">
|
||||
Port
|
||||
<span class="helper" title="SMTP Server Port">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="email-config-port" type="text" class="form-control" placeholder="[ Required Field ]">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="email-config-username">
|
||||
Username
|
||||
<span class="helper" title="Email Username">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="email-config-username" type="text" class="form-control" placeholder="[ Required Field ]">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="email-config-password">
|
||||
Password
|
||||
<span class="helper" title="Email Password">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="email-config-password" type="password" class="form-control" placeholder="[ Required Field ]">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="email-config-sender-email">
|
||||
Sender Email Address
|
||||
<span class="helper" title="Sender Email Address to be appeared on the email">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="email-config-sender-email" type="text" class="form-control" placeholder="[ Required Field ]">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="email-config-template">
|
||||
Email Template
|
||||
<span class="helper" title="Email Template to be used in invitation email">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<textarea id="email-config-template" type="textarea" class="form-control"></textarea>
|
||||
</div>
|
||||
</div>-->
|
||||
</div>
|
||||
</div>
|
||||
<!-- general-->
|
||||
|
||||
<!-- android -->
|
||||
<div class="wr-hidden-operation" data-operation="android">
|
||||
<div class="panel panel-default">
|
||||
<div id="android-config-body" class="panel-collapse panel-body" role="tabpanel">
|
||||
<div id="android-config-error-msg" class="alert alert-danger hidden" role="alert">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
</div>
|
||||
<h4>
|
||||
Communication Protocol Configuration
|
||||
<hr>
|
||||
</h4>
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="android-config-notifier">
|
||||
Type of Communication
|
||||
<span class="helper" title="Communication method of android agent to contact EMM server">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<select id="android-config-notifier" class="form-control" data-default="0">
|
||||
<option value="1">Local Polling</option>
|
||||
<option value="2">Google Cloud Messaging ( GCM )</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div id="local-inputs">
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="android-config-notifier-frequency">
|
||||
Polling Interval*
|
||||
<span class="helper" title="Time interval after which Android agent will contact EMM server each time to fetch data">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
<br>
|
||||
( Should be in seconds )
|
||||
</label>
|
||||
<input id="android-config-notifier-frequency" type="text" class="form-control" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="gcm-inputs">
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="android-config-gcm-api-key">
|
||||
API Key*
|
||||
<span class="helper" title="GCM API Key">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="android-config-gcm-api-key" type="text" class="form-control" >
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="android-config-gcm-sender-id">
|
||||
Sender ID*
|
||||
<span class="helper" title="GCM Sender ID">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="android-config-gcm-sender-id" type="text" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<h4>
|
||||
End User License Agreement ( EULA )
|
||||
<hr>
|
||||
</h4>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<textarea id="android-eula" type="text" class="form-control"></textarea>
|
||||
</div>
|
||||
<div class="wr-input-control wr-btn-grp">
|
||||
<button id="save-android-btn" class="wr-btn">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /android -->
|
||||
|
||||
<!-- ios -->
|
||||
<div class="wr-hidden-operation" data-operation="ios">
|
||||
<div class="panel panel-default operation-data" data-operation="wifi" data-operation-code="WIFI">
|
||||
<div id="wifi-body" class="panel-collapse panel-body" role="tabpanel" aria-labelledby="ios-body">
|
||||
<div id="ios-config-error-msg" class="alert alert-danger hidden" role="alert">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
</div>
|
||||
<h4>
|
||||
iOS SCEP Certificate Configurations
|
||||
<hr>
|
||||
</h4>
|
||||
<div id="ios-scep-config-error-msg" class="alert alert-danger hidden" role="alert">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="ios-config-country">
|
||||
Country (C)*
|
||||
<span class="helper" title="Country code (ex: LK, US)">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="ios-config-country" type="text" class="form-control">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="ios-config-state">
|
||||
State (ST)*
|
||||
<span class="helper" title="State">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="ios-config-state" type="text" class="form-control">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="ios-config-locality">
|
||||
Locality (L)*
|
||||
<span class="helper" title="Locality">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="ios-config-locality" type="text" class="form-control">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="ios-config-organization">
|
||||
Organization (O)*
|
||||
<span class="helper" title="Organization Name">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="ios-config-organization" type="text" class="form-control">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="ios-config-organization-unit">
|
||||
Organization Unit (OU)*
|
||||
<span class="helper" title="Organization Unit">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="ios-config-organization-unit" type="text" class="form-control">
|
||||
</div>
|
||||
|
||||
<h4>
|
||||
iOS Profile Configurations
|
||||
<hr>
|
||||
</h4>
|
||||
|
||||
<div id="ios-profile-conf-error-msg" class="alert alert-danger hidden" role="alert">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
</div>
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="ios-org-display-name">
|
||||
Organization Display Name*
|
||||
<span class="helper" title="Organization display name">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="ios-org-display-name" type="text" class="form-control">
|
||||
</div>
|
||||
|
||||
<h4>
|
||||
iOS MDM Configurations
|
||||
<hr>
|
||||
</h4>
|
||||
|
||||
<div id="ios-mdm-config-error-msg" class="alert alert-danger hidden" role="alert">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
</div>
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="ios-config-mdm-certificate">
|
||||
MDM Certificate*
|
||||
<span class="helper" title="Upload MDM Certificate">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label><br>
|
||||
<label class="wr-input-label" id="mdm-cert-file-name">
|
||||
</label>
|
||||
<input id="ios-config-mdm-certificate" type="file" class="form-control">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="ios-config-mdm-certificate-password">
|
||||
MDM Certificate Password*
|
||||
<span class="helper" title="MDM Certificate Password">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="ios-config-mdm-certificate-password" type="password" class="form-control">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="ios-config-mdm-certificate-topic-id">
|
||||
MDM Certificate Topic ID*
|
||||
<span class="helper" title="MDM Certificate Topic ID">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="ios-config-mdm-certificate-topic-id" type="text" class="form-control">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="ios-config-mdm-mode">
|
||||
Mode
|
||||
<span class="helper" title="Release mode">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<select id="ios-config-mdm-mode" class="form-control" data-default="0">
|
||||
<option value="1">Production</option>
|
||||
<option value="2">Developer</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<h4>
|
||||
iOS APNS Configurations
|
||||
<hr>
|
||||
</h4>
|
||||
|
||||
<div id="ios-apns-config-error-msg" class="alert alert-danger hidden" role="alert">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
</div>
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="ios-config-apns-certificate">
|
||||
APNS Certificate*
|
||||
<span class="helper" title="Upload APNS Certificate">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label><br>
|
||||
<label class="wr-input-label" id="apns-cert-file-name">
|
||||
</label>
|
||||
<input id="ios-config-apns-certificate" type="file" class="form-control">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="ios-config-apns-certificate-password">
|
||||
APNS Certificate Password*
|
||||
<span class="helper" title="APNS Certificate Password">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<input id="ios-config-apns-certificate-password" type="password" class="form-control">
|
||||
</div>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="ios-config-apns-mode">
|
||||
Mode
|
||||
<span class="helper" title="Release mode">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
</label>
|
||||
<select id="ios-config-apns-mode" class="form-control" data-default="0">
|
||||
<option value="1">Production</option>
|
||||
<option value="2">Developer</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<h4>
|
||||
End User License Agreement (EULA)
|
||||
<hr>
|
||||
</h4>
|
||||
|
||||
<div class="wr-input-control">
|
||||
<textarea id="ios-eula" type="text" class="form-control"></textarea>
|
||||
</div>
|
||||
<div class="wr-input-control wr-btn-grp">
|
||||
<button id="save-ios-btn" class="wr-btn">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /ios -->
|
||||
|
||||
<!-- windows -->
|
||||
<div class="wr-hidden-operation" data-operation="windows">
|
||||
<div class="panel panel-default">
|
||||
<div id="windows-config-body" class="panel-collapse panel-body" role="tabpanel">
|
||||
<div id="windows-config-error-msg" class="alert alert-danger hidden" role="alert">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
</div>
|
||||
<h4>
|
||||
Device Polling Configuration
|
||||
<hr>
|
||||
</h4>
|
||||
<div id="local-inputs">
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="windows-config-notifier-frequency">
|
||||
Polling Interval*
|
||||
<span class="helper" title="Time interval after which windows agent will contact EMM server each time to fetch data">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
<br>
|
||||
( Should be in seconds )
|
||||
</label>
|
||||
<input id="windows-config-notifier-frequency" type="text" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<h4>
|
||||
End User License Agreement ( EULA )
|
||||
<hr>
|
||||
</h4>
|
||||
<div class="wr-input-control">
|
||||
<textarea id="windows-eula" type="text" class="form-control"></textarea>
|
||||
</div>
|
||||
<div class="wr-input-control wr-btn-grp">
|
||||
<button id="save-windows-btn" class="wr-btn">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /windows -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="record-created-msg" class="container col-centered wr-content hidden">
|
||||
<div class="wr-form">
|
||||
<p class="page-sub-title">Configuration was saved successfully.</p>
|
||||
<br>
|
||||
<br>Please click <b>"Go back to configurations"</b>, if you wish to save another configuration or click
|
||||
<b>"Exit"</b> to complete the process and go back to the dashboard.
|
||||
<hr />
|
||||
<button class="wr-btn" onclick="window.location.href='{{@app.context}}/platform-configuration'">Go back to configurations</button>
|
||||
<button class="wr-btn" onclick="window.location.href='{{@app.context}}'"> Exit </button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /content -->
|
||||
</div>
|
||||
</div>
|
||||
{{#zone "bottomJs"}}
|
||||
{{js "js/platform-configuration.js"}}
|
||||
{{/zone}}
|
@ -1,9 +0,0 @@
|
||||
function onRequest(context) {
|
||||
// var log = new Log("platform-configuration-unit backend js");
|
||||
var userModule = require("/app/modules/user.js")["userModule"];
|
||||
var typesListResponse = userModule.getPlatforms();
|
||||
if (typesListResponse["status"] == "success") {
|
||||
context["types"] = typesListResponse["content"];
|
||||
}
|
||||
return context;
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"version" : "1.0.0",
|
||||
"extends": "cdmf.unit.platform.configuration"
|
||||
}
|
@ -1,878 +0,0 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Checks if provided input is valid against RegEx input.
|
||||
*
|
||||
* @param regExp Regular expression
|
||||
* @param inputString Input string to check
|
||||
* @returns {boolean} Returns true if input matches RegEx
|
||||
*/
|
||||
function inputIsValid(regExp, inputString) {
|
||||
return regExp.test(inputString);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if provided input is valid against RegEx input.
|
||||
*
|
||||
* @param regExp Regular expression
|
||||
* @param inputString Input string to check
|
||||
* @returns {boolean} Returns true if input matches RegEx
|
||||
*/
|
||||
function isPositiveInteger(str) {
|
||||
return /^\+?(0|[1-9]\d*)$/.test(str);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get valid param.
|
||||
*
|
||||
* @param certificate
|
||||
* @param cached param (in the registry)
|
||||
* @returns {String} Returns the valid param
|
||||
*/
|
||||
function validateCertificateParams(param, cachedParam) {
|
||||
if (param == '' && cachedParam != null) {
|
||||
return cachedParam;
|
||||
} else {
|
||||
return param;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if an email address has the valid format or not.
|
||||
*
|
||||
* @param email Email address
|
||||
* @returns {boolean} true if email has the valid format, otherwise false.
|
||||
*/
|
||||
function emailIsValid(email) {
|
||||
var regExp = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
|
||||
return regExp.test(email);
|
||||
}
|
||||
|
||||
var iOSMDMCertificateName = null;
|
||||
var iOSMDMCertificate = null;
|
||||
var iOSAPNSCertificateName = null;
|
||||
var iOSAPNSCertificate = null;
|
||||
|
||||
var notifierTypeConstants = {
|
||||
"LOCAL": "1",
|
||||
"GCM": "2"
|
||||
};
|
||||
// Constants to define platform types available
|
||||
var platformTypeConstants = {
|
||||
"ANDROID": "android",
|
||||
"IOS": "ios",
|
||||
"WINDOWS": "windows"
|
||||
};
|
||||
|
||||
var responseCodes = {
|
||||
"CREATED": "Created",
|
||||
"SUCCESS": "201",
|
||||
"INTERNAL_SERVER_ERROR": "Internal Server Error"
|
||||
};
|
||||
|
||||
var configParams = {
|
||||
"NOTIFIER_TYPE": "notifierType",
|
||||
"NOTIFIER_FREQUENCY": "notifierFrequency",
|
||||
"GCM_API_KEY": "gcmAPIKey",
|
||||
"GCM_SENDER_ID": "gcmSenderId",
|
||||
"ANDROID_EULA": "androidEula",
|
||||
"IOS_EULA": "iosEula",
|
||||
"CONFIG_COUNTRY": "configCountry",
|
||||
"CONFIG_STATE": "configState",
|
||||
"CONFIG_LOCALITY": "configLocality",
|
||||
"CONFIG_ORGANIZATION": "configOrganization",
|
||||
"CONFIG_ORGANIZATION_UNIT": "configOrganizationUnit",
|
||||
"MDM_CERT_PASSWORD": "MDMCertPassword",
|
||||
"MDM_CERT_TOPIC_ID": "MDMCertTopicID",
|
||||
"APNS_CERT_PASSWORD": "APNSCertPassword",
|
||||
"MDM_CERT": "MDMCert",
|
||||
"MDM_CERT_NAME": "MDMCertName",
|
||||
"APNS_CERT": "APNSCert",
|
||||
"APNS_CERT_NAME": "APNSCertName",
|
||||
"ORG_DISPLAY_NAME": "organizationDisplayName",
|
||||
"GENERAL_EMAIL_HOST": "emailHost",
|
||||
"GENERAL_EMAIL_PORT": "emailPort",
|
||||
"GENERAL_EMAIL_USERNAME": "emailUsername",
|
||||
"GENERAL_EMAIL_PASSWORD": "emailPassword",
|
||||
"GENERAL_EMAIL_SENDER_ADDRESS": "emailSender",
|
||||
"GENERAL_EMAIL_TEMPLATE": "emailTemplate",
|
||||
"COMMON_NAME": "commonName",
|
||||
"KEYSTORE_PASSWORD": "keystorePassword",
|
||||
"PRIVATE_KEY_PASSWORD": "privateKeyPassword",
|
||||
"BEFORE_EXPIRE": "beforeExpire",
|
||||
"AFTER_EXPIRE": "afterExpire",
|
||||
"WINDOWS_EULA": "windowsLicense"
|
||||
};
|
||||
|
||||
function promptErrorPolicyPlatform(errorMsg) {
|
||||
var mainErrorMsgWrapper = "#platform-config-main-error-msg";
|
||||
var mainErrorMsg = mainErrorMsgWrapper + " span";
|
||||
$(mainErrorMsg).text(errorMsg);
|
||||
$(mainErrorMsgWrapper).show();
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
|
||||
var platformsSupported = $("#typeDiv").attr("typeData");
|
||||
$("#gcm-inputs").hide();
|
||||
tinymce.init({
|
||||
selector: "textarea",
|
||||
height: 500,
|
||||
theme: "modern",
|
||||
plugins: [
|
||||
"autoresize",
|
||||
"advlist autolink lists link image charmap print preview anchor",
|
||||
"searchreplace visualblocks code fullscreen",
|
||||
"insertdatetime image table contextmenu paste"
|
||||
],
|
||||
toolbar: "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
|
||||
});
|
||||
|
||||
var getAndroidConfigAPI = "/mdm-android-agent/configuration";
|
||||
var getGeneralConfigAPI = "/devicemgt_admin/configuration";
|
||||
var getIosConfigAPI = "/ios/configuration";
|
||||
var getWindowsConfigAPI = "/mdm-windows-agent/services/configuration";
|
||||
|
||||
/**
|
||||
* Following requests would execute
|
||||
* on page load event of platform configuration page in WSO2 EMM Console.
|
||||
* Upon receiving the response, the parameters will be set to the fields,
|
||||
* in case those configurations are already set.
|
||||
*/
|
||||
|
||||
if (platformsSupported.indexOf('android') != -1) {
|
||||
invokerUtil.get(
|
||||
getAndroidConfigAPI,
|
||||
function (data) {
|
||||
data = JSON.parse(data);
|
||||
if (data != null && data.configuration != null) {
|
||||
for (var i = 0; i < data.configuration.length; i++) {
|
||||
var config = data.configuration[i];
|
||||
if (config.name == configParams["NOTIFIER_TYPE"]) {
|
||||
$("#android-config-notifier").val(config.value);
|
||||
if (config.value != notifierTypeConstants["GCM"]) {
|
||||
$("#gcm-inputs").hide();
|
||||
$("#local-inputs").show();
|
||||
} else {
|
||||
$("#gcm-inputs").show();
|
||||
$("#local-inputs").hide();
|
||||
}
|
||||
} else if (config.name == configParams["NOTIFIER_FREQUENCY"]) {
|
||||
$("input#android-config-notifier-frequency").val(config.value / 1000);
|
||||
} else if (config.name == configParams["GCM_API_KEY"]) {
|
||||
$("input#android-config-gcm-api-key").val(config.value);
|
||||
} else if (config.name == configParams["GCM_SENDER_ID"]) {
|
||||
$("input#android-config-gcm-sender-id").val(config.value);
|
||||
} else if (config.name == configParams["ANDROID_EULA"]) {
|
||||
$("#android-eula").val(config.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, function (data) {
|
||||
console.log(data);
|
||||
});
|
||||
}
|
||||
|
||||
invokerUtil.get(
|
||||
getGeneralConfigAPI,
|
||||
function (data) {
|
||||
data = JSON.parse(data);
|
||||
if (data && data.configuration) {
|
||||
for (var i = 0; i < data.configuration.length; i++) {
|
||||
var config = data.configuration[i];
|
||||
if (config.name == configParams["NOTIFIER_FREQUENCY"]) {
|
||||
$("input#monitoring-config-frequency").val(config.value / 1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, function (data) {
|
||||
console.log(data);
|
||||
});
|
||||
|
||||
if (platformsSupported.indexOf('windows') != -1) {
|
||||
invokerUtil.get(
|
||||
getWindowsConfigAPI,
|
||||
function (data) {
|
||||
data = JSON.parse(data);
|
||||
if (data != null && data.configuration != null) {
|
||||
for (var i = 0; i < data.configuration.length; i++) {
|
||||
var config = data.configuration[i];
|
||||
if (config.name == configParams["NOTIFIER_FREQUENCY"]) {
|
||||
$("input#windows-config-notifier-frequency").val(config.value / 1000);
|
||||
} else if (config.name == configParams["WINDOWS_EULA"]) {
|
||||
$("#windows-eula").val(config.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, function (data) {
|
||||
console.log(data);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
if (platformsSupported.indexOf('ios') != -1) {
|
||||
invokerUtil.get(
|
||||
getIosConfigAPI,
|
||||
function (data) {
|
||||
data = JSON.parse(data);
|
||||
if (data != null && data.configuration != null) {
|
||||
for (var i = 0; i < data.configuration.length; i++) {
|
||||
var config = data.configuration[i];
|
||||
if (config.name == configParams["CONFIG_COUNTRY"]) {
|
||||
$("input#ios-config-country").val(config.value);
|
||||
} else if (config.name == configParams["CONFIG_STATE"]) {
|
||||
$("input#ios-config-state").val(config.value);
|
||||
} else if (config.name == configParams["CONFIG_LOCALITY"]) {
|
||||
$("input#ios-config-locality").val(config.value);
|
||||
} else if (config.name == configParams["CONFIG_ORGANIZATION"]) {
|
||||
$("input#ios-config-organization").val(config.value);
|
||||
} else if (config.name == configParams["CONFIG_ORGANIZATION_UNIT"]) {
|
||||
$("input#ios-config-organization-unit").val(config.value);
|
||||
} else if (config.name == configParams["MDM_CERT_PASSWORD"]) {
|
||||
$("input#ios-config-mdm-certificate-password").val(config.value);
|
||||
} else if (config.name == configParams["MDM_CERT_TOPIC_ID"]) {
|
||||
$("input#ios-config-mdm-certificate-topic-id").val(config.value);
|
||||
} else if (config.name == configParams["APNS_CERT_PASSWORD"]) {
|
||||
$("input#ios-config-apns-certificate-password").val(config.value);
|
||||
} else if (config.name == configParams["MDM_CERT_NAME"]) {
|
||||
$("#mdm-cert-file-name").html(config.value);
|
||||
iOSMDMCertificateName = config.value;
|
||||
} else if (config.name == configParams["MDM_CERT"]) {
|
||||
iOSMDMCertificate = config.value;
|
||||
} else if (config.name == configParams["APNS_CERT_NAME"]) {
|
||||
$("#apns-cert-file-name").html(config.value);
|
||||
iOSAPNSCertificateName = config.value;
|
||||
} else if (config.name == configParams["APNS_CERT"]) {
|
||||
iOSAPNSCertificate = config.value;
|
||||
} else if (config.name == configParams["ORG_DISPLAY_NAME"]) {
|
||||
$("input#ios-org-display-name").val(config.value);
|
||||
} else if (config.name == configParams["IOS_EULA"]) {
|
||||
$("#ios-eula").val(config.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, function (data) {
|
||||
console.log(data);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
$("select.select2[multiple=multiple]").select2({
|
||||
tags: true
|
||||
});
|
||||
|
||||
$("#android-config-notifier").change(function () {
|
||||
var notifierType = $("#android-config-notifier").find("option:selected").attr("value");
|
||||
if (notifierType != notifierTypeConstants["GCM"]) {
|
||||
$("#gcm-inputs").hide();
|
||||
$("#local-inputs").show();
|
||||
} else {
|
||||
$("#local-inputs").hide();
|
||||
$("#gcm-inputs").show();
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Following click function would execute
|
||||
* when a user clicks on "Save" button
|
||||
* on Android platform configuration page in WSO2 EMM Console.
|
||||
*/
|
||||
$("button#save-android-btn").click(function () {
|
||||
var notifierType = $("#android-config-notifier").find("option:selected").attr("value");
|
||||
var notifierFrequency = $("input#android-config-notifier-frequency").val();
|
||||
var gcmAPIKey = $("input#android-config-gcm-api-key").val();
|
||||
var gcmSenderId = $("input#android-config-gcm-sender-id").val();
|
||||
var androidLicense = tinymce.get('android-eula').getContent();
|
||||
|
||||
var errorMsgWrapper = "#android-config-error-msg";
|
||||
var errorMsg = "#android-config-error-msg span";
|
||||
if (notifierType == notifierTypeConstants["LOCAL"] && !notifierFrequency) {
|
||||
$(errorMsg).text("Notifier frequency is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (notifierType == notifierTypeConstants["LOCAL"] && !isPositiveInteger(notifierFrequency)) {
|
||||
$(errorMsg).text("Provided notifier frequency is invalid. ");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (notifierType == notifierTypeConstants["GCM"] && !gcmAPIKey) {
|
||||
$(errorMsg).text("GCM API Key is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (notifierType == notifierTypeConstants["GCM"] && !gcmSenderId) {
|
||||
$(errorMsg).text("GCM Sender ID is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else {
|
||||
|
||||
var addConfigFormData = {};
|
||||
var configList = new Array();
|
||||
|
||||
var type = {
|
||||
"name": configParams["NOTIFIER_TYPE"],
|
||||
"value": notifierType,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var frequency = {
|
||||
"name": configParams["NOTIFIER_FREQUENCY"],
|
||||
"value": String(notifierFrequency * 1000),
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var gcmKey = {
|
||||
"name": configParams["GCM_API_KEY"],
|
||||
"value": gcmAPIKey,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var gcmId = {
|
||||
"name": configParams["GCM_SENDER_ID"],
|
||||
"value": gcmSenderId,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var androidEula = {
|
||||
"name": configParams["ANDROID_EULA"],
|
||||
"value": androidLicense,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
configList.push(type);
|
||||
configList.push(frequency);
|
||||
configList.push(androidEula);
|
||||
if (notifierType == notifierTypeConstants["GCM"]) {
|
||||
configList.push(gcmKey);
|
||||
configList.push(gcmId);
|
||||
}
|
||||
|
||||
addConfigFormData.type = platformTypeConstants["ANDROID"];
|
||||
addConfigFormData.configuration = configList;
|
||||
|
||||
var addConfigAPI = "/mdm-android-agent/configuration";
|
||||
|
||||
invokerUtil.post(
|
||||
addConfigAPI,
|
||||
addConfigFormData,
|
||||
function (data) {
|
||||
data = JSON.parse(data);
|
||||
if (data.responseCode == responseCodes["CREATED"]) {
|
||||
$("#config-save-form").addClass("hidden");
|
||||
$("#record-created-msg").removeClass("hidden");
|
||||
} else if (data == 500) {
|
||||
$(errorMsg).text("Exception occurred at backend.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (data == 403) {
|
||||
$(errorMsg).text("Action was not permitted.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else {
|
||||
$(errorMsg).text("An unexpected error occurred.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
}
|
||||
|
||||
|
||||
}, function (data) {
|
||||
data = data.status;
|
||||
if (data == 500) {
|
||||
$(errorMsg).text("Exception occurred at backend.");
|
||||
} else if (data == 403) {
|
||||
$(errorMsg).text("Action was not permitted.");
|
||||
} else {
|
||||
$(errorMsg).text("An unexpected error occurred.");
|
||||
}
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Following click function would execute
|
||||
* when a user clicks on "Save" button
|
||||
* on General platform configuration page in WSO2 EMM Console.
|
||||
*/
|
||||
$("button#save-general-btn").click(function () {
|
||||
var notifierFrequency = $("input#monitoring-config-frequency").val();
|
||||
var errorMsgWrapper = "#email-config-error-msg";
|
||||
var errorMsg = "#email-config-error-msg span";
|
||||
|
||||
if (!notifierFrequency) {
|
||||
$(errorMsg).text("Monitoring frequency is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (!isPositiveInteger(notifierFrequency)) {
|
||||
$(errorMsg).text("Provided monitoring frequency is invalid. ");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else {
|
||||
var addConfigFormData = {};
|
||||
var configList = new Array();
|
||||
|
||||
var monitorFrequency = {
|
||||
"name": configParams["NOTIFIER_FREQUENCY"],
|
||||
"value": String((notifierFrequency * 1000)),
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
configList.push(monitorFrequency);
|
||||
addConfigFormData.configuration = configList;
|
||||
|
||||
var addConfigAPI = "/devicemgt_admin/configuration";
|
||||
invokerUtil.post(
|
||||
addConfigAPI,
|
||||
addConfigFormData,
|
||||
function (data) {
|
||||
data = JSON.parse(data);
|
||||
if (data.statusCode == responseCodes["SUCCESS"]) {
|
||||
$("#config-save-form").addClass("hidden");
|
||||
$("#record-created-msg").removeClass("hidden");
|
||||
} else if (data == 500) {
|
||||
$(errorMsg).text("Exception occurred at backend.");
|
||||
} else if (data == 403) {
|
||||
$(errorMsg).text("Action was not permitted.");
|
||||
} else {
|
||||
$(errorMsg).text("An unexpected error occurred.");
|
||||
}
|
||||
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
}, function (data) {
|
||||
data = data.status;
|
||||
if (data == 500) {
|
||||
$(errorMsg).text("Exception occurred at backend.");
|
||||
} else if (data == 403) {
|
||||
$(errorMsg).text("Action was not permitted.");
|
||||
} else {
|
||||
$(errorMsg).text("An unexpected error occurred.");
|
||||
}
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
var errorMsgWrapper = "#ios-config-error-msg";
|
||||
var errorMsg = "#ios-config-error-msg span";
|
||||
var fileTypes = ['pfx'];
|
||||
var notSupportedError = false;
|
||||
|
||||
var base64MDMCert = "";
|
||||
var fileInputMDMCert = $('#ios-config-mdm-certificate');
|
||||
var fileNameMDMCert = "";
|
||||
var invalidFormatMDMCert = false;
|
||||
|
||||
var base64APNSCert = "";
|
||||
var fileInputAPNSCert = $('#ios-config-apns-certificate');
|
||||
var fileNameAPNSCert = "";
|
||||
var invalidFormatAPNSCert = false;
|
||||
|
||||
$(fileInputMDMCert).change(function () {
|
||||
|
||||
if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
|
||||
$(errorMsg).text("The File APIs are not fully supported in this browser.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
notSupportedError = true;
|
||||
return;
|
||||
}
|
||||
|
||||
var file = fileInputMDMCert[0].files[0];
|
||||
fileNameMDMCert = file.name;
|
||||
var extension = file.name.split('.').pop().toLowerCase(),
|
||||
isSuccess = fileTypes.indexOf(extension) > -1;
|
||||
|
||||
if (isSuccess) {
|
||||
var fileReader = new FileReader();
|
||||
fileReader.onload = function (event) {
|
||||
base64MDMCert = event.target.result;
|
||||
};
|
||||
fileReader.readAsDataURL(file);
|
||||
invalidFormatMDMCert = false;
|
||||
} else {
|
||||
base64MDMCert = "";
|
||||
invalidFormatMDMCert = true;
|
||||
}
|
||||
});
|
||||
|
||||
$(fileInputAPNSCert).change(function () {
|
||||
|
||||
if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
|
||||
$(errorMsg).text("The File APIs are not fully supported in this browser.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
notSupportedError = true;
|
||||
return;
|
||||
}
|
||||
|
||||
var file = fileInputAPNSCert[0].files[0];
|
||||
fileNameAPNSCert = file.name;
|
||||
var extension = file.name.split('.').pop().toLowerCase(),
|
||||
isSuccess = fileTypes.indexOf(extension) > -1;
|
||||
|
||||
if (isSuccess) {
|
||||
var fileReader = new FileReader();
|
||||
fileReader.onload = function (event) {
|
||||
base64APNSCert = event.target.result;
|
||||
};
|
||||
fileReader.readAsDataURL(file);
|
||||
invalidFormatAPNSCert = false;
|
||||
} else {
|
||||
base64MDMCert = "";
|
||||
invalidFormatAPNSCert = true;
|
||||
}
|
||||
});
|
||||
|
||||
$("button#save-ios-btn").click(function () {
|
||||
|
||||
var configCountry = $("#ios-config-country").val();
|
||||
var configState = $("#ios-config-state").val();
|
||||
var configLocality = $("#ios-config-locality").val();
|
||||
var configOrganization = $("#ios-config-organization").val();
|
||||
var configOrganizationUnit = $("#ios-config-organization-unit").val();
|
||||
var MDMCertPassword = $("#ios-config-mdm-certificate-password").val();
|
||||
var MDMCertTopicID = $("#ios-config-mdm-certificate-topic-id").val();
|
||||
var APNSCertPassword = $("#ios-config-apns-certificate-password").val();
|
||||
var configOrgDisplayName = $("#ios-org-display-name").val();
|
||||
var iosLicense = tinymce.get('ios-eula').getContent();
|
||||
|
||||
fileNameMDMCert = validateCertificateParams(fileNameMDMCert, iOSMDMCertificateName);
|
||||
fileNameAPNSCert = validateCertificateParams(fileNameAPNSCert, iOSAPNSCertificateName);
|
||||
base64MDMCert = validateCertificateParams(base64MDMCert, iOSMDMCertificate);
|
||||
base64APNSCert = validateCertificateParams(base64APNSCert, iOSAPNSCertificate);
|
||||
|
||||
if (!configCountry) {
|
||||
$(errorMsg).text("SCEP country is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (!configState) {
|
||||
$(errorMsg).text("SCEP state is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (!configLocality) {
|
||||
$(errorMsg).text("SCEP locality is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (!configOrganization) {
|
||||
$(errorMsg).text("SCEP organization is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (!configOrganizationUnit) {
|
||||
$(errorMsg).text("SCEP organization unit is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (!MDMCertPassword) {
|
||||
$(errorMsg).text("MDM certificate password is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (!MDMCertTopicID) {
|
||||
$(errorMsg).text("MDM certificate topic ID is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (!APNSCertPassword) {
|
||||
$(errorMsg).text("APNS certificate password is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (notSupportedError) {
|
||||
$(errorMsg).text("The File APIs are not fully supported in this browser.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (invalidFormatMDMCert) {
|
||||
$(errorMsg).text("MDM certificate needs to be in pfx format.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (base64MDMCert == '') {
|
||||
$(errorMsg).text("MDM certificate is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (invalidFormatAPNSCert) {
|
||||
$(errorMsg).text("APNS certificate needs to be in pfx format.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (base64APNSCert == '') {
|
||||
$(errorMsg).text("APNS certificate is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else if (!configOrgDisplayName) {
|
||||
$(errorMsg).text("Organization display name is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
} else {
|
||||
var addConfigFormData = {};
|
||||
var configList = new Array();
|
||||
|
||||
var configCountry = {
|
||||
"name": configParams["CONFIG_COUNTRY"],
|
||||
"value": configCountry,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var configState = {
|
||||
"name": configParams["CONFIG_STATE"],
|
||||
"value": configState,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var configLocality = {
|
||||
"name": configParams["CONFIG_LOCALITY"],
|
||||
"value": configLocality,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var configOrganization = {
|
||||
"name": configParams["CONFIG_ORGANIZATION"],
|
||||
"value": configOrganization,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var configOrganizationUnit = {
|
||||
"name": configParams["CONFIG_ORGANIZATION_UNIT"],
|
||||
"value": configOrganizationUnit,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var MDMCertPassword = {
|
||||
"name": configParams["MDM_CERT_PASSWORD"],
|
||||
"value": MDMCertPassword,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var MDMCertTopicID = {
|
||||
"name": configParams["MDM_CERT_TOPIC_ID"],
|
||||
"value": MDMCertTopicID,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var APNSCertPassword = {
|
||||
"name": configParams["APNS_CERT_PASSWORD"],
|
||||
"value": APNSCertPassword,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var paramBase64MDMCert = {
|
||||
"name": configParams["MDM_CERT"],
|
||||
"value": base64MDMCert,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var MDMCertName = {
|
||||
"name": configParams["MDM_CERT_NAME"],
|
||||
"value": fileNameMDMCert,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var paramBase64APNSCert = {
|
||||
"name": configParams["APNS_CERT"],
|
||||
"value": base64APNSCert,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var APNSCertName = {
|
||||
"name": configParams["APNS_CERT_NAME"],
|
||||
"value": fileNameAPNSCert,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var paramOrganizationDisplayName = {
|
||||
"name": configParams["ORG_DISPLAY_NAME"],
|
||||
"value": configOrgDisplayName,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var iosEula = {
|
||||
"name": configParams["IOS_EULA"],
|
||||
"value": iosLicense,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
configList.push(configCountry);
|
||||
configList.push(configState);
|
||||
configList.push(configLocality);
|
||||
configList.push(configOrganization);
|
||||
configList.push(configOrganizationUnit);
|
||||
configList.push(MDMCertPassword);
|
||||
configList.push(MDMCertTopicID);
|
||||
configList.push(APNSCertPassword);
|
||||
configList.push(paramBase64MDMCert);
|
||||
configList.push(MDMCertName);
|
||||
configList.push(paramBase64APNSCert);
|
||||
configList.push(APNSCertName);
|
||||
configList.push(paramOrganizationDisplayName);
|
||||
configList.push(iosEula);
|
||||
|
||||
addConfigFormData.type = platformTypeConstants["IOS"];
|
||||
addConfigFormData.configuration = configList;
|
||||
|
||||
var addConfigAPI = "/ios/configuration";
|
||||
|
||||
invokerUtil.post(
|
||||
addConfigAPI,
|
||||
addConfigFormData,
|
||||
function (data) {
|
||||
data = JSON.parse(data);
|
||||
if (data.responseCode == responseCodes["CREATED"]) {
|
||||
$("#config-save-form").addClass("hidden");
|
||||
$("#record-created-msg").removeClass("hidden");
|
||||
} else if (data == 500) {
|
||||
$(errorMsg).text("Exception occurred at backend.");
|
||||
} else if (data == 400) {
|
||||
$(errorMsg).text("Configurations cannot be empty.");
|
||||
} else {
|
||||
$(errorMsg).text("An unexpected error occurred.");
|
||||
}
|
||||
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
}, function (data) {
|
||||
data = data.status;
|
||||
if (data == 500) {
|
||||
$(errorMsg).text("Exception occurred at backend.");
|
||||
} else if (data == 403) {
|
||||
$(errorMsg).text("Action was not permitted.");
|
||||
} else {
|
||||
$(errorMsg).text("An unexpected error occurred.");
|
||||
}
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
var errorMsgWrapperWindows = "#windows-config-error-msg";
|
||||
var errorMsgWindows = "#windows-config-error-msg span";
|
||||
var fileTypesWindows = ['jks'];
|
||||
var notSupportedError = false;
|
||||
|
||||
var base64WindowsMDMCert = "";
|
||||
var fileInputWindowsMDMCert = $('#windows-config-mdm-certificate');
|
||||
var fileNameWindowsMDMCert = "";
|
||||
var invalidFormatWindowsMDMCert = false;
|
||||
|
||||
$(fileInputWindowsMDMCert).change(function () {
|
||||
|
||||
if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
|
||||
$(errorMsgWindows).text("The File APIs are not fully supported in this browser.");
|
||||
$(errorMsgWrapperWindows).removeClass("hidden");
|
||||
notSupportedError = true;
|
||||
return;
|
||||
}
|
||||
|
||||
var file = fileInputWindowsMDMCert[0].files[0];
|
||||
fileNameWindowsMDMCert = file.name;
|
||||
var extension = file.name.split('.').pop().toLowerCase(),
|
||||
isSuccess = fileTypesWindows.indexOf(extension) > -1;
|
||||
|
||||
if (isSuccess) {
|
||||
var fileReader = new FileReader();
|
||||
fileReader.onload = function (event) {
|
||||
base64WindowsMDMCert = event.target.result;
|
||||
};
|
||||
fileReader.readAsDataURL(file);
|
||||
invalidFormatWindowsMDMCert = false;
|
||||
} else {
|
||||
base64MDMCert = "";
|
||||
invalidFormatWindowsMDMCert = true;
|
||||
}
|
||||
});
|
||||
|
||||
$("button#save-windows-btn").click(function () {
|
||||
|
||||
var notifierFrequency = $("#windows-config-notifier-frequency").val();
|
||||
var windowsLicense = tinymce.get('windows-eula').getContent();
|
||||
|
||||
if (!notifierFrequency) {
|
||||
$(errorMsgWindows).text("Polling Interval is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapperWindows).removeClass("hidden");
|
||||
} else if (!windowsLicense) {
|
||||
$(errorMsgWindows).text("License is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapperWindows).removeClass("hidden");
|
||||
} else if (!$.isNumeric(notifierFrequency)) {
|
||||
$(errorMsgWindows).text("Provided Notifier frequency is invalid. It must be a number.");
|
||||
$(errorMsgWrapperWindows).removeClass("hidden");
|
||||
} else {
|
||||
var addConfigFormData = {};
|
||||
var configList = new Array();
|
||||
|
||||
var paramNotifierFrequency = {
|
||||
"name": configParams["NOTIFIER_FREQUENCY"],
|
||||
"value": String(notifierFrequency * 1000),
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var windowsEula = {
|
||||
"name": configParams["WINDOWS_EULA"],
|
||||
"value": windowsLicense,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
configList.push(paramNotifierFrequency);
|
||||
configList.push(windowsEula);
|
||||
|
||||
addConfigFormData.type = platformTypeConstants["WINDOWS"];
|
||||
addConfigFormData.configuration = configList;
|
||||
|
||||
var addConfigAPI = "/mdm-windows-agent/services/configuration";
|
||||
|
||||
invokerUtil.post(
|
||||
addConfigAPI,
|
||||
addConfigFormData,
|
||||
function (data) {
|
||||
data = JSON.parse(data);
|
||||
if (data.responseCode == responseCodes["CREATED"]) {
|
||||
$("#config-save-form").addClass("hidden");
|
||||
$("#record-created-msg").removeClass("hidden");
|
||||
} else if (data == 500) {
|
||||
$(errorMsg).text("Exception occurred at backend.");
|
||||
} else if (data == 400) {
|
||||
$(errorMsg).text("Configurations cannot be empty.");
|
||||
} else {
|
||||
$(errorMsg).text("An unexpected error occurred.");
|
||||
}
|
||||
|
||||
$(errorMsgWrapperWindows).removeClass("hidden");
|
||||
}, function (data) {
|
||||
data = data.status;
|
||||
if (data == 500) {
|
||||
$(errorMsg).text("Exception occurred at backend.");
|
||||
} else if (data == 403) {
|
||||
$(errorMsg).text("Action was not permitted.");
|
||||
} else {
|
||||
$(errorMsg).text("An unexpected error occurred.");
|
||||
}
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
// Start of HTML embedded invoke methods
|
||||
var showAdvanceOperation = function (operation, button) {
|
||||
$(button).addClass('selected');
|
||||
$(button).siblings().removeClass('selected');
|
||||
var enabledPlatforms = $("#supportedPlatforms");
|
||||
var isPluginEnabled = false;
|
||||
switch (operation) {
|
||||
case 'ios':
|
||||
if (enabledPlatforms.data("ios")) {
|
||||
isPluginEnabled = true;
|
||||
}
|
||||
break;
|
||||
case 'windows':
|
||||
if (enabledPlatforms.data("windows")) {
|
||||
isPluginEnabled = true;
|
||||
}
|
||||
break;
|
||||
case 'android':
|
||||
if (enabledPlatforms.data("android")) {
|
||||
isPluginEnabled = true;
|
||||
}
|
||||
break;
|
||||
case 'general':
|
||||
isPluginEnabled = true;
|
||||
break;
|
||||
}
|
||||
if (isPluginEnabled) {
|
||||
var hiddenOperation = ".wr-hidden-operations-content > div";
|
||||
$(hiddenOperation + '[data-operation="' + operation + '"]').show();
|
||||
$(hiddenOperation + '[data-operation="' + operation + '"]').siblings().hide();
|
||||
} else {
|
||||
var hiddenOperation = ".wr-hidden-operations-content > div";
|
||||
$(hiddenOperation + '[data-operation="error"]').show();
|
||||
$(hiddenOperation + '[data-operation="error"]').siblings().hide();
|
||||
promptErrorPolicyPlatform("To use " + operation + " related functionalities you need to configure the server " +
|
||||
"accordingly.Please refer to the user guiled.");
|
||||
}
|
||||
};
|
@ -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.
|
||||
}}
|
||||
<!-- windows -->
|
||||
<div class="panel panel-default">
|
||||
<div id="windows-config-body" class="panel-collapse panel-body" role="tabpanel">
|
||||
<div id="windows-config-error-msg" class="alert alert-danger hidden" role="alert">
|
||||
<i class="icon fw fw-error"></i><span></span>
|
||||
</div>
|
||||
<h4>
|
||||
Device Polling Configuration
|
||||
<hr>
|
||||
</h4>
|
||||
<div id="local-inputs">
|
||||
<div class="wr-input-control">
|
||||
<label class="wr-input-label" for="windows-config-notifier-frequency">
|
||||
Polling Interval*
|
||||
<span class="helper" title="Time interval after which windows agent will contact EMM server each time to fetch data">
|
||||
<span class="wr-help-tip glyphicon glyphicon-question-sign"></span>
|
||||
</span>
|
||||
<br>
|
||||
( Should be in seconds )
|
||||
</label>
|
||||
<input id="windows-config-notifier-frequency" type="text" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<h4>
|
||||
End User License Agreement ( EULA )
|
||||
<hr>
|
||||
</h4>
|
||||
<div class="wr-input-control">
|
||||
<textarea id="windows-eula" type="text" class="form-control"></textarea>
|
||||
</div>
|
||||
<div class="wr-input-control wr-btn-grp">
|
||||
<button id="save-windows-btn" class="wr-btn">Save</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /windows -->
|
||||
{{#zone "bottomJs"}}
|
||||
{{js "js/platform-configuration.js"}}
|
||||
{{/zone}}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"version" : "1.0.0"
|
||||
}
|
@ -0,0 +1,226 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
// Constants to define platform types available
|
||||
var platformTypeConstants = {
|
||||
"ANDROID": "android",
|
||||
"IOS": "ios",
|
||||
"WINDOWS": "windows"
|
||||
};
|
||||
|
||||
var responseCodes = {
|
||||
"CREATED": "Created",
|
||||
"SUCCESS": "201",
|
||||
"INTERNAL_SERVER_ERROR": "Internal Server Error"
|
||||
};
|
||||
|
||||
var configParams = {
|
||||
"NOTIFIER_TYPE": "notifierType",
|
||||
"NOTIFIER_FREQUENCY": "notifierFrequency",
|
||||
"GCM_API_KEY": "gcmAPIKey",
|
||||
"GCM_SENDER_ID": "gcmSenderId",
|
||||
"ANDROID_EULA": "androidEula",
|
||||
"IOS_EULA": "iosEula",
|
||||
"CONFIG_COUNTRY": "configCountry",
|
||||
"CONFIG_STATE": "configState",
|
||||
"CONFIG_LOCALITY": "configLocality",
|
||||
"CONFIG_ORGANIZATION": "configOrganization",
|
||||
"CONFIG_ORGANIZATION_UNIT": "configOrganizationUnit",
|
||||
"MDM_CERT_PASSWORD": "MDMCertPassword",
|
||||
"MDM_CERT_TOPIC_ID": "MDMCertTopicID",
|
||||
"APNS_CERT_PASSWORD": "APNSCertPassword",
|
||||
"MDM_CERT": "MDMCert",
|
||||
"MDM_CERT_NAME": "MDMCertName",
|
||||
"APNS_CERT": "APNSCert",
|
||||
"APNS_CERT_NAME": "APNSCertName",
|
||||
"ORG_DISPLAY_NAME": "organizationDisplayName",
|
||||
"GENERAL_EMAIL_HOST": "emailHost",
|
||||
"GENERAL_EMAIL_PORT": "emailPort",
|
||||
"GENERAL_EMAIL_USERNAME": "emailUsername",
|
||||
"GENERAL_EMAIL_PASSWORD": "emailPassword",
|
||||
"GENERAL_EMAIL_SENDER_ADDRESS": "emailSender",
|
||||
"GENERAL_EMAIL_TEMPLATE": "emailTemplate",
|
||||
"COMMON_NAME": "commonName",
|
||||
"KEYSTORE_PASSWORD": "keystorePassword",
|
||||
"PRIVATE_KEY_PASSWORD": "privateKeyPassword",
|
||||
"BEFORE_EXPIRE": "beforeExpire",
|
||||
"AFTER_EXPIRE": "afterExpire",
|
||||
"WINDOWS_EULA": "windowsLicense",
|
||||
"IOS_CONFIG_MDM_MODE": "iOSConfigMDMMode",
|
||||
"IOS_CONFIG_APNS_MODE": "iOSConfigAPNSMode"
|
||||
};
|
||||
|
||||
function promptErrorPolicyPlatform(errorMsg) {
|
||||
var mainErrorMsgWrapper = "#platform-config-main-error-msg";
|
||||
var mainErrorMsg = mainErrorMsgWrapper + " span";
|
||||
$(mainErrorMsg).text(errorMsg);
|
||||
$(mainErrorMsgWrapper).show();
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
|
||||
var platformsSupported = $("#typeDiv").attr("typeData");
|
||||
$("#gcm-inputs").hide();
|
||||
tinymce.init({
|
||||
selector: "textarea",
|
||||
height:500,
|
||||
theme: "modern",
|
||||
plugins: [
|
||||
"autoresize",
|
||||
"advlist autolink lists link image charmap print preview anchor",
|
||||
"searchreplace visualblocks code fullscreen",
|
||||
"insertdatetime image table contextmenu paste"
|
||||
],
|
||||
toolbar: "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image"
|
||||
});
|
||||
|
||||
var windowsConfigAPI = "/api/device-mgt/windows/v1.0/configuration";
|
||||
|
||||
invokerUtil.get(
|
||||
windowsConfigAPI,
|
||||
function (data, textStatus, jqXHR) {
|
||||
console.log(jqXHR);
|
||||
console.log(data);
|
||||
data = JSON.parse(data);
|
||||
if (data != null && data.configuration != null) {
|
||||
for (var i = 0; i < data.configuration.length; i++) {
|
||||
var config = data.configuration[i];
|
||||
if (config.name == configParams["NOTIFIER_FREQUENCY"]) {
|
||||
$("input#windows-config-notifier-frequency").val(config.value / 1000);
|
||||
} else if (config.name == configParams["WINDOWS_EULA"]) {
|
||||
$("#windows-eula").val(config.value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, function (data) {
|
||||
console.log(data);
|
||||
}
|
||||
);
|
||||
|
||||
$("select.select2[multiple=multiple]").select2({
|
||||
tags: true
|
||||
});
|
||||
|
||||
var errorMsgWrapperWindows = "#windows-config-error-msg";
|
||||
var errorMsgWindows = "#windows-config-error-msg span";
|
||||
var fileTypesWindows = ['jks'];
|
||||
var notSupportedError = false;
|
||||
|
||||
var base64WindowsMDMCert = "";
|
||||
var fileInputWindowsMDMCert = $('#windows-config-mdm-certificate');
|
||||
var fileNameWindowsMDMCert = "";
|
||||
var invalidFormatWindowsMDMCert = false;
|
||||
|
||||
$(fileInputWindowsMDMCert).change(function () {
|
||||
|
||||
if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
|
||||
$(errorMsgWindows).text("The File APIs are not fully supported in this browser.");
|
||||
$(errorMsgWrapperWindows).removeClass("hidden");
|
||||
notSupportedError = true;
|
||||
return;
|
||||
}
|
||||
|
||||
var file = fileInputWindowsMDMCert[0].files[0];
|
||||
fileNameWindowsMDMCert = file.name;
|
||||
var extension = file.name.split('.').pop().toLowerCase(),
|
||||
isSuccess = fileTypesWindows.indexOf(extension) > -1;
|
||||
|
||||
if (isSuccess) {
|
||||
var fileReader = new FileReader();
|
||||
fileReader.onload = function (event) {
|
||||
base64WindowsMDMCert = event.target.result;
|
||||
};
|
||||
fileReader.readAsDataURL(file);
|
||||
invalidFormatWindowsMDMCert = false;
|
||||
} else {
|
||||
base64MDMCert = "";
|
||||
invalidFormatWindowsMDMCert = true;
|
||||
}
|
||||
});
|
||||
|
||||
$("button#save-windows-btn").click(function () {
|
||||
|
||||
var notifierFrequency = $("#windows-config-notifier-frequency").val();
|
||||
var windowsLicense = tinymce.get('windows-eula').getContent();
|
||||
|
||||
if (!notifierFrequency) {
|
||||
$(errorMsgWindows).text("Polling Interval is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapperWindows).removeClass("hidden");
|
||||
} else if (!windowsLicense) {
|
||||
$(errorMsgWindows).text("License is a required field. It cannot be empty.");
|
||||
$(errorMsgWrapperWindows).removeClass("hidden");
|
||||
} else if (!$.isNumeric(notifierFrequency)) {
|
||||
$(errorMsgWindows).text("Provided Notifier frequency is invalid. It must be a number.");
|
||||
$(errorMsgWrapperWindows).removeClass("hidden");
|
||||
} else {
|
||||
var addConfigFormData = {};
|
||||
var configList = new Array();
|
||||
|
||||
var paramNotifierFrequency = {
|
||||
"name": configParams["NOTIFIER_FREQUENCY"],
|
||||
"value": String(notifierFrequency * 1000),
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
var windowsEula = {
|
||||
"name": configParams["WINDOWS_EULA"],
|
||||
"value": windowsLicense,
|
||||
"contentType": "text"
|
||||
};
|
||||
|
||||
configList.push(paramNotifierFrequency);
|
||||
configList.push(windowsEula);
|
||||
|
||||
addConfigFormData.type = platformTypeConstants["WINDOWS"];
|
||||
addConfigFormData.configuration = configList;
|
||||
|
||||
var addConfigAPI = windowsConfigAPI;
|
||||
|
||||
invokerUtil.put(
|
||||
addConfigAPI,
|
||||
addConfigFormData,
|
||||
function (data, textStatus, jqXHR) {
|
||||
data = jqXHR.status;
|
||||
if (data == 201) {
|
||||
$("#config-save-form").addClass("hidden");
|
||||
$("#record-created-msg").removeClass("hidden");
|
||||
} else if (data == 500) {
|
||||
$(errorMsg).text("Exception occurred at backend.");
|
||||
} else if (data == 400) {
|
||||
$(errorMsg).text("Configurations cannot be empty.");
|
||||
} else {
|
||||
$(errorMsg).text("An unexpected error occurred.");
|
||||
}
|
||||
|
||||
$(errorMsgWrapperWindows).removeClass("hidden");
|
||||
}, function (data) {
|
||||
data = data.status;
|
||||
if (data == 500) {
|
||||
$(errorMsg).text("Exception occurred at backend.");
|
||||
} else if (data == 403) {
|
||||
$(errorMsg).text("Action was not permitted.");
|
||||
} else {
|
||||
$(errorMsg).text("An unexpected error occurred.");
|
||||
}
|
||||
$(errorMsgWrapper).removeClass("hidden");
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
});
|
||||
});
|
Loading…
Reference in new issue