forked from community/product-iots
commit
d74ad8a76a
@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright (c) 2017, 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.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>org.wso2.iot</groupId>
|
||||
<artifactId>wso2iot-core-scripts</artifactId>
|
||||
<version>3.1.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.wso2.iot</groupId>
|
||||
<artifactId>mobile-qsg</artifactId>
|
||||
<version>3.1.0-SNAPSHOT</version>
|
||||
<name>WSO2 IoTs QSG Script</name>
|
||||
<description>This includes the tools for IoTs Quick Start Guide</description>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<configuration>
|
||||
<descriptorRefs>
|
||||
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||
</descriptorRefs>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
<appendAssemblyId>false</appendAssemblyId>
|
||||
<archive>
|
||||
<manifest>
|
||||
<addClasspath>true</addClasspath>
|
||||
<classpathPrefix>lib/</classpathPrefix>
|
||||
<mainClass>org.wso2.mdm.qsg.QSGExecutor</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
<finalName>${project.artifactId}</finalName>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpclient</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents.wso2</groupId>
|
||||
<artifactId>httpcore</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.googlecode.json-simple.wso2</groupId>
|
||||
<artifactId>json-simple</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.httpcomponents</groupId>
|
||||
<artifactId>httpmime</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -0,0 +1,10 @@
|
||||
IoTs 3.0.0 QSG Setup guide
|
||||
|
||||
1. Navigate to this folder using the terminal, Note that this (Readme.txt) flie should be located under <IoTS_HOME>/core/samples/mobile-qsg/ directory.
|
||||
2. Stop the WSO2 IoTS if already runing
|
||||
3. Then execute the copy-files.sh script
|
||||
4. Start the WSO2 IoTS server
|
||||
5. Once server is started execute the mobile-qsg.sh script
|
||||
6. Then login to the https://<your-server>:9443/devicemgt/ and use the username,password as alex alex@IoTS, Note that for this sample we have configured above user from the script. If you want to run this script again you have to login as admin and remove the user alex, chris and role iotMobileUser from the IoT Server.
|
||||
|
||||
|
@ -0,0 +1,5 @@
|
||||
dcr-endpoint=https://localhost:9443/dynamic-client-web/register
|
||||
oauth-endpoint=https://localhost:9443/oauth2/token
|
||||
emm-host=https://localhost:9443
|
||||
username=admin
|
||||
password=admin
|
@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
# product-emm qsg sample setup script for copying the required files
|
||||
|
||||
echo "Copying the required files for wso2iots-3.0.0 QSG setup ..."
|
||||
cp dropings/* ../../repository/components/dropins/
|
||||
cp webapps/* ../../repository/deployment/server/webapps/
|
||||
|
||||
|
@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
# product-iots qsg sample setup script
|
||||
|
||||
echo "Starting wso2iots-3.0.0 QSG setup ..."
|
||||
java -jar "mobile-qsg.jar"
|
||||
echo "wso2iots-3.0.0 QSG setup completed."
|
Binary file not shown.
@ -0,0 +1,194 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 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.mdm.qsg;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.json.simple.parser.ParseException;
|
||||
import org.wso2.mdm.qsg.dto.EMMQSGConfig;
|
||||
import org.wso2.mdm.qsg.dto.HTTPResponse;
|
||||
import org.wso2.mdm.qsg.dto.MobileApplication;
|
||||
import org.wso2.mdm.qsg.utils.Constants;
|
||||
import org.wso2.mdm.qsg.utils.HTTPInvoker;
|
||||
import org.wso2.mdm.qsg.utils.QSGUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* This class holds the app-mgt related operations.
|
||||
*/
|
||||
public class AppOperations {
|
||||
|
||||
private static String appmPublisherMobileBinariesUrl = "/api/appm/publisher/v1.1/apps/mobile/binaries";
|
||||
private static String appmPublisherResourcesUrl = "/api/appm/publisher/v1.1/apps/static-contents?appType=mobileapp";
|
||||
private static String appmPublisherAppsUrl = "/api/appm/publisher/v1.1/apps/mobileapp";
|
||||
|
||||
|
||||
public static MobileApplication uploadApplication(String platform, String appName, String appContentType) {
|
||||
|
||||
String appUploadEndpoint = EMMQSGConfig.getInstance().getEmmHost() + appmPublisherMobileBinariesUrl;
|
||||
String filePath = "apps" + File.separator + platform + File.separator + appName;
|
||||
HTTPResponse httpResponse = HTTPInvoker.uploadFile(appUploadEndpoint, filePath, appContentType);
|
||||
if (Constants.HTTPStatus.OK == httpResponse.getResponseCode()) {
|
||||
JSONObject appMeta = null;
|
||||
MobileApplication application = new MobileApplication();
|
||||
try {
|
||||
appMeta = (JSONObject) new JSONParser().parse(httpResponse.getResponse());
|
||||
application.setPackageId((String) appMeta.get("package"));
|
||||
application.setAppId(QSGUtils.getResourceId((String) appMeta.get("path")));
|
||||
application.setVersion((String) appMeta.get("version"));
|
||||
application.setPlatform(platform);
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return application;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static MobileApplication getPublicApplication(String packageId, String version, String platform) {
|
||||
MobileApplication application = new MobileApplication();
|
||||
application.setVersion(version);
|
||||
application.setPackageId(packageId);
|
||||
application.setPlatform(platform);
|
||||
return application;
|
||||
}
|
||||
|
||||
private static String uploadAsset(String path) {
|
||||
|
||||
String resUploadEndpoint = EMMQSGConfig.getInstance().getEmmHost() + appmPublisherResourcesUrl;
|
||||
HTTPResponse httpResponse = HTTPInvoker.uploadFile(resUploadEndpoint, path, "image/jpeg");
|
||||
if (Constants.HTTPStatus.OK == httpResponse.getResponseCode()) {
|
||||
JSONObject resp = null;
|
||||
try {
|
||||
resp = (JSONObject) new JSONParser().parse(httpResponse.getResponse());
|
||||
return (String) resp.get("id");
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static MobileApplication uploadAssets(String platform, MobileApplication application) {
|
||||
|
||||
String assetDir = "apps" + File.separator + platform + File.separator + "images";
|
||||
//Upload the icon file
|
||||
String imgFile = assetDir + File.separator + "icon.jpg";
|
||||
String uploadPath = uploadAsset(imgFile);
|
||||
if (uploadPath != null && !uploadPath.isEmpty()) {
|
||||
application.setIcon(uploadPath);
|
||||
} else {
|
||||
System.out.println("Unable to upload the app icon file.");
|
||||
return null;
|
||||
}
|
||||
|
||||
//Upload the banner file
|
||||
imgFile = assetDir + File.separator + "banner.jpg";
|
||||
uploadPath = uploadAsset(imgFile);
|
||||
if (uploadPath != null && !uploadPath.isEmpty()) {
|
||||
application.setBanner(uploadPath);
|
||||
} else {
|
||||
System.out.println("Unable to upload the app banner file.");
|
||||
return null;
|
||||
}
|
||||
|
||||
//Upload the screenshot1 file
|
||||
imgFile = assetDir + File.separator + "screen1.jpg";
|
||||
uploadPath = uploadAsset(imgFile);
|
||||
if (uploadPath != null && !uploadPath.isEmpty()) {
|
||||
application.setScreenshot1(uploadPath);
|
||||
} else {
|
||||
System.out.println("Unable to upload the app screenshot1 file.");
|
||||
return null;
|
||||
}
|
||||
|
||||
//Upload the screenshot2 file
|
||||
imgFile = assetDir + File.separator + "screen2.jpg";
|
||||
uploadPath = uploadAsset(imgFile);
|
||||
if (uploadPath != null && !uploadPath.isEmpty()) {
|
||||
application.setScreenshot2(uploadPath);
|
||||
} else {
|
||||
System.out.println("Unable to upload the app screenshot2 file.");
|
||||
return null;
|
||||
}
|
||||
|
||||
//Upload the screenshot3 file
|
||||
imgFile = assetDir + File.separator + "screen3.jpg";
|
||||
uploadPath = uploadAsset(imgFile);
|
||||
if (uploadPath != null && !uploadPath.isEmpty()) {
|
||||
application.setScreenshot3(uploadPath);
|
||||
} else {
|
||||
System.out.println("Unable to upload the app screenshot3 file.");
|
||||
return null;
|
||||
}
|
||||
return application;
|
||||
}
|
||||
|
||||
public static boolean addApplication(String name, MobileApplication mblApp, boolean isEnterpriseApp) {
|
||||
HashMap<String, String> headers = new HashMap<String, String>();
|
||||
|
||||
String appEndpoint = EMMQSGConfig.getInstance().getEmmHost() + appmPublisherAppsUrl;
|
||||
//Set the application payload
|
||||
JSONObject application = new JSONObject();
|
||||
application.put("name", name);
|
||||
application.put("description", "Sample application");
|
||||
application.put("type", "enterprise");
|
||||
//Set appMeta data
|
||||
JSONObject appMeta = new JSONObject();
|
||||
appMeta.put("package", mblApp.getPackageId());
|
||||
appMeta.put("version", mblApp.getVersion());
|
||||
if (isEnterpriseApp) {
|
||||
application.put("marketType", "enterprise");
|
||||
appMeta.put("path", mblApp.getAppId());
|
||||
} else {
|
||||
application.put("marketType", "public");
|
||||
}
|
||||
application.put("provider", "admin");
|
||||
application.put("displayName", name);
|
||||
application.put("category", "Business");
|
||||
application.put("thumbnailUrl", mblApp.getIcon());
|
||||
application.put("version", mblApp.getVersion());
|
||||
application.put("banner", mblApp.getBanner());
|
||||
application.put("platform", mblApp.getPlatform());
|
||||
application.put("appType", mblApp.getPlatform());
|
||||
//application.put("appUrL", mblApp.getAppId());
|
||||
application.put("mediaType", "application/vnd.wso2-mobileapp+xml");
|
||||
|
||||
//Set screenshots
|
||||
JSONArray screenshots = new JSONArray();
|
||||
screenshots.add(mblApp.getScreenshot1());
|
||||
screenshots.add(mblApp.getScreenshot2());
|
||||
screenshots.add(mblApp.getScreenshot3());
|
||||
application.put("appmeta", appMeta);
|
||||
application.put("screenshots", screenshots);
|
||||
|
||||
//Set the headers
|
||||
headers.put(Constants.Header.CONTENT_TYPE, Constants.ContentType.APPLICATION_JSON);
|
||||
HTTPResponse
|
||||
httpResponse =
|
||||
HTTPInvoker.sendHTTPPostWithOAuthSecurity(appEndpoint, application.toJSONString(), headers);
|
||||
if (Constants.HTTPStatus.OK == httpResponse.getResponseCode()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 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.mdm.qsg;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.wso2.mdm.qsg.dto.EMMQSGConfig;
|
||||
import org.wso2.mdm.qsg.dto.HTTPResponse;
|
||||
import org.wso2.mdm.qsg.utils.Constants;
|
||||
import org.wso2.mdm.qsg.utils.HTTPInvoker;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* This class holds the methods to create policies.
|
||||
*/
|
||||
public class PolicyOperations {
|
||||
|
||||
public static boolean createPasscodePolicy(String policyName, String deviceType) {
|
||||
HashMap<String, String> headers = new HashMap<String, String>();
|
||||
String policyEndpoint = EMMQSGConfig.getInstance().getEmmHost() + "/api/device-mgt/v1.0/policies";
|
||||
//Set the policy payload
|
||||
JSONObject policyData = new JSONObject();
|
||||
policyData.put("policyName", policyName);
|
||||
policyData.put("description", "Passcode Policy");
|
||||
policyData.put("compliance", "enforce");
|
||||
policyData.put("ownershipType", "ANY");
|
||||
policyData.put("active", false);
|
||||
JSONObject profile = new JSONObject();
|
||||
profile.put("profileName", "passcode");
|
||||
profile.put("deviceType", deviceType);
|
||||
JSONArray featureList = new JSONArray();
|
||||
JSONObject feature = new JSONObject();
|
||||
feature.put("featureCode", "PASSCODE_POLICY");
|
||||
feature.put("deviceType", deviceType);
|
||||
JSONObject featureContent = new JSONObject();
|
||||
featureContent.put("allowSimple", false);
|
||||
featureContent.put("requireAlphanumeric", true);
|
||||
featureContent.put("minLength", "5");
|
||||
featureContent.put("minComplexChars", "2");
|
||||
featureContent.put("maxPINAgeInDays", 7);
|
||||
featureContent.put("pinHistory", 7);
|
||||
featureContent.put("maxFailedAttempts", null);
|
||||
feature.put("content", featureContent);
|
||||
featureList.add(feature);
|
||||
profile.put("profileFeaturesList", featureList);
|
||||
JSONArray roles = new JSONArray();
|
||||
roles.add(Constants.EMM_USER_ROLE);
|
||||
policyData.put("profile", profile);
|
||||
policyData.put("roles", roles);
|
||||
//Set the headers
|
||||
headers.put(Constants.Header.CONTENT_TYPE, Constants.ContentType.APPLICATION_JSON);
|
||||
HTTPResponse
|
||||
httpResponse = HTTPInvoker
|
||||
.sendHTTPPostWithOAuthSecurity(policyEndpoint, policyData.toJSONString(), headers);
|
||||
if (httpResponse.getResponseCode() == Constants.HTTPStatus.CREATED) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
@ -0,0 +1,171 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 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.mdm.qsg;
|
||||
|
||||
import org.wso2.mdm.qsg.dto.MobileApplication;
|
||||
import org.wso2.mdm.qsg.utils.Constants;
|
||||
import org.wso2.mdm.qsg.utils.HTTPInvoker;
|
||||
import org.wso2.mdm.qsg.utils.QSGUtils;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Main class of EMM-QSG module. This class will populate each sample scenario.
|
||||
*/
|
||||
public class QSGExecutor {
|
||||
|
||||
private static String iotAdminUser= "chris";
|
||||
private static String iotAdminPassword = "chrisadmin";
|
||||
private static String iotAdminEmail = "chris@mobx.com";
|
||||
|
||||
private static String iotMobileUser = "alex";
|
||||
private static String iotMobileUserPassword = "alexuser";
|
||||
private static String roleName = "iotMobileUser";
|
||||
|
||||
public static void main(String[] args) {
|
||||
boolean status = false;
|
||||
|
||||
// prompt for the user's name
|
||||
/*
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
System.out.print("Enter your email address and press enter : ");
|
||||
String email = scanner.next();
|
||||
if (!QSGUtils.isValidEmailAddress(email)) {
|
||||
do {
|
||||
System.out.print("Please enter a valid email address and press enter : ");
|
||||
email = scanner.next();
|
||||
} while (!QSGUtils.isValidEmailAddress(email));
|
||||
}
|
||||
*/
|
||||
String email = "alex@example.com";
|
||||
|
||||
//Setup the OAuth token
|
||||
String token = QSGUtils.getOAuthToken();
|
||||
if (token == null) {
|
||||
System.out.println("Unable to get the OAuth token. Please check the config.properties file.");
|
||||
System.exit(0);
|
||||
}
|
||||
HTTPInvoker.oAuthToken = token;
|
||||
//Creates the admin user
|
||||
|
||||
System.out.println("Creating users ");
|
||||
status = UserOperations.createUser(iotAdminUser, iotAdminEmail, true);
|
||||
if (!status) {
|
||||
System.out.println("Unable to create the admin user. Please check the config.properties file.");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
status = UserOperations.changePassword(iotAdminUser, iotAdminPassword);
|
||||
if (!status) {
|
||||
System.out.println("Unable to change the password of the admin user. Terminating the IoTS QSG now.");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
//Creates the emm user
|
||||
|
||||
status = UserOperations.createUser(iotMobileUser, email, false);
|
||||
if (!status) {
|
||||
System.out.println("Unable to create the iot user ryan. Terminating the IoTS QSG now.");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
status = UserOperations.changePassword(iotMobileUser, iotMobileUserPassword);
|
||||
if (!status) {
|
||||
System.out.println("Unable to change the password of the iot user. Terminating the IoTS QSG now.");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
//Creates the emm-user role
|
||||
System.out.println("Creating iotMobileUser role");
|
||||
status = UserOperations.createRole(roleName, new String[] {iotMobileUser});
|
||||
if (!status) {
|
||||
System.out.println("Unable to create the emm user role. Terminating the IoTs QSG now.");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
System.out.println("Adding sample policies ");
|
||||
//Add the android policy
|
||||
status = PolicyOperations.createPasscodePolicy("android-passcode-policy1", Constants.DeviceType.ANDROID);
|
||||
if (!status) {
|
||||
System.out.println("Unable to create the android passcode policy. Terminating the IoTS QSG now.");
|
||||
System.exit(0);
|
||||
}
|
||||
//Add the windows policy
|
||||
status = PolicyOperations.createPasscodePolicy("windows-passcode-policy1", Constants.DeviceType.WINDOWS);
|
||||
if (!status) {
|
||||
System.out.println("Unable to create the windows passcode policy. Terminating the IoTS QSG now.");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
|
||||
System.out.println("Upload the android application ");
|
||||
//Upload the android application
|
||||
MobileApplication application = AppOperations.uploadApplication(Constants.DeviceType.ANDROID, "catalog.apk",
|
||||
"application/vnd.android.package-archive");
|
||||
if (application == null) {
|
||||
System.out.println("Unable to upload the sample android application. Terminating the IoTS QSG now.");
|
||||
System.exit(0);
|
||||
}
|
||||
//Upload the assets
|
||||
application = AppOperations.uploadAssets(Constants.DeviceType.ANDROID, application);
|
||||
if (application == null) {
|
||||
System.out.println(
|
||||
"Unable to upload the assets for sample android application. Terminating the IoTS QSG now.");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
System.out.println("Create the android application ");
|
||||
//Create application entry in publisher
|
||||
status = AppOperations.addApplication("Catalog", application, true);
|
||||
if (!status) {
|
||||
System.out.println("Unable to create the android mobile application. Terminating the IoTS QSG now.");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
|
||||
System.out.println("Upload the iOS application ");
|
||||
//Add the iOS policy
|
||||
status = PolicyOperations.createPasscodePolicy("ios-passcode-policy1", Constants.DeviceType.IOS);
|
||||
if (!status) {
|
||||
System.out.println("Unable to create the ios passcode policy. Terminating the IoTS QSG now.");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
//Upload the ios application
|
||||
MobileApplication iOSApplication = AppOperations.uploadApplication(Constants.DeviceType.IOS, "PNDemo.ipa","application/octet-stream");
|
||||
iOSApplication.setVersion("1.0.0");
|
||||
//Upload the assets
|
||||
iOSApplication = AppOperations.uploadAssets(Constants.DeviceType.IOS, iOSApplication);
|
||||
if (iOSApplication == null) {
|
||||
System.out.println(
|
||||
"Unable to upload the assets for sample iOS application. Terminating the IoTS QSG now.");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
System.out.println("Create the iOS application ");
|
||||
//Create application entry in publisher
|
||||
status = AppOperations.addApplication("WSO2Con", iOSApplication, true);
|
||||
if (!status) {
|
||||
System.out.println("Unable to create the iOS mobile application. Terminating the IoTS QSG now.");
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
System.out.println("Exit");
|
||||
}
|
||||
}
|
@ -0,0 +1,189 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 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.mdm.qsg;
|
||||
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.wso2.mdm.qsg.dto.EMMQSGConfig;
|
||||
import org.wso2.mdm.qsg.dto.HTTPResponse;
|
||||
import org.wso2.mdm.qsg.utils.Constants;
|
||||
import org.wso2.mdm.qsg.utils.HTTPInvoker;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* This class holds the user-mgt related operations like user-create, role-create and change-password.
|
||||
*/
|
||||
public class UserOperations {
|
||||
|
||||
public static boolean createUser(String username, String email, boolean isAdmin) {
|
||||
HashMap<String, String> headers = new HashMap<String, String>();
|
||||
String userEndpoint = EMMQSGConfig.getInstance().getEmmHost() + "/api/device-mgt/v1.0/users";
|
||||
//Set the user payload
|
||||
JSONObject userData = new JSONObject();
|
||||
userData.put("username", username);
|
||||
userData.put("emailAddress", email);
|
||||
JSONArray roles = new JSONArray();
|
||||
if (isAdmin) {
|
||||
roles.add("admin");
|
||||
userData.put("firstname", "Chris");
|
||||
userData.put("lastname", "Admin");
|
||||
} else {
|
||||
userData.put("password", "kimemmtrial");
|
||||
userData.put("firstname", "Alex");
|
||||
userData.put("lastname", "User");
|
||||
}
|
||||
userData.put("roles", roles);
|
||||
//Set the headers
|
||||
headers.put(Constants.Header.CONTENT_TYPE, Constants.ContentType.APPLICATION_JSON);
|
||||
HTTPResponse httpResponse = HTTPInvoker
|
||||
.sendHTTPPostWithOAuthSecurity(userEndpoint, userData.toJSONString(), headers);
|
||||
if (httpResponse.getResponseCode() == Constants.HTTPStatus.CREATED) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean changePassword(String username, String pwd) {
|
||||
HashMap<String, String> headers = new HashMap<String, String>();
|
||||
String pwdEndpoint =
|
||||
EMMQSGConfig.getInstance().getEmmHost() + "/api/device-mgt/v1.0/admin/users/" + username + "/credentials";
|
||||
//Set the password payload
|
||||
JSONObject pwdData = new JSONObject();
|
||||
pwdData.put("newPassword", pwd);
|
||||
|
||||
//Set the headers
|
||||
headers.put(Constants.Header.CONTENT_TYPE, Constants.ContentType.APPLICATION_JSON);
|
||||
HTTPResponse httpResponse =
|
||||
HTTPInvoker.sendHTTPPostWithOAuthSecurity(pwdEndpoint, pwdData.toJSONString(), headers);
|
||||
if (httpResponse.getResponseCode() == Constants.HTTPStatus.OK) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static String[] getUserPermissions() {
|
||||
String permissions = "/permission/admin/device-mgt/certificates/manage," +
|
||||
"/permission/admin/device-mgt/certificates/view," +
|
||||
"/permission/admin/device-mgt/configurations/view," +
|
||||
"/permission/admin/device-mgt/api," +
|
||||
"/permission/admin/device-mgt/devices/enroll," +
|
||||
"/permission/admin/device-mgt/devices/disenroll," +
|
||||
"/permission/admin/device-mgt/devices/enroll/android," +
|
||||
"/permission/admin/device-mgt/devices/enroll/ios," +
|
||||
"/permission/admin/device-mgt/devices/owning-device," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/view," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/applications," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/blacklist-app," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/camera," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/change-lock-code," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/clear-password," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/encrypt," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/enterprise-wipe," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/info," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/install-app," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/location," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/lock," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/logcat," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/mute," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/password-policy," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/ring," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/reboot," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/send-notification," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/uninstall-app," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/update-app," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/unlock," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/upgrade," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/vpn," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/webclip," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/wifi," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/android/wipe," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/airplay," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/apn," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/app-list," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/app-lock," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/app-to-per-app-vpn," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/cal-subscription," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/caldav," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/cellular," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/clear-passcode," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/device-info," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/email," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/enterprise-app," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/enterprise-wipe," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/get-restrictions," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/ldap," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/location," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/lock," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/notification," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/passcode-policy," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/per-app-vpn," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/profile-list," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/remove-app," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/remove-profile," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/restriction," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/ring," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/store-app," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/vpn," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/webclip," +
|
||||
"/permission/admin/device-mgt/devices/owning-device/operations/ios/wifi," +
|
||||
"/permission/admin/device-mgt/notifications/view," +
|
||||
"/permission/admin/device-mgt/platform-configurations/view," +
|
||||
"/permission/admin/device-mgt/policies/view," +
|
||||
"/permission/admin/device-mgt/applications/manage," +
|
||||
"/permission/admin/manage/mobileapp/create," +
|
||||
"/permission/admin/manage/mobileapp/install," +
|
||||
"/permission/admin/manage/resources/browse," +
|
||||
"/permission/admin/manage/webapp/subscribe," +
|
||||
"/permission/admin/manage/search/advanced-search," +
|
||||
"/permission/admin/manage/search/resources," +
|
||||
"/permission/admin/manage/resources/govern/mobileapp/list," +
|
||||
"/permission/admin/login";
|
||||
return permissions.split(",");
|
||||
}
|
||||
|
||||
public static boolean createRole(String roleName, String[] users) {
|
||||
HashMap<String, String> headers = new HashMap<String, String>();
|
||||
String roleEndpoint = EMMQSGConfig.getInstance().getEmmHost() + "/api/device-mgt/v1.0/roles";
|
||||
//Set the role payload
|
||||
JSONObject roleData = new JSONObject();
|
||||
roleData.put("roleName", roleName);
|
||||
JSONArray perms = new JSONArray();
|
||||
String[] permissions = getUserPermissions();
|
||||
for (String perm : permissions) {
|
||||
perms.add(perm);
|
||||
}
|
||||
roleData.put("permissions", perms);
|
||||
JSONArray usrs = new JSONArray();
|
||||
for (String usr : users) {
|
||||
usrs.add(usr);
|
||||
}
|
||||
roleData.put("permissions", perms);
|
||||
roleData.put("users", usrs);
|
||||
//Set the headers
|
||||
headers.put(Constants.Header.CONTENT_TYPE, Constants.ContentType.APPLICATION_JSON);
|
||||
HTTPResponse httpResponse =
|
||||
HTTPInvoker.sendHTTPPostWithOAuthSecurity(roleEndpoint, roleData.toJSONString(), headers);
|
||||
if (httpResponse.getResponseCode() == Constants.HTTPStatus.CREATED) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 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.mdm.qsg.dto;
|
||||
|
||||
/**
|
||||
* This holds the domain-model of client-credentials.
|
||||
*/
|
||||
public class ClientCredentials {
|
||||
|
||||
private String clientKey;
|
||||
private String clientSecret;
|
||||
|
||||
public String getClientKey() {
|
||||
return clientKey;
|
||||
}
|
||||
|
||||
public void setClientKey(String clientKey) {
|
||||
this.clientKey = clientKey;
|
||||
}
|
||||
|
||||
public String getClientSecret() {
|
||||
return clientSecret;
|
||||
}
|
||||
|
||||
public void setClientSecret(String clientSecret) {
|
||||
this.clientSecret = clientSecret;
|
||||
}
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 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.mdm.qsg.dto;
|
||||
|
||||
/**
|
||||
* This holds the model object of EMM configuration.
|
||||
*/
|
||||
public class EMMQSGConfig {
|
||||
|
||||
private String dcrEndPoint;
|
||||
private String oauthEndPoint;
|
||||
private String emmHost;
|
||||
private String username;
|
||||
private String password;
|
||||
private static EMMQSGConfig instance = new EMMQSGConfig();
|
||||
|
||||
private EMMQSGConfig() {
|
||||
|
||||
}
|
||||
|
||||
public String getDcrEndPoint() {
|
||||
return dcrEndPoint;
|
||||
}
|
||||
|
||||
public void setDcrEndPoint(String dcrEndPoint) {
|
||||
this.dcrEndPoint = dcrEndPoint;
|
||||
}
|
||||
|
||||
public String getOauthEndPoint() {
|
||||
return oauthEndPoint;
|
||||
}
|
||||
|
||||
public void setOauthEndPoint(String oauthEndPoint) {
|
||||
this.oauthEndPoint = oauthEndPoint;
|
||||
}
|
||||
|
||||
public String getEmmHost() {
|
||||
return emmHost;
|
||||
}
|
||||
|
||||
public void setEmmHost(String emmHost) {
|
||||
this.emmHost = emmHost;
|
||||
}
|
||||
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public static EMMQSGConfig getInstance() {
|
||||
return instance;
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 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.mdm.qsg.dto;
|
||||
|
||||
/**
|
||||
* This holds the domain-model of HTTP Response.
|
||||
*/
|
||||
public class HTTPResponse {
|
||||
|
||||
private String response;
|
||||
private int responseCode;
|
||||
|
||||
public String getResponse() {
|
||||
return response;
|
||||
}
|
||||
|
||||
public void setResponse(String response) {
|
||||
this.response = response;
|
||||
}
|
||||
|
||||
public int getResponseCode() {
|
||||
return responseCode;
|
||||
}
|
||||
|
||||
public void setResponseCode(int responseCode) {
|
||||
this.responseCode = responseCode;
|
||||
}
|
||||
}
|
@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 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.mdm.qsg.dto;
|
||||
|
||||
/**
|
||||
* This serves as the domain-model of MobileApplication related data.
|
||||
*/
|
||||
public class MobileApplication {
|
||||
|
||||
private String appId;
|
||||
private String packageId;
|
||||
private String version;
|
||||
private String icon;
|
||||
private String banner;
|
||||
private String screenshot1;
|
||||
private String screenshot2;
|
||||
private String screenshot3;
|
||||
private String platform;
|
||||
|
||||
public String getPlatform() {
|
||||
return platform;
|
||||
}
|
||||
|
||||
public void setPlatform(String platform) {
|
||||
this.platform = platform;
|
||||
}
|
||||
|
||||
public String getAppId() {
|
||||
return appId;
|
||||
}
|
||||
|
||||
public void setAppId(String appId) {
|
||||
this.appId = appId;
|
||||
}
|
||||
|
||||
public String getPackageId() {
|
||||
return packageId;
|
||||
}
|
||||
|
||||
public void setPackageId(String packageId) {
|
||||
this.packageId = packageId;
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(String version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public String getIcon() {
|
||||
return icon;
|
||||
}
|
||||
|
||||
public void setIcon(String icon) {
|
||||
this.icon = icon;
|
||||
}
|
||||
|
||||
public String getBanner() {
|
||||
return banner;
|
||||
}
|
||||
|
||||
public void setBanner(String banner) {
|
||||
this.banner = banner;
|
||||
}
|
||||
|
||||
public String getScreenshot1() {
|
||||
return screenshot1;
|
||||
}
|
||||
|
||||
public void setScreenshot1(String screenshot1) {
|
||||
this.screenshot1 = screenshot1;
|
||||
}
|
||||
|
||||
public String getScreenshot2() {
|
||||
return screenshot2;
|
||||
}
|
||||
|
||||
public void setScreenshot2(String screenshot2) {
|
||||
this.screenshot2 = screenshot2;
|
||||
}
|
||||
|
||||
public String getScreenshot3() {
|
||||
return screenshot3;
|
||||
}
|
||||
|
||||
public void setScreenshot3(String screenshot3) {
|
||||
this.screenshot3 = screenshot3;
|
||||
}
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 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.mdm.qsg.utils;
|
||||
|
||||
/**
|
||||
* This class defines the constants used by the EMm-QSG package.
|
||||
*/
|
||||
public final class Constants {
|
||||
|
||||
public static final class DeviceType {
|
||||
private DeviceType() {
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
public static final String ANDROID = "android";
|
||||
public static final String WINDOWS = "windows";
|
||||
public static final String IOS = "ios";
|
||||
}
|
||||
|
||||
public static final class ContentType {
|
||||
private ContentType() {
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
public static final String APPLICATION_JSON = "application/json";
|
||||
public static final String APPLICATION_URL_ENCODED = "application/x-www-form-urlencoded";
|
||||
}
|
||||
|
||||
public static final class Header {
|
||||
private Header() {
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
public static final String AUTH = "Authorization";
|
||||
public static final String CONTENT_TYPE = "Content-Type";
|
||||
}
|
||||
|
||||
public static final class HTTPStatus {
|
||||
private HTTPStatus() {
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
||||
public static final int OK = 200;
|
||||
public static final int CREATED = 201;
|
||||
}
|
||||
|
||||
public static final String UTF_8 = "utf-8";
|
||||
public static final String EMM_USER_ROLE = "emm-user";
|
||||
}
|
@ -0,0 +1,438 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 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.mdm.qsg.utils;
|
||||
|
||||
import org.apache.http.HttpEntity;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.NameValuePair;
|
||||
import org.apache.http.client.ClientProtocolException;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.client.entity.UrlEncodedFormEntity;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.client.methods.HttpPut;
|
||||
import org.apache.http.config.Registry;
|
||||
import org.apache.http.config.RegistryBuilder;
|
||||
import org.apache.http.conn.socket.ConnectionSocketFactory;
|
||||
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
|
||||
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
import org.apache.http.entity.mime.MultipartEntity;
|
||||
import org.apache.http.entity.mime.content.ContentBody;
|
||||
import org.apache.http.entity.mime.content.FileBody;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
||||
import org.apache.http.ssl.SSLContextBuilder;
|
||||
import org.apache.http.ssl.TrustStrategy;
|
||||
import org.wso2.mdm.qsg.dto.HTTPResponse;
|
||||
|
||||
import javax.net.ssl.HostnameVerifier;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import java.io.*;
|
||||
import java.security.KeyManagementException;
|
||||
import java.security.KeyStoreException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* This class provides the utility methods to make a HTTP request.
|
||||
*/
|
||||
public class HTTPInvoker {
|
||||
|
||||
private static final String OAUTH_BEARER = "Bearer ";
|
||||
public static String oAuthToken;
|
||||
|
||||
private static HttpClient createHttpClient()
|
||||
throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
|
||||
HttpClientBuilder b = HttpClientBuilder.create();
|
||||
|
||||
// setup a Trust Strategy that allows all certificates.
|
||||
//
|
||||
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
|
||||
public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
|
||||
return true;
|
||||
}
|
||||
}).build();
|
||||
b.setSSLContext(sslContext);
|
||||
//b.setSSLHostnameVerifier(new NoopHostnameVerifier());
|
||||
|
||||
// don't check Hostnames, either.
|
||||
// -- use SSLConnectionSocketFactory.getDefaultHostnameVerifier(), if you don't want to weaken
|
||||
HostnameVerifier hostnameVerifier = SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
|
||||
|
||||
// here's the special part:
|
||||
// -- need to create an SSL Socket Factory, to use our weakened "trust strategy";
|
||||
// -- and create a Registry, to register it.
|
||||
//
|
||||
SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
|
||||
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
|
||||
.register("http", PlainConnectionSocketFactory.getSocketFactory())
|
||||
.register("https", sslSocketFactory)
|
||||
.build();
|
||||
|
||||
// now, we create connection-manager using our Registry.
|
||||
// -- allows multi-threaded use
|
||||
PoolingHttpClientConnectionManager connMgr = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
|
||||
b.setConnectionManager(connMgr);
|
||||
|
||||
// finally, build the HttpClient;
|
||||
// -- done!
|
||||
CloseableHttpClient client = b.build();
|
||||
return client;
|
||||
}
|
||||
|
||||
public static HTTPResponse sendHTTPPostWithURLParams(String url, List<NameValuePair> params, HashMap<String, String>
|
||||
headers) {
|
||||
HttpPost post = null;
|
||||
HttpResponse response = null;
|
||||
CloseableHttpClient httpclient = null;
|
||||
HTTPResponse httpResponse = new HTTPResponse();
|
||||
try {
|
||||
httpclient = (CloseableHttpClient) createHttpClient();
|
||||
post = new HttpPost(url);
|
||||
post.setEntity(new UrlEncodedFormEntity(params));
|
||||
for (String key : headers.keySet()) {
|
||||
post.setHeader(key, headers.get(key));
|
||||
}
|
||||
response = httpclient.execute(post);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ClientProtocolException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyStoreException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyManagementException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
BufferedReader rd = null;
|
||||
try {
|
||||
rd = new BufferedReader(
|
||||
new InputStreamReader(response.getEntity().getContent()));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
StringBuffer result = new StringBuffer();
|
||||
String line = "";
|
||||
try {
|
||||
while ((line = rd.readLine()) != null) {
|
||||
result.append(line);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
httpResponse.setResponseCode(response.getStatusLine().getStatusCode());
|
||||
httpResponse.setResponse(result.toString());
|
||||
return httpResponse;
|
||||
}
|
||||
|
||||
public static HTTPResponse sendHTTPPost(String url, String payload, HashMap<String, String>
|
||||
headers) {
|
||||
HttpPost post = null;
|
||||
HttpResponse response = null;
|
||||
HTTPResponse httpResponse = new HTTPResponse();
|
||||
CloseableHttpClient httpclient = null;
|
||||
try {
|
||||
httpclient = (CloseableHttpClient) createHttpClient();
|
||||
StringEntity requestEntity = new StringEntity(payload, Constants.UTF_8);
|
||||
post = new HttpPost(url);
|
||||
post.setEntity(requestEntity);
|
||||
for (String key : headers.keySet()) {
|
||||
post.setHeader(key, headers.get(key));
|
||||
}
|
||||
response = httpclient.execute(post);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ClientProtocolException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyStoreException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyManagementException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
BufferedReader rd = null;
|
||||
try {
|
||||
rd = new BufferedReader(
|
||||
new InputStreamReader(response.getEntity().getContent()));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
StringBuffer result = new StringBuffer();
|
||||
String line = "";
|
||||
try {
|
||||
while ((line = rd.readLine()) != null) {
|
||||
result.append(line);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
httpResponse.setResponseCode(response.getStatusLine().getStatusCode());
|
||||
httpResponse.setResponse(result.toString());
|
||||
try {
|
||||
httpclient.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return httpResponse;
|
||||
}
|
||||
|
||||
public static HTTPResponse sendHTTPPutWithOAuthSecurity(String url, String payload, HashMap<String, String>
|
||||
headers) {
|
||||
HttpPut put = null;
|
||||
HttpResponse response = null;
|
||||
HTTPResponse httpResponse = new HTTPResponse();
|
||||
CloseableHttpClient httpclient = null;
|
||||
try {
|
||||
httpclient = (CloseableHttpClient) createHttpClient();
|
||||
StringEntity requestEntity = new StringEntity(payload, Constants.UTF_8);
|
||||
put = new HttpPut(url);
|
||||
put.setEntity(requestEntity);
|
||||
for (String key : headers.keySet()) {
|
||||
put.setHeader(key, headers.get(key));
|
||||
}
|
||||
put.setHeader(Constants.Header.AUTH, OAUTH_BEARER + oAuthToken);
|
||||
response = httpclient.execute(put);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ClientProtocolException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyStoreException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyManagementException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
BufferedReader rd = null;
|
||||
try {
|
||||
rd = new BufferedReader(
|
||||
new InputStreamReader(response.getEntity().getContent()));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
StringBuffer result = new StringBuffer();
|
||||
String line = "";
|
||||
try {
|
||||
while ((line = rd.readLine()) != null) {
|
||||
result.append(line);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
httpResponse.setResponseCode(response.getStatusLine().getStatusCode());
|
||||
httpResponse.setResponse(result.toString());
|
||||
try {
|
||||
httpclient.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return httpResponse;
|
||||
}
|
||||
|
||||
public static HTTPResponse sendHTTPPostWithOAuthSecurity(String url, String payload, HashMap<String, String>
|
||||
headers) {
|
||||
HttpPost post = null;
|
||||
HttpResponse response = null;
|
||||
HTTPResponse httpResponse = new HTTPResponse();
|
||||
CloseableHttpClient httpclient = null;
|
||||
try {
|
||||
httpclient = (CloseableHttpClient) createHttpClient();
|
||||
StringEntity requestEntity = new StringEntity(payload, Constants.UTF_8);
|
||||
post = new HttpPost(url);
|
||||
post.setEntity(requestEntity);
|
||||
for (String key : headers.keySet()) {
|
||||
post.setHeader(key, headers.get(key));
|
||||
}
|
||||
|
||||
post.setHeader(Constants.Header.AUTH, OAUTH_BEARER + oAuthToken);
|
||||
response = httpclient.execute(post);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ClientProtocolException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyStoreException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyManagementException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
BufferedReader rd = null;
|
||||
try {
|
||||
rd = new BufferedReader(
|
||||
new InputStreamReader(response.getEntity().getContent()));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
StringBuffer result = new StringBuffer();
|
||||
String line = "";
|
||||
try {
|
||||
while ((line = rd.readLine()) != null) {
|
||||
result.append(line);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
httpResponse.setResponseCode(response.getStatusLine().getStatusCode());
|
||||
httpResponse.setResponse(result.toString());
|
||||
try {
|
||||
httpclient.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return httpResponse;
|
||||
}
|
||||
|
||||
public static HTTPResponse sendHTTPPostWithOAuthSecurity(String url, HttpEntity entity, HashMap<String, String>
|
||||
headers) {
|
||||
HttpPost post = null;
|
||||
HttpResponse response = null;
|
||||
HTTPResponse httpResponse = new HTTPResponse();
|
||||
CloseableHttpClient httpclient = null;
|
||||
try {
|
||||
httpclient = (CloseableHttpClient) createHttpClient();
|
||||
post = new HttpPost(url);
|
||||
post.setEntity(entity);
|
||||
for (String key : headers.keySet()) {
|
||||
post.setHeader(key, headers.get(key));
|
||||
}
|
||||
post.setHeader(Constants.Header.AUTH, OAUTH_BEARER + oAuthToken);
|
||||
response = httpclient.execute(post);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ClientProtocolException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyStoreException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyManagementException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
BufferedReader rd = null;
|
||||
try {
|
||||
rd = new BufferedReader(
|
||||
new InputStreamReader(response.getEntity().getContent()));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
StringBuffer result = new StringBuffer();
|
||||
String line = "";
|
||||
try {
|
||||
while ((line = rd.readLine()) != null) {
|
||||
result.append(line);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
httpResponse.setResponseCode(response.getStatusLine().getStatusCode());
|
||||
httpResponse.setResponse(result.toString());
|
||||
try {
|
||||
httpclient.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return httpResponse;
|
||||
}
|
||||
|
||||
public static HTTPResponse uploadFile(String url, String fileName, String fileContentType) {
|
||||
HttpPost post = null;
|
||||
HttpResponse response = null;
|
||||
HTTPResponse httpResponse = new HTTPResponse();
|
||||
CloseableHttpClient httpclient = null;
|
||||
try {
|
||||
httpclient = (CloseableHttpClient) createHttpClient();
|
||||
post = new HttpPost(url);
|
||||
File file = new File(fileName);
|
||||
|
||||
MultipartEntity mpEntity = new MultipartEntity();
|
||||
ContentBody cbFile = new FileBody(file, fileContentType);
|
||||
mpEntity.addPart("file", cbFile);
|
||||
post.setEntity(mpEntity);
|
||||
post.setHeader(Constants.Header.AUTH, OAUTH_BEARER + oAuthToken);
|
||||
//post.setHeader(Constants.Header.CONTENT_TYPE, "multipart/form-data");
|
||||
post.setHeader("Accept", Constants.ContentType.APPLICATION_JSON);
|
||||
response = httpclient.execute(post);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
} catch (ClientProtocolException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NoSuchAlgorithmException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyStoreException e) {
|
||||
e.printStackTrace();
|
||||
} catch (KeyManagementException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
BufferedReader rd = null;
|
||||
try {
|
||||
rd = new BufferedReader(
|
||||
new InputStreamReader(response.getEntity().getContent()));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
StringBuffer result = new StringBuffer();
|
||||
String line = "";
|
||||
try {
|
||||
while ((line = rd.readLine()) != null) {
|
||||
result.append(line);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
httpResponse.setResponseCode(response.getStatusLine().getStatusCode());
|
||||
httpResponse.setResponse(result.toString());
|
||||
try {
|
||||
httpclient.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return httpResponse;
|
||||
}
|
||||
}
|
@ -0,0 +1,142 @@
|
||||
/*
|
||||
* Copyright (c) 2017, 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.mdm.qsg.utils;
|
||||
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.apache.http.NameValuePair;
|
||||
import org.apache.http.message.BasicNameValuePair;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.json.simple.parser.JSONParser;
|
||||
import org.json.simple.parser.ParseException;
|
||||
import org.wso2.mdm.qsg.dto.ClientCredentials;
|
||||
import org.wso2.mdm.qsg.dto.EMMQSGConfig;
|
||||
import org.wso2.mdm.qsg.dto.HTTPResponse;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* This class holds the utility methods used by the EMM-QSG package.
|
||||
*/
|
||||
public class QSGUtils {
|
||||
|
||||
public static EMMQSGConfig initConfig() {
|
||||
Properties props = new Properties();
|
||||
InputStream input = null;
|
||||
EMMQSGConfig emmConfig = null;
|
||||
try {
|
||||
input = new FileInputStream("config.properties");
|
||||
// load a properties file and set the properties
|
||||
props.load(input);
|
||||
emmConfig = EMMQSGConfig.getInstance();
|
||||
emmConfig.setEmmHost(props.getProperty("emm-host"));
|
||||
emmConfig.setDcrEndPoint(props.getProperty("dcr-endpoint"));
|
||||
emmConfig.setOauthEndPoint(props.getProperty("oauth-endpoint"));
|
||||
emmConfig.setUsername(props.getProperty("username"));
|
||||
emmConfig.setPassword(props.getProperty("password"));
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
} finally {
|
||||
if (input != null) {
|
||||
try {
|
||||
input.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
return emmConfig;
|
||||
}
|
||||
|
||||
private static ClientCredentials getClientCredentials() {
|
||||
ClientCredentials clientCredentials = null;
|
||||
HashMap<String, String> headers = new HashMap<String, String>();
|
||||
String dcrEndPoint = EMMQSGConfig.getInstance().getDcrEndPoint();
|
||||
//Set the DCR payload
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("owner", "admin");
|
||||
obj.put("clientName", "qsg");
|
||||
obj.put("grantType", "refresh_token password client_credentials");
|
||||
obj.put("tokenScope", "user:view,user:manage,user:admin:reset-password,role:view,role:manage,policy:view," +
|
||||
"policy:manage,application:manage,appm:create,appm:publish,appm:update,appm:read");
|
||||
//Set the headers
|
||||
headers.put(Constants.Header.CONTENT_TYPE, Constants.ContentType.APPLICATION_JSON);
|
||||
HTTPResponse httpResponse = HTTPInvoker.sendHTTPPost(dcrEndPoint, obj.toJSONString(), headers);
|
||||
if (httpResponse.getResponseCode() == Constants.HTTPStatus.CREATED) {
|
||||
try {
|
||||
JSONObject jsonObject = (JSONObject) new JSONParser().parse(httpResponse.getResponse());
|
||||
clientCredentials = new ClientCredentials();
|
||||
clientCredentials.setClientKey((String) jsonObject.get("client_id"));
|
||||
clientCredentials.setClientSecret((String) jsonObject.get("client_secret"));
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return clientCredentials;
|
||||
}
|
||||
|
||||
public static String getOAuthToken() {
|
||||
QSGUtils.initConfig();
|
||||
ClientCredentials clientCredentials = getClientCredentials();
|
||||
String authorizationStr = clientCredentials.getClientKey() + ":" + clientCredentials.getClientSecret();
|
||||
String authHeader = "Basic " + new String(Base64.encodeBase64(authorizationStr.getBytes()));
|
||||
HashMap<String, String> headers = new HashMap<String, String>();
|
||||
//Set the form params
|
||||
List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
|
||||
urlParameters.add(new BasicNameValuePair("username", EMMQSGConfig.getInstance().getUsername()));
|
||||
urlParameters.add(new BasicNameValuePair("password", EMMQSGConfig.getInstance().getPassword()));
|
||||
urlParameters.add(new BasicNameValuePair("grant_type", "password"));
|
||||
urlParameters.add(new BasicNameValuePair("scope",
|
||||
"user:view user:manage user:admin:reset-password role:view role:manage policy:view policy:manage " +
|
||||
"application:manage appm:administration appm:create appm:publish appm:update appm:read"));
|
||||
//Set the headers
|
||||
headers.put(Constants.Header.CONTENT_TYPE, Constants.ContentType.APPLICATION_URL_ENCODED);
|
||||
headers.put(Constants.Header.AUTH, authHeader);
|
||||
HTTPResponse httpResponse = HTTPInvoker
|
||||
.sendHTTPPostWithURLParams(EMMQSGConfig.getInstance().getOauthEndPoint(), urlParameters, headers);
|
||||
if (httpResponse.getResponseCode() == Constants.HTTPStatus.OK) {
|
||||
try {
|
||||
JSONObject jsonObject = (JSONObject) new JSONParser().parse(httpResponse.getResponse());
|
||||
return (String) jsonObject.get("access_token");
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean isValidEmailAddress(String email) {
|
||||
String emailPattern =
|
||||
"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$";
|
||||
Pattern p = Pattern.compile(emailPattern);
|
||||
Matcher m = p.matcher(email);
|
||||
return m.matches();
|
||||
}
|
||||
|
||||
public static String getResourceId(String resourcePath) {
|
||||
return resourcePath.substring(resourcePath.lastIndexOf('/') + 1);
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright (c) 2017, 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.
|
||||
-->
|
||||
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<parent>
|
||||
<groupId>org.wso2.iot</groupId>
|
||||
<artifactId>wso2iot-core-parent</artifactId>
|
||||
<version>3.1.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>wso2iot-core-scripts</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
<name>WSO2 IoT - Core - Scripts</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
|
||||
<modules>
|
||||
<module>mobile-qsg</module>
|
||||
</modules>
|
||||
|
||||
</project>
|
@ -1,92 +0,0 @@
|
||||
package org.wso2.iot.integration.util;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.junit.BeforeClass;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.Test;
|
||||
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||
import org.wso2.carbon.integration.common.admin.client.LogViewerClient;
|
||||
import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException;
|
||||
import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager;
|
||||
import org.wso2.carbon.logging.view.stub.LogViewerLogViewerException;
|
||||
import org.wso2.carbon.logging.view.stub.types.carbon.LogEvent;
|
||||
import org.wso2.iot.integration.common.TestBase;
|
||||
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.rmi.RemoteException;
|
||||
import java.util.concurrent.*;
|
||||
|
||||
public class RestartTest extends TestBase {
|
||||
|
||||
private Log log = LogFactory.getLog(RestartTest.class);
|
||||
private LogViewerClient logViewerClient;
|
||||
|
||||
@BeforeClass
|
||||
public void initTest() throws Exception {
|
||||
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||
logViewerClient = new LogViewerClient(getBackendHTTPSURL(), getSessionCookie());
|
||||
}
|
||||
|
||||
@Test(description = "Test restarting the server")
|
||||
public void serverRestartTest() {
|
||||
ServerConfigurationManager serverManager;
|
||||
try {
|
||||
serverManager = new ServerConfigurationManager(automationContext);
|
||||
log.info("Restart Triggered -------------------------------------------------------------------");
|
||||
serverManager.restartGracefully();
|
||||
logViewerClient.getAllRemoteSystemLogs();
|
||||
waitForRestart();
|
||||
} catch (AutomationUtilException | XPathExpressionException | MalformedURLException e) {
|
||||
log.error("Restart failed due to : " + e.getLocalizedMessage());
|
||||
} catch (RemoteException | LogViewerLogViewerException e) {
|
||||
log.error("Cannot get server log due to : " + e.getLocalizedMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Wait until the server restarts.
|
||||
* This method looks for "Mgt console URL:" to be appeared in the terminal.
|
||||
* If it does not appear within the given timeout an Exception will be thrown.
|
||||
*/
|
||||
private void waitForRestart() {
|
||||
ExecutorService service = Executors.newSingleThreadExecutor();
|
||||
try {
|
||||
Runnable r = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
LogEvent[] logEvents = logViewerClient.getAllRemoteSystemLogs();
|
||||
for (LogEvent event : logEvents) {
|
||||
log.info(event.getMessage() + " @ " + event.getLogTime());
|
||||
if (event.getMessage().contains("Mgt Console URL : " )){
|
||||
log.info("Server restarted successfully");
|
||||
Assert.assertTrue(true);
|
||||
}
|
||||
}
|
||||
} catch (RemoteException | LogViewerLogViewerException e) {
|
||||
log.error("Error reading logs. \n" + e.getMessage());
|
||||
Assert.assertTrue(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Future<?> f = service.submit(r);
|
||||
|
||||
f.get(30, TimeUnit.MINUTES);
|
||||
} catch (final InterruptedException e) {
|
||||
log.error("Interrupted "+e.getMessage());
|
||||
Assert.assertTrue(false);
|
||||
} catch (final TimeoutException e) {
|
||||
log.error("Timeout " + e.getMessage());
|
||||
Assert.assertTrue(false);
|
||||
} catch (final ExecutionException e) {
|
||||
log.error("Execution failed " + e.getMessage());
|
||||
Assert.assertTrue(false);
|
||||
} finally {
|
||||
service.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,4 +1,19 @@
|
||||
{
|
||||
"POST": {
|
||||
"responseCode": "OK",
|
||||
"responseMessage": "Android device, which carries the id \u0027d24f870f390352a41\u0027 has successfully been enrolled"
|
||||
"responseMessage": "Android device, which carries the id \u0027d24f870f390352a41234\u0027 has successfully been enrolled"
|
||||
},
|
||||
"GET": {
|
||||
"responseCode": "OK",
|
||||
"responseMessage": "Android device that carries the id \u0027d24f870f390352a41234\u0027 is enrolled"
|
||||
},
|
||||
"PUT": {
|
||||
"responseCode": "Accepted",
|
||||
"responseMessage": "Enrollment of Android device that carries the id \u0027d24f870f390352a41234\u0027 has successfully updated"
|
||||
},
|
||||
"DELETE" : {
|
||||
"responseCode":"OK",
|
||||
"responseMessage":"Android device that carries id \u0027d24f870f390352a41234\u0027 has successfully dis-enrolled"
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"default perm:admin-groups:count perm:admin-groups:view perm:admin-users:view perm:admin:certificates:add perm:admin:certificates:delete perm:admin:certificates:details perm:admin:certificates:verify perm:admin:certificates:view perm:admin:devices:view perm:android:blacklist-applications perm:android:change-lock-code perm:android:clear-password perm:android:configure-vpn perm:android:configure-wifi perm:android:control-camera perm:android:disenroll perm:android:encrypt-storage perm:android:enroll perm:android:enterprise-wipe perm:android:info perm:android:install-application perm:android:location perm:android:lock-devices perm:android:logcat perm:android:manage-configuration perm:android:mute perm:android:reboot perm:android:ring perm:android:send-notification perm:android:set-password-policy perm:android:set-webclip perm:android:uninstall-application perm:android:unlock-devices perm:android:update-application perm:android:upgrade-firmware perm:android:view-configuration perm:android:wipe perm:applications:install perm:applications:uninstall perm:dashboard:by-groups perm:dashboard:count-overview perm:dashboard:details perm:dashboard:device-counts perm:dashboard:feature-non-compliant perm:dashboard:filtered-count perm:dashboard:non-compliant perm:dashboard:non-compliant-count perm:dashboard:vulnerabilities perm:device-types:features perm:device-types:types perm:devices:applications perm:devices:compliance-data perm:devices:delete perm:devices:details perm:devices:effective-policy perm:devices:features perm:devices:operations perm:devices:search perm:devices:update perm:devices:view perm:get-activity perm:groups:add perm:groups:assign perm:groups:count perm:groups:device perm:groups:devices perm:groups:devices-add perm:groups:devices-count perm:groups:devices-remove perm:groups:groups perm:groups:groups-view perm:groups:remove perm:groups:roles perm:groups:share perm:groups:update perm:manage-configuration perm:notifications:mark-checked perm:notifications:view perm:policies:activate perm:policies:changes perm:policies:deactivate perm:policies:get-details perm:policies:get-policy-details perm:policies:manage perm:policies:priorities perm:policies:remove perm:policies:update perm:roles:add perm:roles:add-users perm:roles:create-combined-role perm:roles:delete perm:roles:details perm:roles:permissions perm:roles:update perm:roles:view perm:users:add perm:users:count perm:users:credentials perm:users:delete perm:users:details perm:users:is-exist perm:users:roles perm:users:search perm:users:send-invitation perm:users:update perm:users:user-details perm:view-configuration"
|
||||
}
|
Loading…
Reference in new issue