mirror of
https://repository.entgra.net/community/device-mgt-plugins.git
synced 2025-09-16 23:42:15 +00:00
Merge branch 'release-3.0.x' of https://github.com/wso2/carbon-device-mgt-plugins into windows10
This commit is contained in:
commit
e81d2b1c20
@ -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 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 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:layout_height="100dp"
|
||||
android:layout_margin="20dp"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<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"/>
|
||||
<!--<RelativeLayout-->
|
||||
<!--android:layout_width="0dp"-->
|
||||
<!--android:layout_height="match_parent"-->
|
||||
<!--android:layout_weight="0.25"-->
|
||||
<!-->-->
|
||||
<!--<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/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.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"/>
|
||||
|
||||
<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>
|
||||
|
||||
<!--<RelativeLayout-->
|
||||
<!--android:layout_width="0dp"-->
|
||||
<!--android:layout_height="match_parent"-->
|
||||
<!--android:layout_weight="0.25"-->
|
||||
<!-->-->
|
||||
<!--<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>
|
||||
|
||||
@ -86,7 +86,7 @@
|
||||
href="{{portalUrl}}/portal/dashboards/geo-dashboard/?GLOBAL-STATE={{anchor}}">
|
||||
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-statistics fw-stack-1x"></i>
|
||||
</span> View Device Location
|
||||
</a>
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
<a class="padding-left"
|
||||
href="{{@app.context}}/device/{{device.type}}/analytics?deviceId={{device.deviceIdentifier}}&deviceName={{device.name}}">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-statistics fw-stack-1x"></i>
|
||||
</span> View Device Analytics
|
||||
</a>
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
{
|
||||
"deviceType": {
|
||||
"label": "Android Sense",
|
||||
"category": "iot"
|
||||
"category": "iot",
|
||||
"scopes" : [
|
||||
"perm:android-sense:enroll"
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -204,7 +204,7 @@
|
||||
<ul class="list-unstyled">
|
||||
<li class="padding-top-double">
|
||||
<span class="fw-stack margin-right">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
You can view all your connected devices
|
||||
@ -212,7 +212,7 @@
|
||||
</li>
|
||||
<li class="padding-top-double">
|
||||
<span class="fw-stack margin-right">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
You can select any one of your connected devices for available
|
||||
@ -220,7 +220,7 @@
|
||||
</li>
|
||||
<li class="padding-top-double">
|
||||
<span class="fw-stack margin-right">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
||||
</span> For historical analytics of sensor data navigate to device
|
||||
analytics page.
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -88,7 +88,7 @@
|
||||
href="{{portalUrl}}/portal/dashboards/geo-dashboard/?GLOBAL-STATE={{anchor}}">
|
||||
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-statistics fw-stack-1x"></i>
|
||||
</span> View Device Location
|
||||
</a>
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
<a class="padding-left"
|
||||
href="{{@app.context}}/device/{{device.type}}/analytics?deviceId={{device.deviceIdentifier}}&deviceName={{device.name}}">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-statistics fw-stack-1x"></i>
|
||||
</span> View Device Analytics
|
||||
</a>
|
||||
|
||||
@ -2,6 +2,10 @@
|
||||
"deviceType": {
|
||||
"label": "Arduino",
|
||||
"category": "iot",
|
||||
"downloadAgentUri": "arduino/device/download"
|
||||
"downloadAgentUri": "arduino/device/download",
|
||||
"category": "iot",
|
||||
"scopes" : [
|
||||
"perm:arduino:enroll"
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -239,14 +239,14 @@
|
||||
<li class="padding-top-double">
|
||||
|
||||
<span class="fw-stack margin-right">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Arduino will publish it's internal temperature to WSO2-IoT-Server
|
||||
<br/><br/>
|
||||
|
||||
<span class="fw-stack margin-right">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
LED on <i>PIN 13</i> can be controlled from Device Management page.
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -88,7 +88,7 @@
|
||||
href="{{portalUrl}}/portal/dashboards/geo-dashboard/?GLOBAL-STATE={{anchor}}">
|
||||
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-statistics fw-stack-1x"></i>
|
||||
</span> View Device Location
|
||||
</a>
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
<a class="padding-left"
|
||||
href="{{@app.context}}/device/{{device.type}}/analytics?deviceId={{device.deviceIdentifier}}&deviceName={{device.name}}">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-statistics fw-stack-1x"></i>
|
||||
</span> View Device Analytics
|
||||
</a>
|
||||
|
||||
@ -2,6 +2,9 @@
|
||||
"deviceType": {
|
||||
"label": "Raspberry Pi",
|
||||
"category": "iot",
|
||||
"downloadAgentUri": "raspberrypi/device/download"
|
||||
"downloadAgentUri": "raspberrypi/device/download",
|
||||
"scopes" : [
|
||||
"perm:raspberrypi:enroll"
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -217,7 +217,7 @@
|
||||
<li class="padding-top-double">
|
||||
|
||||
<span class="fw-stack margin-right">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
[sudo ./testAgent.sh] - Script to test agent
|
||||
@ -226,7 +226,7 @@
|
||||
<li class="padding-top-double">
|
||||
|
||||
<span class="fw-stack margin-right">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
[sudo ./startService.sh] - Use this to start
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -80,7 +80,7 @@
|
||||
<a class="padding-left"
|
||||
href="{{@app.context}}/policy/add/{{device.type}}?deviceId={{device.deviceIdentifier}}">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-policy fw-stack-1x"></i>
|
||||
</span> Add device specific policy</a>
|
||||
</div>
|
||||
|
||||
@ -31,7 +31,7 @@
|
||||
<a class="padding-left"
|
||||
href="{{@app.context}}/device/{{device.type}}/analytics?deviceId={{device.deviceIdentifier}}&deviceName={{device.name}}">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-statistics fw-stack-1x"></i>
|
||||
</span> View Device Analytics
|
||||
</a>
|
||||
|
||||
@ -3,6 +3,9 @@
|
||||
"label": "Virtual Firealarm",
|
||||
"category": "virtual",
|
||||
"downloadAgentUri": "virtual_firealarm/device/download",
|
||||
"scopes" : [
|
||||
"perm:firealarm:enroll"
|
||||
],
|
||||
"features": {
|
||||
"buzz": {
|
||||
"icon" : "fw-dial-up"
|
||||
|
||||
@ -63,7 +63,7 @@
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-raspberry fw-stack-2x"></i>
|
||||
<span class="fw-stack fw-move-right fw-move-bottom">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-circle fw-stack-2x fw-stroke text-info"></i>
|
||||
<i class="fw fw-add fw-stack-1x fw-inverse"></i>
|
||||
</span>
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -341,7 +341,7 @@
|
||||
<a class="padding-left"
|
||||
href="{{portalUrl}}/portal/dashboards/geo-dashboard/?GLOBAL-STATE={{anchor}}">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-map-location fw-stack-1x"></i>
|
||||
</span>View device on the map
|
||||
</a>
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
<a href="{{appContext}}/policy/effective-policy?type={{deviceType}}&id={{deviceId}}" class="cu-btn-inner
|
||||
policy-view-link" data-id="{{id}}">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-view fw-stack-1x"></i>
|
||||
</span>
|
||||
View
|
||||
|
||||
@ -55,7 +55,7 @@
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw {{iconFont}} fw-stack-1x"></i>
|
||||
</span>
|
||||
{{name}}
|
||||
@ -126,7 +126,7 @@
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i id="status-icon" class="fw fw-error fw-stack-1x"></i>
|
||||
</span>
|
||||
<br>
|
||||
|
||||
@ -965,7 +965,7 @@
|
||||
data-click-event="add-form">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
</span>
|
||||
|
||||
Add Application
|
||||
@ -1010,7 +1010,7 @@
|
||||
<a href="#restricted-applications-grid" class="grid-input-remove"
|
||||
data-click-event="remove-form">
|
||||
<span class="fw-stack helper" title="Remove Entry">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-delete fw-stack-1x"></i>
|
||||
</span>
|
||||
</a>
|
||||
@ -1400,7 +1400,7 @@
|
||||
data-click-event="add-form">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
</span>
|
||||
Add Application
|
||||
</a>
|
||||
@ -1446,7 +1446,7 @@
|
||||
<a href="#cosu-whitelisted-applications-grid" class="grid-input-remove"
|
||||
data-click-event="remove-form">
|
||||
<span class="fw-stack helper" title="Remove Entry">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-delete fw-stack-1x"></i>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
@ -779,13 +779,13 @@
|
||||
<!--<a href="#" class="multi-view add enabled">-->
|
||||
<!--<span class="icon fw-stack">-->
|
||||
<!--<i class="fw fw-add fw-stack-1x"></i>-->
|
||||
<!--<i class="fw fw-ring fw-stack-2x"></i>-->
|
||||
<!--<i class="fw fw-circle-outline fw-stack-2x"></i>-->
|
||||
<!--</span>-->
|
||||
<!--</a>-->
|
||||
<!--<a href="#" class="multi-view remove disabled">-->
|
||||
<!--<span class="icon fw-stack">-->
|
||||
<!--<i class="fw fw-minus fw-stack-1x"></i>-->
|
||||
<!--<i class="fw fw-ring fw-stack-2x"></i>-->
|
||||
<!--<i class="fw fw-circle-outline fw-stack-2x"></i>-->
|
||||
<!--</span>-->
|
||||
<!--</a>-->
|
||||
<!--Wi-Fi Setting :-->
|
||||
@ -964,7 +964,7 @@
|
||||
data-click-event="add-form">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
</span>
|
||||
|
||||
Add Application
|
||||
@ -1009,7 +1009,7 @@
|
||||
<a href="#restricted-applications-grid" class="grid-input-remove"
|
||||
data-click-event="remove-form">
|
||||
<span class="fw-stack helper" title="Remove Entry">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-delete fw-stack-1x"></i>
|
||||
</span>
|
||||
</a>
|
||||
@ -1511,7 +1511,7 @@
|
||||
data-click-event="add-form">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
</span>
|
||||
|
||||
Add Application
|
||||
@ -1558,7 +1558,7 @@
|
||||
<a href="#cosu-whitelisted-applications-grid" class="grid-input-remove"
|
||||
data-click-event="remove-form">
|
||||
<span class="fw-stack helper" title="Remove Entry">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-delete fw-stack-1x"></i>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
@ -965,7 +965,7 @@
|
||||
data-click-event="add-form">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
</span>
|
||||
|
||||
Add Application
|
||||
@ -1010,7 +1010,7 @@
|
||||
<a href="#restricted-applications-grid" class="grid-input-remove"
|
||||
data-click-event="remove-form">
|
||||
<span class="fw-stack helper" title="Remove Entry">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-delete fw-stack-1x"></i>
|
||||
</span>
|
||||
</a>
|
||||
@ -1400,7 +1400,7 @@
|
||||
data-click-event="add-form">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
</span>
|
||||
Add Application
|
||||
</a>
|
||||
@ -1446,7 +1446,7 @@
|
||||
<a href="#cosu-whitelisted-applications-grid" class="grid-input-remove"
|
||||
data-click-event="remove-form">
|
||||
<span class="fw-stack helper" title="Remove Entry">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-delete fw-stack-1x"></i>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
@ -4,6 +4,9 @@
|
||||
"category": "mobile",
|
||||
"analyticsEnabled": "false",
|
||||
"groupingEnabled": "false",
|
||||
"scopes" : [
|
||||
"perm:android:enroll"
|
||||
],
|
||||
"features": {
|
||||
"DEVICE_RING": {
|
||||
"icon": "fw-dial-up",
|
||||
|
||||
@ -24,7 +24,7 @@
|
||||
{{#defineZone "toggleMenuRight-icon"}}
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-settings fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
</span>
|
||||
{{/defineZone}}
|
||||
</a>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 337 KiB After Width: | Height: | Size: 385 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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>
|
||||
|
||||
@ -47,7 +47,7 @@
|
||||
<span class="list-group-item-actions">
|
||||
<a href="{{appContext}}/policy/effective-policy?type={{deviceType}}&id={{deviceId}}" class="cu-btn-inner policy-view-link" data-id="{{id}}">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-view fw-stack-1x"></i>
|
||||
</span>
|
||||
View
|
||||
|
||||
@ -55,7 +55,7 @@
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw {{iconFont}} fw-stack-1x"></i>
|
||||
</span>
|
||||
{{name}}
|
||||
@ -126,7 +126,7 @@
|
||||
<div class="col-lg-5 col-md-6 col-centered">
|
||||
<h3>
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i id="status-icon" class="fw fw-error fw-stack-1x"></i>
|
||||
</span>
|
||||
<br>
|
||||
|
||||
@ -35,7 +35,7 @@
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#enableEncryptionTab"
|
||||
aria-expanded="true" aria-controls="enableEncryptionTab">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Encryption Enable/Disable
|
||||
@ -61,7 +61,7 @@
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#passCodePolicy" aria-expanded="false"
|
||||
aria-controls="passCodePolicy" class="collapsed">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Passcode Policy
|
||||
@ -155,7 +155,7 @@
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#installApp" aria-expanded="true"
|
||||
aria-controls="installApp">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Install App
|
||||
@ -198,7 +198,7 @@
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#installWebClip" aria-expanded="true"
|
||||
aria-controls="installWebClip" class="collapsed">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Install Web Clip
|
||||
@ -230,7 +230,7 @@
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#uninstallApp" aria-expanded="true"
|
||||
aria-controls="uninstallApp" class="collapsed">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Uninstall App
|
||||
@ -260,7 +260,7 @@
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#cameraDisable" aria-expanded="true"
|
||||
aria-controls="cameraDisable">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Camera Enable/Disable
|
||||
|
||||
@ -40,7 +40,7 @@
|
||||
<h2 class="sub-title panel-title">
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#installPublicAppiOS" aria-expanded="true" aria-controls="installPublicAppiOS">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Install Public App
|
||||
@ -84,7 +84,7 @@
|
||||
<h2 class="sub-title panel-title">
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#installEnterpriseAppiOS" aria-expanded="true" aria-controls="installPublicAppiOS" class="collapsed">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Install Enterprise App
|
||||
@ -127,7 +127,7 @@
|
||||
<h2 class="sub-title panel-title">
|
||||
<a data-toggle="collapse" data-parent="#accordion" href="#removeApplication" aria-expanded="true" aria-controls="removeApplication" class="collapsed">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-arrow fw-down-arrow fw-stack-1x"></i>
|
||||
</span>
|
||||
Uninstall App
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="modal-header">
|
||||
<h3 class="pull-left modal-title">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-error fw-stack-1x"></i>
|
||||
</span>
|
||||
Operation cannot be performed !
|
||||
@ -24,7 +24,7 @@
|
||||
<div class="modal-header">
|
||||
<h3 class="pull-left modal-title">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-error fw-stack-1x"></i>
|
||||
</span>
|
||||
Operation cannot be performed !
|
||||
@ -46,7 +46,7 @@
|
||||
<div class="modal-header">
|
||||
<h3 class="pull-left modal-title">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-check fw-stack-1x"></i>
|
||||
</span>
|
||||
Operation queued successfully !
|
||||
@ -69,7 +69,7 @@
|
||||
<div class="modal-header">
|
||||
<h3 class="pull-left modal-title">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-check fw-stack-1x"></i>
|
||||
</span>
|
||||
Message sent successfully !
|
||||
@ -96,7 +96,7 @@
|
||||
<div class="modal-header">
|
||||
<h3 class="pull-left modal-title">
|
||||
<span class="fw-stack">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw {{icon}} fw-stack-1x"></i>
|
||||
</span>
|
||||
{{name}}
|
||||
|
||||
@ -338,7 +338,7 @@
|
||||
data-click-event="add-form">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
</span>
|
||||
Add Application
|
||||
</a>
|
||||
@ -384,7 +384,7 @@
|
||||
<a href="#restricted-applications-grid" class="grid-input-remove"
|
||||
data-click-event="remove-form">
|
||||
<span class="fw-stack helper" title="Remove Entry">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-delete fw-stack-1x"></i>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
@ -342,7 +342,7 @@
|
||||
data-click-event="add-form">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
</span>
|
||||
|
||||
Add Application
|
||||
@ -389,7 +389,7 @@
|
||||
<a href="#restricted-applications-grid" class="grid-input-remove"
|
||||
data-click-event="remove-form">
|
||||
<span class="fw-stack helper" title="Remove Entry">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-delete fw-stack-1x"></i>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
@ -338,7 +338,7 @@
|
||||
data-click-event="add-form">
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-add fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
</span>
|
||||
Add Application
|
||||
</a>
|
||||
@ -384,7 +384,7 @@
|
||||
<a href="#restricted-applications-grid" class="grid-input-remove"
|
||||
data-click-event="remove-form">
|
||||
<span class="fw-stack helper" title="Remove Entry">
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
<i class="fw fw-delete fw-stack-1x"></i>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
@ -2,6 +2,9 @@
|
||||
"deviceType": {
|
||||
"label": "Windows",
|
||||
"category": "mobile",
|
||||
"scopes" : [
|
||||
"perm:windows:enroll"
|
||||
],
|
||||
"analyticsEnabled": "false",
|
||||
"groupingEnabled": "false",
|
||||
"features": {
|
||||
|
||||
@ -24,7 +24,7 @@
|
||||
{{#defineZone "toggleMenuRight-icon"}}
|
||||
<span class="icon fw-stack">
|
||||
<i class="fw fw-settings fw-stack-1x"></i>
|
||||
<i class="fw fw-ring fw-stack-2x"></i>
|
||||
<i class="fw fw-circle-outline fw-stack-2x"></i>
|
||||
</span>
|
||||
{{/defineZone}}
|
||||
</a>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 337 KiB After Width: | Height: | Size: 385 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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>
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user