Merge branch 'release-3.0.x' of https://github.com/wso2/carbon-device-mgt-plugins into release-3.0.x

revert-dabc3590
Imesh Chandrasiri 8 years ago
commit d918e32d59

@ -54,6 +54,7 @@ public class RegisterActivity extends Activity {
private EditText mHostView;
private View mProgressView;
private View mLoginFormView;
private Button deviceRegisterButton;
private Handler mUiHandler = new Handler();
@Override
@ -73,7 +74,7 @@ public class RegisterActivity extends Activity {
AvailableSensorsInDevice availableSensorsInDevice = new AvailableSensorsInDevice(getApplicationContext());
availableSensorsInDevice.setContent();
Button deviceRegisterButton = (Button) findViewById(R.id.device_register_button);
deviceRegisterButton = (Button) findViewById(R.id.device_register_button);
deviceRegisterButton.setOnClickListener(new OnClickListener() {
@ -204,6 +205,7 @@ public class RegisterActivity extends Activity {
// and hide the relevant UI components.
mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE);
deviceRegisterButton.setVisibility(show? View.VISIBLE : View.GONE);
}
}

@ -52,11 +52,8 @@ import java.util.List;
* This is an android service which publishes the data to the server.
*/
public class DataPublisherService extends Service {
private static final String TAG = DataPublisherService.class.getName();
private static String KEY_TAG = "key";
private static String TIME_TAG = "time";
private static String VALUE_TAG = "value";
public static Context context;
private final String TAG = DataPublisherService.class.getName();
private Context context;
@Nullable
@Override
@ -68,9 +65,9 @@ public class DataPublisherService extends Service {
public int onStartCommand(Intent intent, int flags, int startId) {
context = this;
Log.d(TAG, "service started");
Runnable runnable = new Runnable() {
@Override
public void run() {
// Runnable runnable = new Runnable() {
// @Override
// public void run() {
try {
List<Event> events = new ArrayList<>();
//retrieve sensor data.
@ -315,10 +312,10 @@ public class DataPublisherService extends Service {
} catch (TransportHandlerException e) {
Log.e(TAG, "Data Publish Failed", e);
}
}
};
Thread dataUploaderThread = new Thread(runnable);
dataUploaderThread.start();
// }
// };
// Thread dataUploaderThread = new Thread(runnable);
// dataUploaderThread.start();
return Service.START_NOT_STICKY;
}
}

@ -183,8 +183,8 @@ public class LocationDataReader extends DataReader implements LocationListener {
double distance =CalculationByDistance(latitude, longitude, lat_old, lon_old)/1000;
speed = (float)distance/(float)time;
Toast.makeText(mContext, longitude+"\n"+latitude+"\nDistance is: "
+distance+"\nSpeed is: "+speed , Toast.LENGTH_SHORT).show();
// Toast.makeText(mContext, longitude+"\n"+latitude+"\nDistance is: "
// +distance+"\nSpeed is: "+speed , Toast.LENGTH_SHORT).show();
Intent intent = new Intent("speedUpdate");

@ -73,7 +73,7 @@ public class ActivitySelectSensor extends AppCompatActivity
private ListView listView;
private SensorManager sensorManager;
private ArrayList<Sensor> sensors = new ArrayList<>();
private EditText sessionIdText;
// private EditText sessionIdText;
private RealTimeSensorReader sensorReader = null;
private RealTimeSensorChangeReceiver realTimeSensorChangeReceiver = new RealTimeSensorChangeReceiver();
private SupportedSensors supportedSensors = SupportedSensors.getInstance();
@ -87,21 +87,21 @@ public class ActivitySelectSensor extends AppCompatActivity
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sessionIdText = (EditText) findViewById(R.id.sessionId);
sessionIdText.setCursorVisible(false);
//sessionIdText = (EditText) findViewById(R.id.sessionId);
// sessionIdText.setCursorVisible(false);
listView = (ListView) findViewById(R.id.senseListContainer);
verifyBluetooth();
//verifyBluetooth();
registerReceiver(realTimeSensorChangeReceiver, new IntentFilter("sensorDataMap"));
sessionIdText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sessionIdText.setCursorVisible(true);
}
});
// sessionIdText.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// sessionIdText.setCursorVisible(true);
//
// }
// });
//Publish data
FloatingActionButton fbtnPublishData = (FloatingActionButton) findViewById(R.id.publish);
@ -126,33 +126,33 @@ public class ActivitySelectSensor extends AppCompatActivity
}
});
FloatingActionButton fbtnSpeechRecongnizer = (FloatingActionButton) findViewById(R.id.speech);
fbtnSpeechRecongnizer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String sessionId = sessionIdText.getText().toString();
if (!sessionId.isEmpty()) {
Intent intent = new Intent(getApplicationContext(), WordRecognitionActivity.class);
intent.putExtra("sessionId", sessionId);
startActivity(intent);
} else {
Toast.makeText(ActivitySelectSensor.this, "Please type a session id value", Toast.LENGTH_SHORT)
.show();
}
}
});
FloatingActionButton fbtnBeaconMonitor = (FloatingActionButton) findViewById(R.id.beacon);
fbtnBeaconMonitor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplicationContext(), BeaconMonitoringActivity.class);
startActivity(intent);
}
});
//FloatingActionButton fbtnSpeechRecongnizer = (FloatingActionButton) findViewById(R.id.speech);
// fbtnSpeechRecongnizer.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// String sessionId = sessionIdText.getText().toString();
// if (!sessionId.isEmpty()) {
// Intent intent = new Intent(getApplicationContext(), WordRecognitionActivity.class);
// intent.putExtra("sessionId", sessionId);
// startActivity(intent);
// } else {
// Toast.makeText(ActivitySelectSensor.this, "Please type a session id value", Toast.LENGTH_SHORT)
// .show();
// }
//
// }
// });
// FloatingActionButton fbtnBeaconMonitor = (FloatingActionButton) findViewById(R.id.beacon);
// fbtnBeaconMonitor.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// Intent intent = new Intent(getApplicationContext(), BeaconMonitoringActivity.class);
// startActivity(intent);
//
//
// }
// });
sharedPreferences = getSharedPreferences(SupportedSensors.SELECTED_SENSORS, 0);
@ -313,43 +313,43 @@ public class ActivitySelectSensor extends AppCompatActivity
unregisterReceiver(realTimeSensorChangeReceiver);
}
private void verifyBluetooth() {
try {
if (!BeaconManager.getInstanceForApplication(this).checkAvailability()) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Bluetooth not enabled");
builder.setMessage("Please enable bluetooth in settings and restart this application.");
builder.setPositiveButton(android.R.string.ok, null);
builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
finish();
System.exit(0);
}
});
builder.show();
}
} catch (RuntimeException e) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Bluetooth LE not available");
builder.setMessage("Sorry, this device does not support Bluetooth LE.");
builder.setPositiveButton(android.R.string.ok, null);
builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
finish();
System.exit(0);
}
});
builder.show();
}
}
// private void verifyBluetooth() {
//
// try {
// if (!BeaconManager.getInstanceForApplication(this).checkAvailability()) {
// final AlertDialog.Builder builder = new AlertDialog.Builder(this);
// builder.setTitle("Bluetooth not enabled");
// builder.setMessage("Please enable bluetooth in settings and restart this application.");
// builder.setPositiveButton(android.R.string.ok, null);
// builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
//
// @Override
// public void onDismiss(DialogInterface dialog) {
// finish();
// System.exit(0);
// }
//
// });
// builder.show();
//
// }
// } catch (RuntimeException e) {
// final AlertDialog.Builder builder = new AlertDialog.Builder(this);
// builder.setTitle("Bluetooth LE not available");
// builder.setMessage("Sorry, this device does not support Bluetooth LE.");
// builder.setPositiveButton(android.R.string.ok, null);
// builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
//
// @Override
// public void onDismiss(DialogInterface dialog) {
// finish();
// System.exit(0);
// }
//
// });
// builder.show();
//
// }
//
// }
}

@ -57,6 +57,7 @@ public class SenseClientAsyncExecutor extends AsyncTask<String, Void, Map<String
private final static String TAG = "SenseService Client";
private static final String STATUS = "status";
private final String PASSWORD_GRANT_TYPE = "password";
private final String SCOPE = "perm:android-sense:enroll";
private final static String DEVICE_NAME = Build.MANUFACTURER + " " + Build.MODEL;
private Context context;
@ -117,7 +118,7 @@ public class SenseClientAsyncExecutor extends AsyncTask<String, Void, Map<String
new BasicAuthRequestInterceptor(apiApplicationKey.getConsumerKey(), apiApplicationKey.getConsumerSecret()))
.contract(new JAXRSContract()).encoder(new JacksonEncoder()).decoder(new JacksonDecoder())
.target(TokenIssuerService.class, endpoint);
accessTokenInfo = tokenIssuerService.getToken(PASSWORD_GRANT_TYPE, username, password, "device_" + deviceId);
accessTokenInfo = tokenIssuerService.getToken(PASSWORD_GRANT_TYPE, username, password, "device_" + deviceId, SCOPE);
//DeviceRegister
AndroidSenseManagerService androidSenseManagerService = Feign.builder().client(disableHostnameVerification)

@ -29,7 +29,7 @@ public interface TokenIssuerService {
@POST
@Produces(MediaType.APPLICATION_JSON)
AccessTokenInfo getToken(@QueryParam("grant_type") String grant, @QueryParam("username") String username,
@QueryParam("password") String password, @QueryParam("deviceId") String deviceId);
@QueryParam("password") String password, @QueryParam("deviceId") String deviceId, @QueryParam("scope") String scope);
@POST
@Produces(MediaType.APPLICATION_JSON)

@ -26,41 +26,65 @@
<include layout="@layout/content_activity_select_sensor"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_width="fill_parent"
android:layout_gravity="bottom|center"
android:layout_height="wrap_content" >
<android.support.design.widget.FloatingActionButton
android:id="@+id/beacon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
android:src="@drawable/beacon"/>
android:layout_height="100dp"
android:layout_margin="20dp"
android:orientation="horizontal">
<android.support.design.widget.FloatingActionButton
android:id="@+id/addSensors"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_input_add"/>
<!--<RelativeLayout-->
<!--android:layout_width="0dp"-->
<!--android:layout_height="match_parent"-->
<!--android:layout_weight="0.25"-->
<!--&gt;-->
<!--<android.support.design.widget.FloatingActionButton-->
<!--android:id="@+id/beacon"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="match_parent"-->
<!--android:layout_margin="15dp"-->
<!--android:src="@drawable/beacon"/>-->
<!--</RelativeLayout>-->
<android.support.design.widget.FloatingActionButton
android:id="@+id/speech"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
android:src="@drawable/mic"/>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
>
<android.support.design.widget.FloatingActionButton
android:id="@+id/addSensors"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="15dp"
android:layout_centerInParent="true"
android:src="@android:drawable/ic_input_add"/>
</RelativeLayout>
<!--<RelativeLayout-->
<!--android:layout_width="0dp"-->
<!--android:layout_height="match_parent"-->
<!--android:layout_weight="0.25"-->
<!--&gt;-->
<!--<android.support.design.widget.FloatingActionButton-->
<!--android:id="@+id/speech"-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="match_parent"-->
<!--android:layout_margin="15dp"-->
<!--android:src="@drawable/mic"/>-->
<!--</RelativeLayout>-->
<android.support.design.widget.FloatingActionButton
android:id="@+id/publish"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
android:adjustViewBounds="false"
android:src="@drawable/pushtoserver"/>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
>
<android.support.design.widget.FloatingActionButton
android:id="@+id/publish"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="15dp"
android:layout_centerInParent="true"
android:src="@drawable/pushtoserver"/>
</RelativeLayout>
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>

@ -11,18 +11,18 @@
tools:context="org.wso2.carbon.iot.android.sense.realtimeviewer.ActivitySelectSensor"
android:id="@+id/parentContainer">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content" android:hint="@string/sessionId"
android:id="@+id/sessionId"
android:inputType="text"
android:maxLines="1" android:singleLine="true"/>
<!--<EditText-->
<!--android:layout_width="match_parent"-->
<!--android:layout_height="wrap_content" android:hint="@string/sessionId"-->
<!--android:id="@+id/sessionId"-->
<!--android:inputType="text"-->
<!--android:maxLines="1" android:singleLine="true"/>-->
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/senseListContainer"
android:layout_below="@+id/sessionId">
>
</ListView>
</RelativeLayout>

@ -3,8 +3,8 @@
<item android:id="@+id/select" android:icon="@android:drawable/ic_menu_agenda"
android:title="Sensors" />
<item android:id="@+id/speech_recognizer" android:icon="@android:drawable/ic_menu_agenda"
android:title="Speech Recognizer" />
<!--<item android:id="@+id/speech_recognizer" android:icon="@android:drawable/ic_menu_agenda"-->
<!--android:title="Speech Recognizer" />-->
<!--<group android:checkableBehavior="single">-->
<!-- -->

@ -6,7 +6,7 @@ buildscript {
maven { url 'https://repo.eclipse.org/content/repositories/paho-releases/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'com.android.tools.build:gradle:2.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

@ -1,6 +1,6 @@
#Wed May 11 14:40:10 IST 2016
#Mon Jan 09 12:13:26 IST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

@ -48,7 +48,6 @@ import java.util.Properties;
public class AndroidSenseServiceImpl implements AndroidSenseService {
private static Log log = LogFactory.getLog(AndroidSenseServiceImpl.class);
private static String DEFAULT_MQTT_ENDPOINT = "tcp://localhost:1886";
@Path("device/{deviceId}/words")
@POST

@ -40,7 +40,7 @@ public class AndroidSenseConstants {
public static final String HOST_NAME = "HostName";
public static final String LOCALHOST = "localhost";
public static final String CONFIG_TYPE = "general";
public static final String DEFAULT_ENDPOINT = "tcp://localhost:1886";
public static final String DEFAULT_ENDPOINT = "tcp://${mqtt.broker.host}:${mqtt.broker.port}";
public static final String SCOPE = "scope";

@ -13,6 +13,7 @@ import org.wso2.carbon.apimgt.application.extension.APIManagementProviderService
import org.wso2.carbon.base.ServerConfiguration;
import org.wso2.carbon.context.CarbonContext;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.core.util.Utils;
import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationService;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException;
@ -205,7 +206,7 @@ public class APIUtil {
}
public static String getMqttEndpoint() throws ConfigurationManagementException {
String iotServerIP = AndroidSenseConstants.DEFAULT_ENDPOINT;
String iotServerIP = Utils.replaceSystemProperty(AndroidSenseConstants.DEFAULT_ENDPOINT);
iotServerIP = iotServerIP.replace(AndroidSenseConstants.LOCALHOST, getServerUrl());;
PlatformConfiguration configuration = APIUtil.getTenantConfigurationManagementService().getConfiguration(
AndroidSenseConstants.CONFIG_TYPE);
@ -224,15 +225,11 @@ public class APIUtil {
}
public static String getServerUrl() {
String hostName = ServerConfiguration.getInstance().getFirstProperty(AndroidSenseConstants.HOST_NAME);
try {
if (hostName == null) {
hostName = NetworkUtils.getLocalHostname();
}
return org.apache.axis2.util.Utils.getIpAddress();
} catch (SocketException e) {
hostName = "localhost";
log.warn("Failed retrieving the hostname, therefore set to localhost", e);
return "localhost";
}
return hostName;
}
}

@ -16,10 +16,6 @@
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>isAdminService</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>doAuthentication</param-name>
<param-value>true</param-value>

@ -42,7 +42,7 @@
<a href="{{hostName}}{{@unit.publicUri}}/asset/androidsense.apk" class="btn-operations"><i class="fw fw-download fw-inverse fw-lg add-margin-1x"></i> Download APK</a>
<a href="javascript:toggleEmailInvite()" class="btn-operations"><i class="fw fw-mail fw-inverse fw-lg add-margin-1x"></i> Invite by Email</a>
<p class="doc-link">Click <a href="https://docs.wso2.com/display/IoTS100/Android+Sense"
<p class="doc-link">Click <a href="https://docs.wso2.com/display/IoTS300/Android+Sense"
target="_blank">[ here ]</a> for latest instructions and
troubleshooting.</p>

@ -24,6 +24,7 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.base.MultitenantConstants;
import org.wso2.carbon.base.ServerConfiguration;
import org.wso2.carbon.core.util.Utils;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException;
@ -59,7 +60,9 @@ public class ZipUtil {
private static final String HTTP_PORT_PROPERTY = "httpPort";
private static final String CONFIG_TYPE = "general";
private static final Log log = LogFactory.getLog(ZipUtil.class);
public static final String HOST_NAME = "HostName";
private static final String LOCALHOST = "localhost";
private static final String HTTP_PROTOCOL_HOST = "${iot.gateway.host}";
private static final String HTTP_PROTOCOL_PORT = "${iot.gateway.http.port}";
public ZipArchive createZipFile(String owner, String tenantDomain, String deviceType,
String deviceId, String deviceName, String token,
@ -72,8 +75,10 @@ public class ZipUtil {
String iotServerIP;
try {
iotServerIP = getServerUrl();
String httpServerPort = System.getProperty(HTTP_PORT_PROPERTY);
iotServerIP = Utils.replaceSystemProperty(HTTP_PROTOCOL_HOST);
String serverIpAddress = getServerUrl();
iotServerIP = iotServerIP.replace(LOCALHOST, serverIpAddress);
String httpServerPort = Utils.replaceSystemProperty(HTTP_PROTOCOL_PORT);
Map<String, String> contextParams = new HashMap<>();
@ -117,17 +122,13 @@ public class ZipUtil {
}
}
private static String getServerUrl() {
String hostName = ServerConfiguration.getInstance().getFirstProperty(HOST_NAME);
public static String getServerUrl() {
try {
if (hostName == null) {
hostName = NetworkUtils.getLocalHostname();
}
return org.apache.axis2.util.Utils.getIpAddress();
} catch (SocketException e) {
hostName = "localhost";
log.warn("Failed retrieving the hostname, therefore set to localhost", e);
return "localhost";
}
return hostName;
}
private static ZipArchive getSketchArchive(String archivesPath, String templateSketchPath, Map contextParams

@ -16,10 +16,6 @@
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>isAdminService</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>doAuthentication</param-name>
<param-value>true</param-value>

@ -2,6 +2,10 @@
"deviceType": {
"label": "Arduino",
"category": "iot",
"downloadAgentUri": "arduino/device/download"
"downloadAgentUri": "arduino/device/download",
"category": "iot",
"scopes" : [
"perm:arduino:enroll"
]
}
}

@ -66,7 +66,7 @@
<a href="#" class="download-link btn-operations">
<i class="fw fw-download add-margin-1x"></i>Download Sketch
</a>
<p class="doc-link">Click <a href="https://docs.wso2.com/display/IoTS100/Arduino"
<p class="doc-link">Click <a href="https://docs.wso2.com/display/IoTS300/Arduino"
target="_blank">here</a> for latest instructions and
troubleshooting.</p>
<div id="download-device-modal-content" class="hide">

@ -23,6 +23,7 @@ import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.base.ServerConfiguration;
import org.wso2.carbon.core.util.Utils;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException;
@ -56,15 +57,12 @@ import java.util.zip.ZipOutputStream;
public class ZipUtil {
private static final Log log = LogFactory.getLog(ZipUtil.class);
public static final String HOST_NAME = "HostName";
private static final String HTTPS_PORT_PROPERTY = "httpsPort";
private static final String HTTP_PORT_PROPERTY = "httpPort";
private static final String LOCALHOST = "localhost";
private static final String HTTPS_PROTOCOL_APPENDER = "https://";
private static final String HTTP_PROTOCOL_APPENDER = "http://";
private static final String HTTPS_PROTOCOL_URL = "https://${iot.gateway.host}:${iot.gateway.https.port}";
private static final String HTTP_PROTOCOL_URL = "http://${iot.gateway.host}:${iot.gateway.http.port}";
private static final String CONFIG_TYPE = "general";
private static final String DEFAULT_MQTT_ENDPOINT = "tcp://localhost:1886";
private static final String DEFAULT_MQTT_ENDPOINT = "tcp://${mqtt.broker.host}:${mqtt.broker.port}";
public ZipArchive createZipFile(String owner, String tenantDomain, String deviceType,
String deviceId, String deviceName, String token,
@ -78,16 +76,14 @@ public class ZipUtil {
try {
iotServerIP = getServerUrl();
String httpsServerPort = System.getProperty(HTTPS_PORT_PROPERTY);
String httpServerPort = System.getProperty(HTTP_PORT_PROPERTY);
String httpsServerEP = HTTPS_PROTOCOL_APPENDER + iotServerIP + ":" + httpsServerPort;
String httpServerEP = HTTP_PROTOCOL_APPENDER + iotServerIP + ":" + httpServerPort;
String apimEndpoint = httpsServerEP;
String mqttEndpoint = DEFAULT_MQTT_ENDPOINT;
String httpsServerEP = Utils.replaceSystemProperty(HTTPS_PROTOCOL_URL);
String httpServerEP = Utils.replaceSystemProperty(HTTP_PROTOCOL_URL);
String mqttEndpoint = Utils.replaceSystemProperty(DEFAULT_MQTT_ENDPOINT);
if (mqttEndpoint.contains(LOCALHOST)) {
mqttEndpoint = mqttEndpoint.replace(LOCALHOST, iotServerIP);
httpsServerEP = httpsServerEP.replace(LOCALHOST, iotServerIP);
httpServerEP = httpServerEP.replace(LOCALHOST, iotServerIP);
}
PlatformConfiguration configuration = APIUtil.getTenantConfigurationManagementService().getConfiguration(
CONFIG_TYPE);
if (configuration != null && configuration.getConfiguration() != null && configuration
@ -115,7 +111,7 @@ public class ZipUtil {
contextParams.put("DEVICE_NAME", deviceName);
contextParams.put("HTTPS_EP", httpsServerEP);
contextParams.put("HTTP_EP", httpServerEP);
contextParams.put("APIM_EP", apimEndpoint);
contextParams.put("APIM_EP", httpsServerEP);
contextParams.put("MQTT_EP", mqttEndpoint);
contextParams.put("DEVICE_TOKEN", token);
contextParams.put("DEVICE_REFRESH_TOKEN", refreshToken);
@ -130,17 +126,13 @@ public class ZipUtil {
}
}
private static String getServerUrl() {
String hostName = ServerConfiguration.getInstance().getFirstProperty(HOST_NAME);
public static String getServerUrl() {
try {
if (hostName == null) {
hostName = NetworkUtils.getLocalHostname();
}
return org.apache.axis2.util.Utils.getIpAddress();
} catch (SocketException e) {
hostName = "localhost";
log.warn("Failed retrieving the hostname, therefore set to localhost", e);
return "localhost";
}
return hostName;
}
private static ZipArchive getSketchArchive(String archivesPath, String templateSketchPath, Map contextParams

@ -16,10 +16,6 @@
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>isAdminService</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>doAuthentication</param-name>
<param-value>true</param-value>

@ -2,6 +2,9 @@
"deviceType": {
"label": "Raspberry Pi",
"category": "iot",
"downloadAgentUri": "raspberrypi/device/download"
"downloadAgentUri": "raspberrypi/device/download",
"scopes" : [
"perm:raspberrypi:enroll"
]
}
}

@ -61,7 +61,7 @@
<a href="#" class="download-link btn-operations">
<i class="fw fw-download add-margin-1x"></i>Download Agent
</a>
<p class="doc-link">Click <a href="https://docs.wso2.com/display/IoTS100/Raspberry+Pi"
<p class="doc-link">Click <a href="https://docs.wso2.com/display/IoTS300/Raspberry+Pi"
target="_blank">here</a> for latest instructions and
troubleshooting.</p>
<div id="download-device-modal-content" class="hide">

@ -437,7 +437,7 @@ public class AgentUtilOperations {
}
private class APIManagerTokenUtils {
public static final String TOKEN_ENDPOINT = "/oauth2/token";
public static final String TOKEN_ENDPOINT = "/token";
public static final String GRANT_TYPE = "grant_type";
public static final String ACCESS_TOKEN = "access_token";
public static final String REFRESH_TOKEN = "refresh_token";

@ -25,14 +25,13 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.JSONObject;
import org.wso2.carbon.apimgt.application.extension.constants.ApiApplicationConstants;
import org.wso2.carbon.base.ServerConfiguration;
import org.wso2.carbon.core.util.Utils;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationEntry;
import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException;
import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
import org.wso2.carbon.device.mgt.iot.virtualfirealarm.service.impl.xmpp.XmppConfig;
import org.wso2.carbon.utils.CarbonUtils;
import org.wso2.carbon.utils.NetworkUtils;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
@ -64,10 +63,10 @@ public class ZipUtil {
private static final String HTTP_PORT_PROPERTY = "httpPort";
private static final String LOCALHOST = "localhost";
private static final String HTTPS_PROTOCOL_APPENDER = "https://";
private static final String HTTP_PROTOCOL_APPENDER = "http://";
private static final String HTTPS_PROTOCOL_URL = "https://${iot.gateway.host}:${iot.gateway.https.port}";
private static final String HTTP_PROTOCOL_URL = "http://${iot.gateway.host}:${iot.gateway.http.port}";
private static final String CONFIG_TYPE = "general";
private static final String DEFAULT_MQTT_ENDPOINT = "tcp://localhost:1886";
private static final String DEFAULT_MQTT_ENDPOINT = "tcp://${mqtt.broker.host}:${mqtt.broker.port}";
public static final String HOST_NAME = "HostName";
public ZipArchive createZipFile(String owner, String deviceType, String deviceId, String deviceName,
@ -83,13 +82,13 @@ public class ZipUtil {
try {
iotServerIP = getServerUrl();
String httpsServerPort = System.getProperty(HTTPS_PORT_PROPERTY);
String httpServerPort = System.getProperty(HTTP_PORT_PROPERTY);
String httpsServerEP = HTTPS_PROTOCOL_APPENDER + iotServerIP + ":" + httpsServerPort;
String httpServerEP = HTTP_PROTOCOL_APPENDER + iotServerIP + ":" + httpServerPort;
String mqttEndpoint = DEFAULT_MQTT_ENDPOINT;
String httpsServerEP = Utils.replaceSystemProperty(HTTPS_PROTOCOL_URL);
String httpServerEP = Utils.replaceSystemProperty(HTTP_PROTOCOL_URL);
String mqttEndpoint = Utils.replaceSystemProperty(DEFAULT_MQTT_ENDPOINT);
if (mqttEndpoint.contains(LOCALHOST)) {
mqttEndpoint = mqttEndpoint.replace(LOCALHOST, iotServerIP);
httpsServerEP = httpsServerEP.replace(LOCALHOST, iotServerIP);
httpServerEP = httpServerEP.replace(LOCALHOST, iotServerIP);
}
String xmppEndpoint = "";
@ -161,16 +160,12 @@ public class ZipUtil {
}
public static String getServerUrl() {
String hostName = ServerConfiguration.getInstance().getFirstProperty(HOST_NAME);
try {
if (hostName == null) {
hostName = NetworkUtils.getLocalHostname();
}
return org.apache.axis2.util.Utils.getIpAddress();
} catch (SocketException e) {
hostName = "localhost";
log.warn("Failed retrieving the hostname, therefore set to localhost", e);
return "localhost";
}
return hostName;
}
public static ZipArchive getSketchArchive(String archivesPath, String templateSketchPath, Map contextParams

@ -16,18 +16,10 @@
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<context-param>
<param-name>isAdminService</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>doAuthentication</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>providerTenantDomain</param-name>
<param-value>carbon.super</param-value>
</context-param>
<!--publish to apim-->
<context-param>

@ -3,6 +3,9 @@
"label": "Virtual Firealarm",
"category": "virtual",
"downloadAgentUri": "virtual_firealarm/device/download",
"scopes" : [
"perm:firealarm:enroll"
],
"features": {
"buzz": {
"icon" : "fw-dial-up"

@ -54,7 +54,7 @@
</a>
<a href="#" class="download-link btn-operations">
<i class="fw fw-download"></i>Download Agent</a>
<p class="doc-link">Click <a href="https://docs.wso2.com/display/IoTS100/Virtual+Firealarm"
<p class="doc-link">Click <a href="https://docs.wso2.com/display/IoTS300/Virtual+Firealarm"
target="_blank">[ here ]</a> for latest instructions and
troubleshooting.</p>
<div id="download-device-modal-content" class="hide">

@ -31,7 +31,7 @@ dcrUrl=dcrUrl
dcrUrl.hint=dynamic client registration endpoint URL to create application (if required) eg: https://localhost:9443/dynamic-client-web/register
contentValidator=contentValidation
contentValidator.hint=Class Name of the content Validation or 'default' to set default class, required to implement (if required)
url.hint=MQTT broker url tcp://localhost:1886
url.hint=MQTT broker url tcp://localhost:1883
cleanSession=Clean Session
cleanSession.hint=Persist topic subscriptions and ack positions across client sessions
keepAlive=Keep Alive (In seconds)

@ -61,6 +61,11 @@ public class DeviceAuthorizer implements Authorizer {
@Override
public void init(Map<String, String> globalProperties) {
statPermissions = getPermissions(globalProperties);
if (statPermissions != null && !statPermissions.isEmpty()) {
for (String permission : statPermissions) {
PermissionUtil.putPermission(permission);
}
}
try {
deviceAccessAuthorizationAdminService = Feign.builder()
.requestInterceptor(new OAuthRequestInterceptor(globalProperties))

@ -0,0 +1,76 @@
/*
* 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.
*/
package org.wso2.carbon.device.mgt.output.adapter.websocket.authorization;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.base.MultitenantConstants;
import org.wso2.carbon.device.mgt.output.adapter.websocket.internal.WebsocketEventAdaptorServiceDataHolder;
import org.wso2.carbon.registry.api.Resource;
import org.wso2.carbon.registry.core.Registry;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
import java.util.StringTokenizer;
/**
* Utility class which holds necessary utility methods required for persisting permissions in
* registry.
*/
public class PermissionUtil {
public static final String PERMISSION_PROPERTY_NAME = "name";
private static Log log = LogFactory.getLog(DeviceAuthorizer.class);
public static void putPermission(String permission) {
try {
StringTokenizer tokenizer = new StringTokenizer(permission, "/");
String lastToken = "", currentToken, tempPath;
while (tokenizer.hasMoreTokens()) {
currentToken = tokenizer.nextToken();
tempPath = lastToken + "/" + currentToken;
if (!checkResourceExists(tempPath)) {
createRegistryCollection(tempPath, currentToken);
}
lastToken = tempPath;
}
} catch (org.wso2.carbon.registry.api.RegistryException e) {
log.error("Failed to creation permission in registry" + permission, e);
}
}
public static void createRegistryCollection(String path, String resourceName)
throws org.wso2.carbon.registry.api.RegistryException {
Resource resource = getGovernanceRegistry().newCollection();
resource.addProperty(PERMISSION_PROPERTY_NAME, resourceName);
getGovernanceRegistry().beginTransaction();
getGovernanceRegistry().put(path, resource);
getGovernanceRegistry().commitTransaction();
}
public static boolean checkResourceExists(String path)
throws RegistryException {
return getGovernanceRegistry().resourceExists(path);
}
public static Registry getGovernanceRegistry() throws RegistryException {
return WebsocketEventAdaptorServiceDataHolder.getRegistryService()
.getGovernanceSystemRegistry(MultitenantConstants.SUPER_TENANT_ID);
}
}

@ -45,6 +45,7 @@ public class OAuthRequestInterceptor implements RequestInterceptor {
private static final String APPLICATION_NAME = "websocket-app";
private static final String PASSWORD_GRANT_TYPE = "password";
private static final String REFRESH_GRANT_TYPE = "refresh_token";
private static final String REQUIRED_SCOPE = "perm:authorization:verify";
private ApiApplicationRegistrationService apiApplicationRegistrationService;
private TokenIssuerService tokenIssuerService;
@ -76,7 +77,6 @@ public class OAuthRequestInterceptor implements RequestInterceptor {
username = getUsername(globalProperties);
password = getPassword(globalProperties);
tokenEndpoint = getTokenEndpoint(globalProperties);
scopes = getScopes(globalProperties);
apiApplicationRegistrationService = Feign.builder().requestInterceptor(
new BasicAuthRequestInterceptor(username, password))
.contract(new JAXRSContract()).encoder(new GsonEncoder()).decoder(new GsonDecoder())
@ -104,11 +104,7 @@ public class OAuthRequestInterceptor implements RequestInterceptor {
new BasicAuthRequestInterceptor(consumerKey, consumerSecret))
.contract(new JAXRSContract()).encoder(new GsonEncoder()).decoder(new GsonDecoder())
.target(TokenIssuerService.class, tokenEndpoint);
if (scopes == null || scopes.isEmpty()) {
tokenInfo = tokenIssuerService.getToken(PASSWORD_GRANT_TYPE, username, password);
} else {
tokenInfo = tokenIssuerService.getToken(PASSWORD_GRANT_TYPE, username, password, scopes);
}
tokenInfo = tokenIssuerService.getToken(PASSWORD_GRANT_TYPE, username, password, REQUIRED_SCOPE);
tokenInfo.setExpires_in(System.currentTimeMillis() + tokenInfo.getExpires_in());
}
synchronized(this) {
@ -163,9 +159,4 @@ public class OAuthRequestInterceptor implements RequestInterceptor {
return refreshTimeOffset;
}
private String getScopes(Map<String, String> globalProperties) {
return globalProperties.get(TOKEN_SCOPES);
}
}

@ -27,6 +27,7 @@
package org.wso2.carbon.device.mgt.output.adapter.websocket.authorization.client.dto;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@ -48,7 +49,7 @@ public interface TokenIssuerService {
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
AccessTokenInfo getToken(@QueryParam("grant_type") String grant, @QueryParam("username") String username,
@QueryParam("password") String password, @QueryParam("scopes") String scopes);
@QueryParam("password") String password, @QueryParam("scope") String scopes);
@POST
@Produces(MediaType.APPLICATION_JSON)

@ -20,6 +20,7 @@ package org.wso2.carbon.device.mgt.output.adapter.websocket.internal;
import org.wso2.carbon.device.mgt.output.adapter.websocket.WebsocketOutputCallbackControllerServiceImpl;
import org.wso2.carbon.event.stream.core.EventStreamService;
import org.wso2.carbon.registry.core.service.RegistryService;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingDeque;
@ -35,6 +36,7 @@ public final class WebsocketEventAdaptorServiceDataHolder {
private static ConcurrentHashMap<Integer, ConcurrentHashMap<String, LinkedBlockingDeque<Object>>>
tenantSpecificStreamEventMap = new ConcurrentHashMap<>();
private static EventStreamService eventStreamService;
private static RegistryService registryService;
public static void registerEventStreamService(EventStreamService eventBuilderService) {
WebsocketEventAdaptorServiceDataHolder.eventStreamService = eventBuilderService;
@ -63,4 +65,15 @@ public final class WebsocketEventAdaptorServiceDataHolder {
getTenantSpecificStreamEventMap() {
return tenantSpecificStreamEventMap;
}
public static RegistryService getRegistryService() {
if (registryService == null) {
throw new IllegalStateException("Registry service is not initialized properly");
}
return registryService;
}
public static void setRegistryService(RegistryService registryService) {
WebsocketEventAdaptorServiceDataHolder.registryService = registryService;
}
}

@ -26,12 +26,19 @@ import org.wso2.carbon.device.mgt.output.adapter.websocket.WebsocketOutputCallba
import org.wso2.carbon.event.output.adapter.core.OutputEventAdapterFactory;
import org.wso2.carbon.device.mgt.output.adapter.websocket.WebsocketOutputCallbackControllerService;
import org.wso2.carbon.event.stream.core.EventStreamService;
import org.wso2.carbon.registry.core.service.RegistryService;
/**
* @scr.component component.name="output.extensions.secured.websocket.AdapterService.component" immediate="true"
* @scr.reference name="eventStreamService.service"
* interface="org.wso2.carbon.event.stream.core.EventStreamService" cardinality="1..1"
* policy="dynamic" bind="setEventStreamService" unbind="unsetEventStreamService"
* @scr.reference name="registry.service"
* interface="org.wso2.carbon.registry.core.service.RegistryService"
* cardinality="1..1"
* policy="dynamic"
* bind="setRegistryService"
* unbind="unsetRegistryService"
*/
public class WebsocketLocalEventAdapterServiceComponent {
@ -80,4 +87,28 @@ public class WebsocketLocalEventAdapterServiceComponent {
}
WebsocketEventAdaptorServiceDataHolder.registerEventStreamService(null);
}
/**
* Sets Registry Service.
*
* @param registryService An instance of RegistryService
*/
protected void setRegistryService(RegistryService registryService) {
if (log.isDebugEnabled()) {
log.debug("Setting Registry Service");
}
WebsocketEventAdaptorServiceDataHolder.setRegistryService(registryService);
}
/**
* Unsets Registry Service.
*
* @param registryService An instance of RegistryService
*/
protected void unsetRegistryService(RegistryService registryService) {
if (log.isDebugEnabled()) {
log.debug("Un setting Registry Service");
}
WebsocketEventAdaptorServiceDataHolder.setRegistryService(null);
}
}

@ -18,6 +18,8 @@ import feign.Feign;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import feign.auth.BasicAuthRequestInterceptor;
import feign.codec.EncodeException;
import feign.codec.Encoder;
import feign.gson.GsonDecoder;
import feign.gson.GsonEncoder;
import feign.jaxrs.JAXRSContract;
@ -40,6 +42,7 @@ public class OAuthRequestInterceptor implements RequestInterceptor {
private static final String APPLICATION_NAME = "mqtt_broker";
private static final String PASSWORD_GRANT_TYPE = "password";
private static final String REFRESH_GRANT_TYPE = "refresh_token";
private static final String REQUIRED_SCOPE = "perm:authorization:verify";
private ApiApplicationRegistrationService apiApplicationRegistrationService;
private TokenIssuerService tokenIssuerService;
@ -75,8 +78,9 @@ public class OAuthRequestInterceptor implements RequestInterceptor {
tokenIssuerService = Feign.builder().requestInterceptor(
new BasicAuthRequestInterceptor(consumerKey, consumerSecret))
.contract(new JAXRSContract()).encoder(new GsonEncoder()).decoder(new GsonDecoder())
.target(TokenIssuerService.class, AuthorizationConfigurationManager.getInstance().getTokenEndpoint());
tokenInfo = tokenIssuerService.getToken(PASSWORD_GRANT_TYPE, username, password);
.target(TokenIssuerService.class,
AuthorizationConfigurationManager.getInstance().getTokenEndpoint());
tokenInfo = tokenIssuerService.getToken(PASSWORD_GRANT_TYPE, username, password, REQUIRED_SCOPE);
tokenInfo.setExpires_in(System.currentTimeMillis() + tokenInfo.getExpires_in());
}
synchronized (this) {
@ -89,5 +93,4 @@ public class OAuthRequestInterceptor implements RequestInterceptor {
template.header("Authorization", headerValue);
}
}

@ -33,6 +33,12 @@ public interface TokenIssuerService {
AccessTokenInfo getToken(@QueryParam("grant_type") String grant, @QueryParam("username") String username,
@QueryParam("password") String password);
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
AccessTokenInfo getToken(@QueryParam("grant_type") String grant, @QueryParam("username") String username,
@QueryParam("password") String password, @QueryParam("scope") String scopes);
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)

@ -42,11 +42,6 @@
<session-config>
<session-timeout>60</session-timeout>
</session-config>
<context-param>
<param-name>isAdminService</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>managed-api-enabled</param-name>
<param-value>true</param-value>

@ -52,7 +52,7 @@
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Status</td>
<td style="padding:10px 15px;">
{{#equal device.status "ACTIVE"}}<span><i
class="fw fw-ok icon-success"></i>Active</span>{{/equal}}
class="fw fw-success icon-success"></i>Active</span>{{/equal}}
{{#equal device.status "INACTIVE"}}<span><i
class="fw fw-warning icon-warning"></i>Inactive</span>{{/equal}}
{{#equal device.status "BLOCKED"}}<span><i
@ -339,7 +339,7 @@
</div>
<br/>
<a class="padding-left"
href="{{portalUrl}}/portal/dashboards/geo-dashboard/?GLOBAL-STATE={{anchor}}">
href="{{portalUrl}}/portal/dashboards/geo-dashboard/?GLOBAL-STATE={{deviceId}},{{deviceType}}">
<span class="fw-stack">
<i class="fw fw-circle-outline fw-stack-2x"></i>
<i class="fw fw-map-location fw-stack-1x"></i>
@ -439,4 +439,4 @@
{{js "js/device-detail.js"}}
{{js "js/load-map.js"}}
{{/if}}
{{/zone}}
{{/zone}}

@ -213,7 +213,7 @@ function onRequest(context) {
deviceViewData["autoCompleteParams"] = autoCompleteParams;
deviceViewData["portalUrl"] = devicemgtProps['portalURL'];
var anchor = { "device" : { "id" : deviceId, "type" : deviceType}};
deviceViewData["anchor"] = JSON.stringify(anchor);
deviceViewData["deviceId"] = deviceId;
deviceViewData["deviceType"] = deviceType;
return deviceViewData;
}

@ -157,7 +157,7 @@ var InitiateViewOption = null;
var html;
switch (status) {
case "COMPLETED" :
html = "<span><i class='fw fw-ok icon-success'></i> Completed</span>";
html = "<span><i class='fw fw-success icon-success'></i> Completed</span>";
break;
case "PENDING" :
html = "<span><i class='fw fw-warning icon-warning'></i> Pending</span>";
@ -166,10 +166,10 @@ var InitiateViewOption = null;
html = "<span><i class='fw fw-error icon-danger'></i> Error</span>";
break;
case "IN_PROGRESS" :
html = "<span><i class='fw fw-ok icon-warning'></i> In Progress</span>";
html = "<span><i class='fw fw-success icon-warning'></i> In Progress</span>";
break;
case "REPEATED" :
html = "<span><i class='fw fw-ok icon-warning'></i> Repeated</span>";
html = "<span><i class='fw fw-success icon-warning'></i> Repeated</span>";
break;
}
return html;

@ -7,7 +7,7 @@
{{#equal platform "windows"}}<i class="icon fw fw-windows"></i>{{/equal}}
{{#equal isActive true}}
<span style="word-wrap: break-word;">
<i class="fw fw-ok icon-success" style="font-size: 14px;"></i>
<i class="fw fw-success icon-success" style="font-size: 14px;"></i>
&nbsp;Active
</span>
<span style="word-wrap: break-word;"><b>{{name}}</b></span>

@ -34,7 +34,7 @@
<div>
<b>Compliance :</b>
{{#equal compliance "COMPLIANT"}}
<span><i class="fw fw-ok icon-success"></i> Compliant</span>
<span><i class="fw fw-success icon-success"></i> Compliant</span>
{{/equal}}
{{#equal compliance "NON-COMPLIANT"}}
<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>
@ -70,7 +70,7 @@
<tr data-type="selectable">
<td data-display="{{featureCode}}" data-grid-label="Feature Code">{{featureCode}}</td>
<td data-display="{{compliance}}" data-grid-label="Status">
{{#equal compliance true}}<span><i class="fw fw-ok icon-success"></i> Compliant</span>{{/equal}}
{{#equal compliance true}}<span><i class="fw fw-success icon-success"></i> Compliant</span>{{/equal}}
{{#equal compliance false}}<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>{{/equal}}
</td>
</tr>

@ -23,8 +23,8 @@
</span>
Passcode Policy
<span id="passcode-policy-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="passcode-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('camera', this)">
@ -32,8 +32,8 @@
<i class="fw fw-block fw-stack-2x"></i>
</span>
Restrictions
<span id="camera-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="camera-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="camera-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="camera-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span class="camera-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('encrypt-storage', this)">
@ -42,8 +42,8 @@
</span>
Encryption Settings
<span id="encrypt-storage-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="encrypt-storage-error" class="encryption-error status-icon hidden"><i
class="fw fw-error"></i></span>
</a>
@ -52,8 +52,8 @@
<i class="fw fw-wifi fw-stack-2x"></i>
</span>
Wi-Fi Settings
<span id="wifi-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="wifi-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="wifi-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="wifi-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="wifi-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('vpn', this)">
@ -61,8 +61,8 @@
<i class="fw fw-vpn fw-stack-2x"></i>
</span>
Virtual Private Network
<span id="vpn-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="vpn-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="vpn-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="vpn-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="vpn-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('work-profile', this)">
@ -70,8 +70,8 @@
<i class="fw fw-service fw-stack-2x"></i>
</span>
Work-Profile Configurations
<span id="work-profile-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="work-profile-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="work-profile-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="work-profile-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="work-profile-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('app-restriction', this)">
@ -81,8 +81,8 @@
</span>
Application Restrictions
<span id="app-restriction-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="app-restriction-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-system-update-policy', this)">
@ -91,9 +91,9 @@
</span>
System Update Policy (COSU)
<span id="cosu-system-update-policy-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="cosu-system-update-policy-ok" class="has-success status-icon hidden"><i
class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="cosu-system-update-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-whitelisted-applications', this)" >
@ -102,8 +102,8 @@
</span>
Whitelist Apps (COSU)
<span id="cosu-whitelisted-applications-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="cosu-whitelisted-applications-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="cosu-whitelisted-applications-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="cosu-whitelisted-applications-error" class="has-error status-icon hidden"><i
class="fw fw-error"></i></span>
</a>

@ -6,8 +6,8 @@
</span>
Passcode Policy
<span id="passcode-policy-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="passcode-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('camera', this)">
@ -15,8 +15,8 @@
<i class="fw fw-block fw-stack-2x"></i>
</span>
Restrictions
<span id="camera-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="camera-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="camera-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="camera-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span class="camera-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('encrypt-storage', this)">
@ -25,8 +25,8 @@
</span>
Encryption Settings
<span id="encrypt-storage-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="encrypt-storage-error" class="encryption-error status-icon hidden"><i
class="fw fw-error"></i></span>
</a>
@ -35,8 +35,8 @@
<i class="fw fw-wifi fw-stack-2x"></i>
</span>
Wi-Fi Settings
<span id="wifi-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="wifi-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="wifi-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="wifi-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="wifi-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('vpn', this)">
@ -44,8 +44,8 @@
<i class="fw fw-vpn fw-stack-2x"></i>
</span>
Virtual Private Network
<span id="wifi-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="wifi-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="wifi-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="wifi-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="wifi-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('work-profile', this)">
@ -53,8 +53,8 @@
<i class="fw fw-service fw-stack-2x"></i>
</span>
Work-Profile Configurations
<span id="work-profile-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="work-profile-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="work-profile-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="work-profile-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="work-profile-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('app-restriction', this)">
@ -64,8 +64,8 @@
</span>
Applications Restrictions
<span id="app-restriction-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="app-restriction-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-system-update-policy', this)" class="hide">
@ -74,9 +74,9 @@
</span>
System Update Policy (COSU)
<span id="cosu-system-update-policy-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="cosu-system-update-policy-ok" class="has-success status-icon hidden"><i
class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="cosu-system-update-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-whitelisted-applications', this)" class="hide">
@ -85,8 +85,8 @@
</span>
Whitelist Apps (COSU)
<span id="cosu-whitelisted-applications-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="cosu-whitelisted-applications-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="cosu-whitelisted-applications-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="cosu-whitelisted-applications-error" class="has-error status-icon hidden"><i
class="fw fw-error"></i></span>
</a>

@ -23,8 +23,8 @@
</span>
Passcode Policy
<span id="passcode-policy-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="passcode-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('camera', this)">
@ -32,8 +32,8 @@
<i class="fw fw-block fw-stack-2x"></i>
</span>
Restrictions
<span id="camera-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="camera-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="camera-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="camera-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span class="camera-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('encrypt-storage', this)">
@ -42,8 +42,8 @@
</span>
Encryption Settings
<span id="encrypt-storage-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="encrypt-storage-error" class="encryption-error status-icon hidden"><i
class="fw fw-error"></i></span>
</a>
@ -52,8 +52,8 @@
<i class="fw fw-wifi fw-stack-2x"></i>
</span>
Wi-Fi Settings
<span id="wifi-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="wifi-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="wifi-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="wifi-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="wifi-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('vpn', this)">
@ -61,8 +61,8 @@
<i class="fw fw-vpn fw-stack-2x"></i>
</span>
Virtual Private Network
<span id="vpn-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="vpn-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="vpn-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="vpn-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="vpn-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('work-profile', this)">
@ -70,8 +70,8 @@
<i class="fw fw-service fw-stack-2x"></i>
</span>
Work-Profile Configurations
<span id="work-profile-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="work-profile-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="work-profile-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="work-profile-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="work-profile-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('app-restriction', this)">
@ -81,8 +81,8 @@
</span>
Application Restrictions
<span id="app-restriction-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="app-restriction-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-system-update-policy', this)">
@ -91,9 +91,9 @@
</span>
System Update Policy (COSU)
<span id="cosu-system-update-policy-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="cosu-system-update-policy-ok" class="has-success status-icon hidden"><i
class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="cosu-system-update-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('cosu-whitelisted-applications', this)">
@ -102,8 +102,8 @@
</span>
Whitelist Apps (COSU)
<span id="cosu-whitelisted-applications-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="cosu-whitelisted-applications-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="cosu-whitelisted-applications-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="cosu-whitelisted-applications-error" class="has-error status-icon hidden"><i
class="fw fw-error"></i></span>
</a>

@ -4,6 +4,37 @@
"category": "mobile",
"analyticsEnabled": "false",
"groupingEnabled": "false",
"scopes" : [
"perm:android:enroll",
"perm:android:wipe",
"perm:android:ring",
"perm:android:lock-devices",
"perm:android:configure-vpn",
"perm:android:configure-wifi",
"perm:android:enroll",
"perm:android:uninstall-application",
"perm:android:manage-configuration",
"perm:android:location",
"perm:android:install-application",
"perm:android:mute",
"perm:android:change-lock-code",
"perm:android:blacklist-applications",
"perm:android:set-password-policy",
"perm:android:encrypt-storage",
"perm:android:clear-password",
"perm:android:enterprise-wipe",
"perm:android:info",
"perm:android:view-configuration",
"perm:android:upgrade-firmware",
"perm:android:set-webclip",
"perm:android:send-notification",
"perm:android:disenroll",
"perm:android:update-application",
"perm:android:unlock-devices",
"perm:android:control-camera",
"perm:android:reboot",
"perm:android:logcat"
],
"features": {
"DEVICE_RING": {
"icon": "fw-dial-up",

@ -21,7 +21,7 @@
<a href="{{host}}/android-web-agent/public/mdm.page.enrollments.android.download-agent/asset/android-agent.apk" class="btn-operations"><i class="fw fw-download fw-inverse fw-lg add-margin-1x"></i> Download APK</a>
<a href="javascript:toggleEmailInvite()" class="btn-operations"><i class="fw fw-mail fw-inverse fw-lg add-margin-1x"></i> Invite by Email</a>
<p class="doc-link">Click <a href="https://docs.wso2.com/display/IoTS100/Android"
<p class="doc-link">Click <a href="https://docs.wso2.com/display/IoTS300/Android"
target="_blank">here</a> for latest instructions and troubleshooting.</p>
<h3 class="uppercase">What You Need</h3>

@ -68,7 +68,7 @@ public final class PluginConstants {
public static final String CXF_REQUEST_URI = "org.apache.cxf.request.uri";
//Web services media types
public static final String SYNCML_MEDIA_TYPE = "application/vnd.syncml.dm+xml;charset=utf-8";
public static final String SYNCML_MEDIA_TYPE = "application/vnd.syncml.dm+xml";
/**
* Discovery service related other constants
@ -342,6 +342,7 @@ public final class PluginConstants {
}
public static final String REQUESTED_WIN10_VERSION = "3.0";
public static final String REQUESTED_WIN81_VERSION = "2.0";
public static final String OS_VERSION = "10";
}
/**

@ -76,7 +76,7 @@ import java.util.List;
name = "Un-enroll Device",
description = "Unregister an Windows device",
key = "perm:windows:disenroll",
permissions = {"/device-mgt/devices/disenroll/windows"}
permissions = {"/device-mgt/devices/owning-device/operations/windows/disenroll"}
),
@Scope(
name = "Factory Reset",

@ -21,11 +21,14 @@ package org.wso2.carbon.device.mgt.mobile.windows.api.services;
import io.swagger.annotations.*;
import org.w3c.dom.Document;
import org.wso2.carbon.apimgt.annotations.api.Scope;
import org.wso2.carbon.apimgt.annotations.api.Scopes;
import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException;
import org.wso2.carbon.device.mgt.mobile.windows.api.common.PluginConstants;
import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsConfigurationException;
import org.wso2.carbon.device.mgt.mobile.windows.api.common.exceptions.WindowsDeviceEnrolmentException;
import org.wso2.carbon.device.mgt.mobile.windows.api.operations.WindowsOperationException;
import org.wso2.carbon.device.mgt.mobile.windows.api.operations.util.Constants;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
@ -38,25 +41,17 @@ import javax.ws.rs.core.Response;
/**
* Interface for Windows 10 Device management phase.
*/
@SwaggerDefinition(
info = @Info(
version = "1.0.0",
title = "",
extensions = {
@Extension(properties = {
@ExtensionProperty(name = "name", value = "Windows 10 Device management"),
@ExtensionProperty(name = "context",
value = "/api/device-mgt/windows/v1.0/management"),
})
}
),
tags = {
@Tag(name = "windows", description = "")
@Path("/devicemgt")
@Scopes(
scopes = {
@Scope(
name = "Pending operations",
description = "Register an Android device",
key = "perm:windows:enroll",
permissions = {"/device-mgt/devices/enroll/windows"}
)
}
)
@Api(value = "Windows 10 Device management",
description = "This carries all the resources related to Windows 10 management session message flow.")
@Path("/devicemgt")
public interface DeviceManagementService {
@Path("/pending-operations")
@POST
@ -68,14 +63,10 @@ public interface DeviceManagementService {
notes = "Using this API to fetching more information to enroll the Device and " +
"getting pending operations.",
tags = "Windows Device Management Administrative Service",
authorizations = {
@Authorization(
value = "permission",
scopes = {@AuthorizationScope(
scope = "/device-mgt/devices/enroll/windows",
description = "Getting pending operations and " +
"device information to enroll the device")}
)
extensions = {
@Extension(properties = {
@ExtensionProperty(name = Constants.SCOPE, value = "perm:android:enroll")
})
}
)
@ApiResponses(value = {

@ -42,24 +42,7 @@ import javax.xml.ws.soap.SOAPBinding;
/**
* Interface for Discovery service related operations.
*/
@SwaggerDefinition(
info = @Info(
version = "1.0.0",
title = "",
extensions = {
@Extension(properties = {
@ExtensionProperty(name = "name", value = "Windows Discovery Service"),
@ExtensionProperty(name = "context",
value = "/api/device-mgt/windows/v1.0/discovery/post"),
})
}
),
tags = {
@Tag(name = "windows", description = "")
}
)
@Api(value = "Windows Discovery Service",
description = "This carries all the resources related to Windows Discovery service.")
@WebService(targetNamespace = PluginConstants.DISCOVERY_SERVICE_TARGET_NAMESPACE,
name = "IDiscoveryService")
@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING)

@ -86,4 +86,13 @@ public class DiscoveryRequest implements Serializable {
this.osEdition = osEdition;
}
}
public String getApplicationVersion() {
return applicationVersion;
}
public void setApplicationVersion(String applicationVersion) {
this.applicationVersion = applicationVersion;
}
}

@ -68,9 +68,11 @@ public class DiscoveryServiceImpl implements DiscoveryService {
String emailId = discoveryRequest.getEmailId();
String[] userDomains = emailId.split(DELIMITER);
String domain = userDomains[DOMAIN_SEGMENT];
String applicationVersion = discoveryRequest.getApplicationVersion();
String[] osVersions = applicationVersion .split("\\.");
String os = osVersions[0];
DiscoveryResponse discoveryResponse;
if (PluginConstants.WindowsVersionProperties.REQUESTED_WIN10_VERSION.equals(discoveryRequest.getVersion()) &&
FEDERATED.equals(getAuthPolicy())) {
if (PluginConstants.WindowsVersionProperties.OS_VERSION.equals(os) && FEDERATED.equals(getAuthPolicy())) {
discoveryResponse = new DiscoveryResponse();
discoveryResponse.setAuthPolicy(FEDERATED);

@ -35,25 +35,6 @@ import javax.xml.ws.ResponseWrapper;
import javax.xml.ws.soap.SOAPBinding;
import java.io.UnsupportedEncodingException;
@SwaggerDefinition(
info = @Info(
version = "1.0.0",
title = "",
extensions = {
@io.swagger.annotations.Extension(properties = {
@ExtensionProperty(name = "name", value = "Windows 10 Enrollment Service"),
@ExtensionProperty(name = "context",
value = "/api/device-mgt/windows/v1.0/deviceenrolment/enrollment"),
})
}
),
tags = {
@Tag(name = "windows", description = "")
}
)
@Api(value = "Windows 10 Enrollment Service",
description = "This carries all the resources related to Windows enrollment.")
@WebService(targetNamespace = PluginConstants.DEVICE_ENROLLMENT_SERVICE_TARGET_NAMESPACE, name = "enrollment")
@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING)
public interface EnrollmentService {

@ -89,7 +89,7 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
if (modifyEnrollWithMoreDetail(request)) {
pendingOperations = operationHandler.getPendingOperations(syncmlDocument);
response = operationReply.generateReply(syncmlDocument,pendingOperations);
response = operationReply.generateReply(syncmlDocument, pendingOperations);
return Response.status(Response.Status.OK).entity(response).build();
} else {
String msg = "Error occurred in while modify the enrollment.";
@ -101,7 +101,7 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
log.error(msg);
return Response.status(Response.Status.UNAUTHORIZED).entity(msg).build();
}
} else {
} else {
if ((syncmlDocument.getBody().getAlert() != null)) {
if (!syncmlDocument.getBody().getAlert().getData().equals(Constants.DISENROLL_ALERT_DATA)) {
pendingOperations = operationHandler.getPendingOperations(syncmlDocument);
@ -155,8 +155,8 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
private boolean modifyEnrollWithMoreDetail(Document request) throws WindowsDeviceEnrolmentException,
WindowsOperationException {
String devMan;
String devMod;
String devMan = null;
String devMod = null;
boolean status = false;
String user;
SyncmlDocument syncmlDocument;
@ -165,8 +165,15 @@ public class DeviceManagementServiceImpl implements DeviceManagementService {
syncmlDocument = SyncmlParser.parseSyncmlPayload(request);
ReplaceTag replace = syncmlDocument.getBody().getReplace();
List<ItemTag> itemList = replace.getItems();
devMan = itemList.get(PluginConstants.SyncML.DEVICE_MAN_POSITION).getData();
devMod = itemList.get(PluginConstants.SyncML.DEVICE_MODEL_POSITION).getData();
for (ItemTag itemTag : itemList) {
String locURI = itemTag.getSource().getLocURI();
if (OperationCode.Info.MANUFACTURER.getCode().equals(locURI)) {
devMan = itemTag.getData();
}
if (OperationCode.Info.DEVICE_MODEL.getCode().equals(locURI)) {
devMod = itemTag.getData();
}
}
user = syncmlDocument.getHeader().getSource().getLocName();
AuthenticationInfo authenticationInfo = new AuthenticationInfo();
authenticationInfo.setUsername(user);

@ -37,24 +37,7 @@ import javax.ws.rs.core.Response;
/**
* Interface for Windows 8.1 enrollment flow.
*/
@SwaggerDefinition(
info = @Info(
version = "1.0.0",
title = "",
extensions = {
@Extension(properties = {
@ExtensionProperty(name = "name", value = "Windows 8.1 Device Management Service"),
@ExtensionProperty(name = "context",
value = "/api/device-mgt/windows/v1.0/syncml"),
})
}
),
tags = {
@Tag(name = "windows", description = "")
}
)
@Api(value = "Windows 8.1 Device Management Service",
description = "This carries all the resources related to Windows syncml message flow.")
@Path("/devicemanagement")
public interface SyncmlService {

@ -41,24 +41,7 @@ import java.io.UnsupportedEncodingException;
/**
* Interface of WSTEP implementation.
*/
@SwaggerDefinition(
info = @Info(
version = "1.0.0",
title = "",
extensions = {
@Extension(properties = {
@ExtensionProperty(name = "name", value = "Windows 8.1 Enrollment Service"),
@ExtensionProperty(name = "context",
value = "/api/device-mgt/windows/v1.0/deviceenrolment/wstep"),
})
}
),
tags = {
@Tag(name = "windows", description = "")
}
)
@Api(value = "Windows Enrollment service Management",
description = "This carries all the resources related to Windows enrollment service.")
@WebService(targetNamespace = PluginConstants.DEVICE_ENROLLMENT_SERVICE_TARGET_NAMESPACE, name = "wstep")
@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING)
public interface CertificateEnrollmentService {

@ -41,24 +41,6 @@ import javax.xml.ws.soap.SOAPBinding;
* Interface for MS-XCEP implementation.
*/
@SwaggerDefinition(
info = @Info(
version = "1.0.0",
title = "",
extensions = {
@io.swagger.annotations.Extension(properties = {
@ExtensionProperty(name = "name", value = "Windows Enrollment policy Service"),
@ExtensionProperty(name = "context",
value = "/api/device-mgt/windows/v1.0/certificatepolicy/xcep"),
})
}
),
tags = {
@Tag(name = "windows", description = "")
}
)
@Api(value = "Windows Enrollment policy Service",
description = "This carries all the resources related to Windows enrollment policy.")
@WebService(targetNamespace = PluginConstants.CERTIFICATE_ENROLLMENT_POLICY_SERVICE_TARGET_NAMESPACE,
name = "IPolicy")
@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING)

@ -48,10 +48,6 @@
<session-config>
<session-timeout>60</session-timeout>
</session-config>
<context-param>
<param-name>isAdminService</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>managed-api-enabled</param-name>
<param-value>true</param-value>

@ -52,7 +52,7 @@
<td class="sorting_1" style="padding:10px 15px; width: 15%;">Status</td>
<td style="padding:10px 15px;">
{{#equal device.status "ACTIVE"}}<span><i
class="fw fw-ok icon-success"></i>Active</span>{{/equal}}
class="fw fw-success icon-success"></i>Active</span>{{/equal}}
{{#equal device.status "INACTIVE"}}<span><i
class="fw fw-warning icon-warning"></i>Inactive</span>{{/equal}}
{{#equal device.status "BLOCKED"}}<span><i
@ -140,12 +140,12 @@
class="hidden-sm">Device Location</span>
</a>
</li>
<li role="presentation" class="list-group-item">
<!--li role="presentation" class="list-group-item">
<a href="#installed_applications_tab" role="tab" data-toggle="tab"
aria-controls="installed_applications_tab">
<i class="icon fw fw-application"></i><span class="hidden-sm">Installed Applications</span>
</a>
</li>
</li-->
{{/zone}}
{{#zone "device-details-tab-contents"}}

@ -157,7 +157,7 @@ var InitiateViewOption = null;
var html;
switch (status) {
case "COMPLETED" :
html = "<span><i class='fw fw-ok icon-success'></i> Completed</span>";
html = "<span><i class='fw fw-success icon-success'></i> Completed</span>";
break;
case "PENDING" :
html = "<span><i class='fw fw-warning icon-warning'></i> Pending</span>";
@ -166,10 +166,10 @@ var InitiateViewOption = null;
html = "<span><i class='fw fw-error icon-danger'></i> Error</span>";
break;
case "IN_PROGRESS" :
html = "<span><i class='fw fw-ok icon-warning'></i> In Progress</span>";
html = "<span><i class='fw fw-success icon-warning'></i> In Progress</span>";
break;
case "REPEATED" :
html = "<span><i class='fw fw-ok icon-warning'></i> Repeated</span>";
html = "<span><i class='fw fw-success icon-warning'></i> Repeated</span>";
break;
}
return html;

@ -45,7 +45,7 @@ $(document).ready(function () {
var url = $(this).prop("href");
var hash = url.substring(url.indexOf("#") + 1);
if (hash == "device_location") {
if (hash == "device_location_tab") {
if (!map) {
loadLeafletMap();
}

@ -7,7 +7,7 @@
{{#equal platform "windows"}}<i class="icon fw fw-windows"></i>{{/equal}}
{{#equal isActive true}}
<span style="word-wrap: break-word;">
<i class="fw fw-ok icon-success" style="font-size: 14px;"></i>
<i class="fw fw-success icon-success" style="font-size: 14px;"></i>
&nbsp;Active
</span>
<span style="word-wrap: break-word;"><b>{{name}}</b></span>

@ -34,7 +34,7 @@
<div>
<b>Compliance :</b>
{{#equal compliance "COMPLIANT"}}
<span><i class="fw fw-ok icon-success"></i> Compliant</span>
<span><i class="fw fw-success icon-success"></i> Compliant</span>
{{/equal}}
{{#equal compliance "NON-COMPLIANT"}}
<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>
@ -69,7 +69,7 @@
<tr data-type="selectable">
<td data-display="{{featureCode}}" data-grid-label="Feature Code">{{featureCode}}</td>
<td data-display="{{compliance}}" data-grid-label="Status">
{{#equal compliance true}}<span><i class="fw fw-ok icon-success"></i> Compliant</span>{{/equal}}
{{#equal compliance true}}<span><i class="fw fw-success icon-success"></i> Compliant</span>{{/equal}}
{{#equal compliance false}}<span><i class="fw fw-warning icon-danger"></i> Not Compliant</span>{{/equal}}
</td>
</tr>

@ -5,8 +5,8 @@
<i class="fw fw-key fw-stack-2x"></i>
</span>Passcode Policy
<span id="passcode-policy-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="passcode-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('camera', this)">
@ -14,8 +14,8 @@
<i class="fw fw-block fw-stack-2x"></i>
</span>
Restrictions on Camera
<span id="camera-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="camera-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="camera-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="camera-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span class="camera-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('encrypt-storage', this)">
@ -24,8 +24,8 @@
</span>
Encryption Settings
<span id="encrypt-storage-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="encrypt-storage-error" class="encryption-error status-icon hidden"><i
class="fw fw-error"></i></span>
</a>
@ -36,8 +36,8 @@
</span>
Applications Restrictions
<span id="app-restriction-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="app-restriction-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
</div>

@ -6,8 +6,8 @@
</span>
Passcode Policy
<span id="passcode-policy-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="passcode-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('camera', this)">
@ -15,8 +15,8 @@
<i class="fw fw-block fw-stack-2x"></i>
</span>
Restrictions on Camera
<span id="camera-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="camera-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="camera-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="camera-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span class="camera-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('encrypt-storage', this)">
@ -25,8 +25,8 @@
</span>
Encryption Settings
<span id="encrypt-storage-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="encrypt-storage-error" class="encryption-error status-icon hidden"><i
class="fw fw-error"></i></span>
</a>
@ -37,8 +37,8 @@
</span>
Applications Restrictions
<span id="app-restriction-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="app-restriction-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
</div>

@ -5,8 +5,8 @@
<i class="fw fw-key fw-stack-2x"></i>
</span>Passcode Policy
<span id="passcode-policy-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="passcode-policy-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="passcode-policy-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('camera', this)">
@ -14,8 +14,8 @@
<i class="fw fw-block fw-stack-2x"></i>
</span>
Restrictions on Camera
<span id="camera-configured" class="has-configured status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="camera-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
<span id="camera-configured" class="has-configured status-icon hidden"><i class="fw fw-success"></i></span>
<span id="camera-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span class="camera-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
<a href="javascript:void(0)" onclick="showAdvanceOperation('encrypt-storage', this)">
@ -24,8 +24,8 @@
</span>
Encryption Settings
<span id="encrypt-storage-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="encrypt-storage-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="encrypt-storage-error" class="encryption-error status-icon hidden"><i
class="fw fw-error"></i></span>
</a>
@ -36,8 +36,8 @@
</span>
Applications Restrictions
<span id="app-restriction-configured" class="has-configured status-icon hidden"><i
class="fw fw-ok"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-ok"></i></span>
class="fw fw-success"></i></span>
<span id="app-restriction-ok" class="has-success status-icon hidden"><i class="fw fw-success"></i></span>
<span id="app-restriction-error" class="has-error status-icon hidden"><i class="fw fw-error"></i></span>
</a>
</div>

@ -2,77 +2,47 @@
"deviceType": {
"label": "Windows",
"category": "mobile",
"scopes" : [
"perm:windows:enroll",
"perm:windows:lock-devices",
"perm:windows:ring",
"perm:windows:wipe",
"perm:windows:lock-reset",
"perm:windows:reboot",
"perm:windows:location",
"perm:windows:disenroll"
],
"analyticsEnabled": "false",
"groupingEnabled": "false",
"features": {
"DEVICE_RING": {
"icon": "fw-dial-up"
"icon": "fw-dial-up",
"permission": "/device-mgt/devices/owning-device/operations/android/ring"
},
"DEVICE_LOCK": {
"icon": "fw-lock"
"icon": "fw-lock",
"permission": "/device-mgt/devices/owning-device/operations/windows/lock"
},
"DEVICE_LOCATION": {
"icon": "fw-map-location"
},
"CLEAR_PASSWORD": {
"icon": "fw-clear"
"icon": "fw-map-location",
"permission": "/device-mgt/devices/owning-device/operations/windows/location"
},
"DEVICE_REBOOT": {
"icon": "fw-refresh"
},
"UPGRADE_FIRMWARE": {
"icon": "fw-hardware",
"formParams": [
{
"type": "checkbox",
"id": "immediate",
"optional": true,
"label": "Instant Upgrade",
"helper": "Once enabled, device firmware upgrade process will start instantly."
},
{
"type": "text",
"id": "schedule",
"optional": false,
"label": "Enter the date and time to schedule firmware upgrade."
},
{
"type": "text",
"id": "server",
"optional": true,
"label": "Enter firmware upgrade server URL (ie. http://abc.com or http://abc.com/ota)"
}
]
},
"DEVICE_MUTE": {
"icon": "fw-mute"
},
"NOTIFICATION": {
"icon": "fw-message",
"formParams": [
{
"type": "text",
"id": "messageText",
"optional": false,
"label": "Title Here..."
},
{
"type": "text",
"id": "messageTitle",
"optional": false,
"label": "Message Here..."
}
]
"icon": "fw-refresh",
"permission": "/device-mgt/devices/owning-device/operations/windows/reboot"
},
"LOCK_RESET": {
"icon": "fw-security"
"icon": "fw-security",
"permission": "/device-mgt/devices/owning-device/operations/windows/lock-reset"
},
"DISENROLL": {
"icon": "fw-block"
"icon": "fw-block",
"permission": "/device-mgt/devices/owning-device/operations/windows/disenroll"
},
"WIPE_DATA": {
"icon": "fw-delete"
"icon": "fw-delete",
"permission": "/device-mgt/devices/owning-device/operations/windows/wipe"
}
}
}

@ -22,29 +22,29 @@
<Feature code="keywords">
<Name>Add Keywords</Name>
<Description>Send keywords to the device</Description>
<Operation context="/android_sense/device/{deviceId}/words" method="POST">
<QueryParameters>
<Parameter>keywords</Parameter>
</QueryParameters>
</Operation>
<!--<Operation context="/android_sense/device/{deviceId}/words" method="POST">-->
<!--<QueryParameters>-->
<!--<Parameter>keywords</Parameter>-->
<!--</QueryParameters>-->
<!--</Operation>-->
</Feature>
<Feature code="threshold">
<Name>Add Threshold</Name>
<Description>Send Threshold to the device</Description>
<Operation context="/android_sense/device/{deviceId}/words/threshold" method="POST">
<QueryParameters>
<Parameter>threshold</Parameter>
</QueryParameters>
</Operation>
<!--<Operation context="/android_sense/device/{deviceId}/words/threshold" method="POST">-->
<!--<QueryParameters>-->
<!--<Parameter>threshold</Parameter>-->
<!--</QueryParameters>-->
<!--</Operation>-->
</Feature>
<Feature code="remove_words">
<Name>Remove words</Name>
<Description>Remove Threshold from the device</Description>
<Operation context="/android_sense/device/{deviceId}/words" method="DELETE">
<QueryParameters>
<Parameter>words</Parameter>
</QueryParameters>
</Operation>
<!--<Operation context="/android_sense/device/{deviceId}/words" method="DELETE">-->
<!--<QueryParameters>-->
<!--<Parameter>words</Parameter>-->
<!--</QueryParameters>-->
<!--</Operation>-->
</Feature>
</Features>

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?><api xmlns="http://ws.apache.org/ns/synapse" name="admin--Windows 10 Device management" context="/api/device-mgt/windows/v1.0/management/devicemgt">
<resource methods="HEAD DELETE POST GET OPTIONS PATCH PUT" url-mapping="/*" faultSequence="fault">
<inSequence>
<property name="isDefault" expression="$trp:WSO2_AM_API_DEFAULT_VERSION"/>
<filter source="$ctx:isDefault" regex="true">
<then>
<log level="custom">
<property name="STATUS" value="Faulty invoking through default API.Dropping message to avoid recursion.."/>
</log>
<payloadFactory media-type="xml">
<format>
<am:fault xmlns:am="http://wso2.org/apimanager">
<am:code>500</am:code>
<am:type>Status report</am:type>
<am:message>Internal Server Error</am:message>
<am:description>Faulty invoking through default API</am:description>
</am:fault>
</format>
<args/>
</payloadFactory>
<property name="HTTP_SC" value="500" scope="axis2"/>
<property name="RESPONSE" value="true"/>
<header name="To" action="remove"/>
<property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
<property name="ContentType" scope="axis2" action="remove"/>
<property name="Authorization" scope="transport" action="remove"/>
<property name="Host" scope="transport" action="remove"/>
<property name="Accept" scope="transport" action="remove"/>
<send/>
</then>
<else>
<header name="WSO2_AM_API_DEFAULT_VERSION" scope="transport" value="true"/>
<property name="uri.var.portnum" expression="get-property('http.nio.port')"/>
<send>
<endpoint>
<http uri-template="http://localhost:{uri.var.portnum}/api/device-mgt/windows/v1.0/management/devicemgt/1.0.0">
<timeout>
<duration>60000</duration>
<responseAction>fault</responseAction>
</timeout>
</http>
</endpoint>
</send>
</else>
</filter>
</inSequence>
<outSequence>
<property name="FORCE_HTTP_CONTENT_LENGTH" scope="axis2" value="true"/>
<property name="COPY_CONTENT_LENGTH_FROM_INCOMING" value="true" scope="axis2"/>
<send/>
</outSequence>
</resource>
<handlers>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.common.SynapsePropertiesHandler"/>
</handlers>
</api>

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?><api xmlns="http://ws.apache.org/ns/synapse" name="admin--Windows 10 Device management" context="/api/device-mgt/windows/v1.0/management/devicemgt/1.0.0" version="1.0.0" version-type="context">
<resource methods="POST" url-mapping="/pending-operations" faultSequence="fault">
<inSequence>
<property name="api.ut.backendRequestTime" expression="get-property('SYSTEM_TIME')"/>
<property name="AM_KEY_TYPE" value="PRODUCTION" scope="default"/>
<filter source="$ctx:AM_KEY_TYPE" regex="PRODUCTION">
<then>
<send>
<endpoint name="admin--Windows 10 Device management_APIproductionEndpoint_0">
<http uri-template="https://localhost:9443/api/device-mgt/windows/v1.0/management/devicemgt"/>
<property name="ENDPOINT_ADDRESS" value="https://localhost:9443/api/device-mgt/windows/v1.0/management/devicemgt"/>
</endpoint>
</send>
</then>
<else>
<sequence key="_sandbox_key_error_"/>
</else>
</filter>
</inSequence>
<outSequence>
<class name="org.wso2.carbon.apimgt.gateway.handlers.analytics.APIMgtResponseHandler"/>
<send/>
</outSequence>
</resource>
<handlers>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.common.APIMgtLatencyStatsHandler"/>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.security.CORSRequestHandler">
<property name="apiImplementationType" value="ENDPOINT"/>
</handler>
</handlers>
</api>

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?><api xmlns="http://ws.apache.org/ns/synapse" name="admin--Windows 10 Enrollment Service" context="/api/device-mgt/windows/v1.0/deviceenrolment/enrollment">
<resource methods="HEAD DELETE POST GET OPTIONS PATCH PUT" url-mapping="/*" faultSequence="fault">
<inSequence>
<property name="isDefault" expression="$trp:WSO2_AM_API_DEFAULT_VERSION"/>
<filter source="$ctx:isDefault" regex="true">
<then>
<log level="custom">
<property name="STATUS" value="Faulty invoking through default API.Dropping message to avoid recursion.."/>
</log>
<payloadFactory media-type="xml">
<format>
<am:fault xmlns:am="http://wso2.org/apimanager">
<am:code>500</am:code>
<am:type>Status report</am:type>
<am:message>Internal Server Error</am:message>
<am:description>Faulty invoking through default API</am:description>
</am:fault>
</format>
<args/>
</payloadFactory>
<property name="HTTP_SC" value="500" scope="axis2"/>
<property name="RESPONSE" value="true"/>
<header name="To" action="remove"/>
<property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
<property name="ContentType" scope="axis2" action="remove"/>
<property name="Authorization" scope="transport" action="remove"/>
<property name="Host" scope="transport" action="remove"/>
<property name="Accept" scope="transport" action="remove"/>
<send/>
</then>
<else>
<header name="WSO2_AM_API_DEFAULT_VERSION" scope="transport" value="true"/>
<property name="uri.var.portnum" expression="get-property('http.nio.port')"/>
<send>
<endpoint>
<http uri-template="http://localhost:{uri.var.portnum}/api/device-mgt/windows/v1.0/deviceenrolment/enrollment/1.0.0">
<timeout>
<duration>60000</duration>
<responseAction>fault</responseAction>
</timeout>
</http>
</endpoint>
</send>
</else>
</filter>
</inSequence>
<outSequence>
<property name="FORCE_HTTP_CONTENT_LENGTH" scope="axis2" value="true"/>
<property name="COPY_CONTENT_LENGTH_FROM_INCOMING" value="true" scope="axis2"/>
<send/>
</outSequence>
</resource>
<handlers>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.common.SynapsePropertiesHandler"/>
</handlers>
</api>

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?><api xmlns="http://ws.apache.org/ns/synapse" name="admin--Windows 10 Enrollment Service" context="/api/device-mgt/windows/v1.0/deviceenrolment/enrollment/1.0.0" version="1.0.0" version-type="context">
<resource methods="POST" url-mapping="/*" faultSequence="fault">
<inSequence>
<property name="api.ut.backendRequestTime" expression="get-property('SYSTEM_TIME')"/>
<property name="AM_KEY_TYPE" value="PRODUCTION" scope="default"/>
<filter source="$ctx:AM_KEY_TYPE" regex="PRODUCTION">
<then>
<send>
<endpoint name="admin--Windows 10 Enrollment Service_APIproductionEndpoint_0">
<http uri-template="https://localhost:9443/api/device-mgt/windows/v1.0/deviceenrolment/enrollment"/>
<property name="ENDPOINT_ADDRESS" value="https://localhost:9443/api/device-mgt/windows/v1.0/deviceenrolment/enrollment"/>
</endpoint>
</send>
</then>
<else>
<sequence key="_sandbox_key_error_"/>
</else>
</filter>
</inSequence>
<outSequence>
<class name="org.wso2.carbon.apimgt.gateway.handlers.analytics.APIMgtResponseHandler"/>
<property name="FORCE_HTTP_CONTENT_LENGTH" scope="axis2" value="true"/>
<property name="COPY_CONTENT_LENGTH_FROM_INCOMING" value="true" scope="axis2"/>
<send/>
</outSequence>
</resource>
<handlers>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.common.APIMgtLatencyStatsHandler"/>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.security.CORSRequestHandler">
<property name="apiImplementationType" value="ENDPOINT"/>
</handler>
</handlers>
</api>

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?><api xmlns="http://ws.apache.org/ns/synapse" name="admin--Windows 8.1 Device Management Service" context="/api/device-mgt/windows/v1.0/syncml">
<resource methods="HEAD DELETE POST GET OPTIONS PATCH PUT" url-mapping="/*" faultSequence="fault">
<inSequence>
<property name="isDefault" expression="$trp:WSO2_AM_API_DEFAULT_VERSION"/>
<filter source="$ctx:isDefault" regex="true">
<then>
<log level="custom">
<property name="STATUS" value="Faulty invoking through default API.Dropping message to avoid recursion.."/>
</log>
<payloadFactory media-type="xml">
<format>
<am:fault xmlns:am="http://wso2.org/apimanager">
<am:code>500</am:code>
<am:type>Status report</am:type>
<am:message>Internal Server Error</am:message>
<am:description>Faulty invoking through default API</am:description>
</am:fault>
</format>
<args/>
</payloadFactory>
<property name="HTTP_SC" value="500" scope="axis2"/>
<property name="RESPONSE" value="true"/>
<header name="To" action="remove"/>
<property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
<property name="ContentType" scope="axis2" action="remove"/>
<property name="Authorization" scope="transport" action="remove"/>
<property name="Host" scope="transport" action="remove"/>
<property name="Accept" scope="transport" action="remove"/>
<send/>
</then>
<else>
<header name="WSO2_AM_API_DEFAULT_VERSION" scope="transport" value="true"/>
<property name="uri.var.portnum" expression="get-property('http.nio.port')"/>
<send>
<endpoint>
<http uri-template="http://localhost:{uri.var.portnum}/api/device-mgt/windows/v1.0/syncml/1.0.0">
<timeout>
<duration>60000</duration>
<responseAction>fault</responseAction>
</timeout>
</http>
</endpoint>
</send>
</else>
</filter>
</inSequence>
<outSequence>
<send/>
</outSequence>
</resource>
<handlers>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.common.SynapsePropertiesHandler"/>
</handlers>
</api>

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?><api xmlns="http://ws.apache.org/ns/synapse" name="admin--Windows 8.1 Device Management Service" context="/api/device-mgt/windows/v1.0/syncml/1.0.0" version="1.0.0" version-type="context">
<resource methods="POST" url-mapping="/request" faultSequence="fault">
<inSequence>
<property name="api.ut.backendRequestTime" expression="get-property('SYSTEM_TIME')"/>
<property name="AM_KEY_TYPE" value="PRODUCTION" scope="default"/>
<filter source="$ctx:AM_KEY_TYPE" regex="PRODUCTION">
<then>
<send>
<endpoint name="admin--Windows 8.1 Device Management Service_APIproductionEndpoint_0">
<http uri-template="https://localhost:9443/api/device-mgt/windows/v1.0/syncml"/>
<property name="ENDPOINT_ADDRESS" value="https://localhost:9443/api/device-mgt/windows/v1.0/syncml"/>
</endpoint>
</send>
</then>
<else>
<sequence key="_sandbox_key_error_"/>
</else>
</filter>
</inSequence>
<outSequence>
<class name="org.wso2.carbon.apimgt.gateway.handlers.analytics.APIMgtResponseHandler"/>
<send/>
</outSequence>
</resource>
<handlers>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.common.APIMgtLatencyStatsHandler"/>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.security.CORSRequestHandler">
<property name="apiImplementationType" value="ENDPOINT"/>
</handler>
</handlers>
</api>

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?><api xmlns="http://ws.apache.org/ns/synapse" name="admin--Windows 8.1 Enrollment Service" context="/api/device-mgt/windows/v1.0/deviceenrolment/wstep">
<resource methods="HEAD DELETE POST GET OPTIONS PATCH PUT" url-mapping="/*" faultSequence="fault">
<inSequence>
<property name="isDefault" expression="$trp:WSO2_AM_API_DEFAULT_VERSION"/>
<filter source="$ctx:isDefault" regex="true">
<then>
<log level="custom">
<property name="STATUS" value="Faulty invoking through default API.Dropping message to avoid recursion.."/>
</log>
<payloadFactory media-type="xml">
<format>
<am:fault xmlns:am="http://wso2.org/apimanager">
<am:code>500</am:code>
<am:type>Status report</am:type>
<am:message>Internal Server Error</am:message>
<am:description>Faulty invoking through default API</am:description>
</am:fault>
</format>
<args/>
</payloadFactory>
<property name="HTTP_SC" value="500" scope="axis2"/>
<property name="RESPONSE" value="true"/>
<header name="To" action="remove"/>
<property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
<property name="ContentType" scope="axis2" action="remove"/>
<property name="Authorization" scope="transport" action="remove"/>
<property name="Host" scope="transport" action="remove"/>
<property name="Accept" scope="transport" action="remove"/>
<send/>
</then>
<else>
<header name="WSO2_AM_API_DEFAULT_VERSION" scope="transport" value="true"/>
<property name="uri.var.portnum" expression="get-property('http.nio.port')"/>
<send>
<endpoint>
<http uri-template="http://localhost:{uri.var.portnum}/api/device-mgt/windows/v1.0/deviceenrolment/wstep/1.0.0">
<timeout>
<duration>60000</duration>
<responseAction>fault</responseAction>
</timeout>
</http>
</endpoint>
</send>
</else>
</filter>
</inSequence>
<outSequence>
<send/>
</outSequence>
</resource>
<handlers>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.common.SynapsePropertiesHandler"/>
</handlers>
</api>

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?><api xmlns="http://ws.apache.org/ns/synapse" name="admin--Windows 8.1 Enrollment Service" context="/api/device-mgt/windows/v1.0/deviceenrolment/wstep/1.0.0" version="1.0.0" version-type="context">
<resource methods="POST" url-mapping="/*" faultSequence="fault">
<inSequence>
<property name="api.ut.backendRequestTime" expression="get-property('SYSTEM_TIME')"/>
<property name="AM_KEY_TYPE" value="PRODUCTION" scope="default"/>
<filter source="$ctx:AM_KEY_TYPE" regex="PRODUCTION">
<then>
<send>
<endpoint name="admin--Windows 8.1 Enrollment Service_APIproductionEndpoint_0">
<http uri-template="https://localhost:9443/api/device-mgt/windows/v1.0/deviceenrolment/wstep"/>
<property name="ENDPOINT_ADDRESS" value="https://localhost:9443/api/device-mgt/windows/v1.0/deviceenrolment/wstep"/>
</endpoint>
</send>
</then>
<else>
<sequence key="_sandbox_key_error_"/>
</else>
</filter>
</inSequence>
<outSequence>
<class name="org.wso2.carbon.apimgt.gateway.handlers.analytics.APIMgtResponseHandler"/>
<send/>
</outSequence>
</resource>
<handlers>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.common.APIMgtLatencyStatsHandler"/>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.security.CORSRequestHandler">
<property name="apiImplementationType" value="ENDPOINT"/>
</handler>
</handlers>
</api>

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?><api xmlns="http://ws.apache.org/ns/synapse" name="admin--Windows Discovery Service" context="/api/device-mgt/windows/v1.0/discovery/post">
<resource methods="HEAD DELETE POST GET OPTIONS PATCH PUT" url-mapping="/*" faultSequence="fault">
<inSequence>
<property name="isDefault" expression="$trp:WSO2_AM_API_DEFAULT_VERSION"/>
<filter source="$ctx:isDefault" regex="true">
<then>
<log level="custom">
<property name="STATUS" value="Faulty invoking through default API.Dropping message to avoid recursion.."/>
</log>
<payloadFactory media-type="xml">
<format>
<am:fault xmlns:am="http://wso2.org/apimanager">
<am:code>500</am:code>
<am:type>Status report</am:type>
<am:message>Internal Server Error</am:message>
<am:description>Faulty invoking through default API</am:description>
</am:fault>
</format>
<args/>
</payloadFactory>
<property name="HTTP_SC" value="500" scope="axis2"/>
<property name="RESPONSE" value="true"/>
<header name="To" action="remove"/>
<property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
<property name="ContentType" scope="axis2" action="remove"/>
<property name="Authorization" scope="transport" action="remove"/>
<property name="Host" scope="transport" action="remove"/>
<property name="Accept" scope="transport" action="remove"/>
<send/>
</then>
<else>
<header name="WSO2_AM_API_DEFAULT_VERSION" scope="transport" value="true"/>
<property name="uri.var.portnum" expression="get-property('http.nio.port')"/>
<send>
<endpoint>
<http uri-template="http://localhost:{uri.var.portnum}/api/device-mgt/windows/v1.0/discovery/post/1.0.0">
<timeout>
<duration>60000</duration>
<responseAction>fault</responseAction>
</timeout>
</http>
</endpoint>
</send>
</else>
</filter>
</inSequence>
<outSequence>
<property name="FORCE_HTTP_CONTENT_LENGTH" scope="axis2" value="true"/>
<property name="COPY_CONTENT_LENGTH_FROM_INCOMING" value="true" scope="axis2"/>
<send/>
</outSequence>
</resource>
<handlers>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.common.SynapsePropertiesHandler"/>
</handlers>
</api>

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?><api xmlns="http://ws.apache.org/ns/synapse" name="admin--Windows Discovery Service" context="/api/device-mgt/windows/v1.0/discovery/post/1.0.0" version="1.0.0" version-type="context">
<resource methods="POST" url-mapping="/*" faultSequence="fault">
<inSequence>
<property name="api.ut.backendRequestTime" expression="get-property('SYSTEM_TIME')"/>
<property name="AM_KEY_TYPE" value="PRODUCTION" scope="default"/>
<filter source="$ctx:AM_KEY_TYPE" regex="PRODUCTION">
<then>
<send>
<endpoint name="admin--Windows Discovery Service_APIproductionEndpoint_0">
<http uri-template="https://localhost:9443/api/device-mgt/windows/v1.0/discovery/post"/>
<property name="ENDPOINT_ADDRESS" value="https://localhost:9443/api/device-mgt/windows/v1.0/discovery/post"/>
</endpoint>
</send>
</then>
<else>
<sequence key="_sandbox_key_error_"/>
</else>
</filter>
</inSequence>
<outSequence>
<class name="org.wso2.carbon.apimgt.gateway.handlers.analytics.APIMgtResponseHandler"/>
<property name="FORCE_HTTP_CONTENT_LENGTH" scope="axis2" value="true"/>
<property name="COPY_CONTENT_LENGTH_FROM_INCOMING" value="true" scope="axis2"/>
<send/>
</outSequence>
</resource>
<handlers>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.common.APIMgtLatencyStatsHandler"/>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.security.CORSRequestHandler">
<property name="apiImplementationType" value="ENDPOINT"/>
</handler>
</handlers>
</api>

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?><api xmlns="http://ws.apache.org/ns/synapse" name="admin--Windows Enrollment policy Service" context="/api/device-mgt/windows/v1.0/certificatepolicy/xcep">
<resource methods="HEAD DELETE POST GET OPTIONS PATCH PUT" url-mapping="/*" faultSequence="fault">
<inSequence>
<property name="isDefault" expression="$trp:WSO2_AM_API_DEFAULT_VERSION"/>
<filter source="$ctx:isDefault" regex="true">
<then>
<log level="custom">
<property name="STATUS" value="Faulty invoking through default API.Dropping message to avoid recursion.."/>
</log>
<payloadFactory media-type="xml">
<format>
<am:fault xmlns:am="http://wso2.org/apimanager">
<am:code>500</am:code>
<am:type>Status report</am:type>
<am:message>Internal Server Error</am:message>
<am:description>Faulty invoking through default API</am:description>
</am:fault>
</format>
<args/>
</payloadFactory>
<property name="HTTP_SC" value="500" scope="axis2"/>
<property name="RESPONSE" value="true"/>
<header name="To" action="remove"/>
<property name="NO_ENTITY_BODY" scope="axis2" action="remove"/>
<property name="ContentType" scope="axis2" action="remove"/>
<property name="Authorization" scope="transport" action="remove"/>
<property name="Host" scope="transport" action="remove"/>
<property name="Accept" scope="transport" action="remove"/>
<send/>
</then>
<else>
<header name="WSO2_AM_API_DEFAULT_VERSION" scope="transport" value="true"/>
<property name="uri.var.portnum" expression="get-property('http.nio.port')"/>
<send>
<endpoint>
<http uri-template="http://localhost:{uri.var.portnum}/api/device-mgt/windows/v1.0/certificatepolicy/xcep/1.0.0">
<timeout>
<duration>60000</duration>
<responseAction>fault</responseAction>
</timeout>
</http>
</endpoint>
</send>
</else>
</filter>
</inSequence>
<outSequence>
<property name="FORCE_HTTP_CONTENT_LENGTH" scope="axis2" value="true"/>
<property name="COPY_CONTENT_LENGTH_FROM_INCOMING" value="true" scope="axis2"/>
<send/>
</outSequence>
</resource>
<handlers>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.common.SynapsePropertiesHandler"/>
</handlers>
</api>

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?><api xmlns="http://ws.apache.org/ns/synapse" name="admin--Windows Enrollment policy Service" context="/api/device-mgt/windows/v1.0/certificatepolicy/xcep/1.0.0" version="1.0.0" version-type="context">
<resource methods="POST" url-mapping="/*" faultSequence="fault">
<inSequence>
<property name="api.ut.backendRequestTime" expression="get-property('SYSTEM_TIME')"/>
<property name="AM_KEY_TYPE" value="PRODUCTION" scope="default"/>
<filter source="$ctx:AM_KEY_TYPE" regex="PRODUCTION">
<then>
<send>
<endpoint name="admin--Windows Enrollment policy Service_APIproductionEndpoint_0">
<http uri-template="https://localhost:9443/api/device-mgt/windows/v1.0/certificatepolicy/xcep"/>
<property name="ENDPOINT_ADDRESS" value="https://localhost:9443/api/device-mgt/windows/v1.0/certificatepolicy/xcep"/>
</endpoint>
</send>
</then>
<else>
<sequence key="_sandbox_key_error_"/>
</else>
</filter>
</inSequence>
<outSequence>
<class name="org.wso2.carbon.apimgt.gateway.handlers.analytics.APIMgtResponseHandler"/>
<property name="FORCE_HTTP_CONTENT_LENGTH" scope="axis2" value="true"/>
<property name="COPY_CONTENT_LENGTH_FROM_INCOMING" value="true" scope="axis2"/>
<send/>
</outSequence>
</resource>
<handlers>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.common.APIMgtLatencyStatsHandler"/>
<handler class="org.wso2.carbon.apimgt.gateway.handlers.security.CORSRequestHandler">
<property name="apiImplementationType" value="ENDPOINT"/>
</handler>
</handlers>
</api>

@ -120,6 +120,13 @@
type="application/json">
</Operation>
</Feature>
<Feature code="DEVICE_REBOOT">
<Name>Reboot</Name>
<Description>Reboot the device</Description>
<Operation context="/api/device-mgt/windows/v1.0/admin/devices/reboot" method="POST"
type="application/json">
</Operation>
</Feature>
<Feature code="DEVICE_INFO">
<Name>Device info</Name>
<Description>Request device information</Description>

@ -7,7 +7,19 @@ org.eclipse.equinox.p2.touchpoint.natives.mkdir(path:${installFolder}/../../data
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/database/,target:${installFolder}/../../database/,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.mkdir(path:${installFolder}/../../deployment/server/devicetypes/);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/devicetypes/,target:${installFolder}/../../deployment/server/devicetypes/,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/apis/admin--Windows_Discovery_Service.xml,target:${installFolder}/../../deployment/server/synapse-configs/default/api/admin--Windows_Discovery_Service.xml,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/apis/admin--Windows_Discovery_Service_v1.0.0.xml,target:${installFolder}/../../deployment/server/synapse-configs/default/api/admin--Windows_Discovery_Service_v1.0.0.xml,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/apis/admin--Windows_Enrollment_policy_Service.xml,target:${installFolder}/../../deployment/server/synapse-configs/default/api/admin--Windows_Enrollment_policy_Service.xml,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/apis/admin--Windows_Enrollment_policy_Service_v1.0.0.xml,target:${installFolder}/../../deployment/server/synapse-configs/default/api/admin--Windows_Enrollment_policy_Service_v1.0.0.xml,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/apis/admin--Windows_10_Enrollment_Service.xml,target:${installFolder}/../../deployment/server/synapse-configs/default/api/admin--Windows_10_Enrollment_Service.xml,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/apis/admin--Windows_10_Enrollment_Service_v1.0.0.xml,target:${installFolder}/../../deployment/server/synapse-configs/default/api/admin--Windows_10_Enrollment_Service_v1.0.0.xml,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/apis/admin--Windows_10_Device_management.xml,target:${installFolder}/../../deployment/server/synapse-configs/default/api/admin--Windows_10_Device_management.xml,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/apis/admin--Windows_10_Device_management_v1.0.0.xml,target:${installFolder}/../../deployment/server/synapse-configs/default/api/admin--Windows_10_Device_management_v1.0.0.xml,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/apis/admin--Windows_10_Device_management.xml,target:${installFolder}/../../deployment/server/synapse-configs/default/api/admin--Windows_10_Device_management.xml,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/apis/admin--Windows_8.1_Device_Management_Service.xml,target:${installFolder}/../../deployment/server/synapse-configs/default/api/admin--Windows_8.1_Device_Management_Service.xml,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/apis/admin--Windows_8.1_Device_Management_Service_v1.0.0.xml,target:${installFolder}/../../deployment/server/synapse-configs/default/api/admin--Windows_8.1_Device_Management_Service_v1.0.0.xml,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/apis/admin--Windows_8.1_Enrollment_Service.xml,target:${installFolder}/../../deployment/server/synapse-configs/default/api/admin--Windows_8.1_Enrollment_Service.xml,overwrite:true);\
org.eclipse.equinox.p2.touchpoint.natives.copy(source:${installFolder}/../features/org.wso2.carbon.device.mgt.mobile.windows_${feature.version}/apis/admin--Windows_8.1_Enrollment_Service_v1.0.0.xml,target:${installFolder}/../../deployment/server/synapse-configs/default/api/admin--Windows_8.1_Enrollment_Service_v1.0.0.xml,overwrite:true);\
instructions.unconfigure = \
org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../deployment/server/webapps/api#device-mgt#windows#v1.0.war);\
@ -27,5 +39,4 @@ org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../dep
org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../deployment/server/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.windows.date-range-picker);\
org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../../dbscripts/cdm/plugins/windows);\
org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../database/WSO2MobileWindows_DB.h2.db);\
org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../.
./deployment/server/devicetypes/windows.xml);\
org.eclipse.equinox.p2.touchpoint.natives.remove(path:${installFolder}/../../deployment/server/devicetypes/windows.xml);\

@ -1244,11 +1244,11 @@
<javax.ws.rs.version>1.1.1</javax.ws.rs.version>
<!-- Carbon Device Management -->
<carbon.devicemgt.version>2.0.7-SNAPSHOT</carbon.devicemgt.version>
<carbon.devicemgt.version>2.0.7</carbon.devicemgt.version>
<carbon.devicemgt.version.range>[2.0.0, 3.0.0)</carbon.devicemgt.version.range>
<!-- Carbon App Management -->
<carbon.appmgt.version>1.2.9</carbon.appmgt.version>
<carbon.appmgt.version>1.2.10</carbon.appmgt.version>
<!-- Carbon Device Management Plugins -->
<carbon.devicemgt.plugins.version>3.0.6-SNAPSHOT</carbon.devicemgt.plugins.version>

Loading…
Cancel
Save