forked from community/device-mgt-plugins
parent
88cd9826df
commit
ffd82f2a4f
@ -0,0 +1,332 @@
|
||||
/**
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* Licensed 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.cdm.agent.proxy;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
import org.apache.http.*;
|
||||
import org.apache.http.client.ClientProtocolException;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.client.methods.HttpDelete;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.client.methods.HttpPut;
|
||||
import org.apache.http.client.methods.HttpRequestBase;
|
||||
import org.apache.http.conn.ClientConnectionManager;
|
||||
import org.apache.http.conn.scheme.PlainSocketFactory;
|
||||
import org.apache.http.conn.scheme.Scheme;
|
||||
import org.apache.http.conn.scheme.SchemeRegistry;
|
||||
import org.apache.http.conn.ssl.SSLSocketFactory;
|
||||
import org.apache.http.entity.ByteArrayEntity;
|
||||
import org.apache.http.entity.StringEntity;
|
||||
import org.apache.http.impl.client.DefaultHttpClient;
|
||||
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
|
||||
import org.apache.http.params.BasicHttpParams;
|
||||
import org.apache.http.params.HttpParams;
|
||||
import org.apache.http.protocol.HTTP;
|
||||
import org.json.JSONObject;
|
||||
import org.wso2.cdm.agent.R;
|
||||
import org.wso2.cdm.agent.utils.CommonUtilities;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.security.KeyStore;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
/**
|
||||
* Handle network communication between SDK and authorization server
|
||||
*/
|
||||
public class ServerApiAccess {
|
||||
private final static String TAG = "ServerUtilities";
|
||||
private static boolean isSSLEnable = false;
|
||||
private static InputStream inputStream;
|
||||
private static String trustStorePassword;
|
||||
|
||||
/**
|
||||
* Enable SSL communication between client application and authorization server (if you have selfish sign certificate)
|
||||
*
|
||||
* @param in
|
||||
* @param myTrustStorePassword
|
||||
*/
|
||||
public static void enableSSL(InputStream in, String myTrustStorePassword) {
|
||||
inputStream = in;
|
||||
isSSLEnable = true;
|
||||
trustStorePassword = myTrustStorePassword;
|
||||
}
|
||||
|
||||
public static String buildPayload(Map<String, String> params){
|
||||
if(params==null){
|
||||
return null;
|
||||
}
|
||||
StringBuilder bodyBuilder = new StringBuilder();
|
||||
Iterator<Entry<String, String>> iterator = params.entrySet().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Entry<String, String> param = iterator.next();
|
||||
bodyBuilder.append(param.getKey()).append('=').append(param.getValue());
|
||||
if (iterator.hasNext()) {
|
||||
bodyBuilder.append('&');
|
||||
}
|
||||
}
|
||||
return bodyBuilder.toString();
|
||||
}
|
||||
public static HttpRequestBase buildHeaders(HttpRequestBase httpRequestBase, Map<String, String> headers,String httpMethod){
|
||||
Iterator<Entry<String, String>> iterator = headers.entrySet().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Entry<String, String> header = iterator.next();
|
||||
httpRequestBase.setHeader(header.getKey(), header.getValue());
|
||||
}
|
||||
return httpRequestBase;
|
||||
}
|
||||
public static Map<String, String> postData(APIUtilities apiUtilities, Map<String, String> headers) {
|
||||
String httpMethod = apiUtilities.getHttpMethod();
|
||||
String url = apiUtilities.getEndPoint();
|
||||
JSONObject params = apiUtilities.getRequestParams();
|
||||
Map<String, String> responseParams = new HashMap<String, String>();
|
||||
HttpClient httpclient = getCertifiedHttpClient();
|
||||
|
||||
|
||||
if(httpMethod.equals("POST")){
|
||||
HttpPost httpPost = new HttpPost(url);
|
||||
if(params!=null){
|
||||
try {
|
||||
httpPost.setEntity(new StringEntity(params.toString()));
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}else{
|
||||
httpPost.setEntity(null);
|
||||
}
|
||||
Log.e("url",""+url);
|
||||
HttpPost httpPostWithHeaders = (HttpPost)buildHeaders(httpPost,headers,httpMethod);
|
||||
try {
|
||||
HttpResponse response = httpclient.execute(httpPostWithHeaders);
|
||||
String status = String.valueOf(response.getStatusLine().getStatusCode());
|
||||
Log.d(TAG,status);
|
||||
responseParams.put("response", getResponseBody(response));
|
||||
responseParams.put("status", status);
|
||||
return responseParams;
|
||||
} catch (ClientProtocolException e) {
|
||||
Log.d(TAG, "ClientProtocolException :"+e.toString());
|
||||
return null;
|
||||
} catch (IOException e) {
|
||||
Log.d(TAG, e.toString());
|
||||
responseParams.put("response", "Internal Server Error");
|
||||
responseParams.put("status", "500");
|
||||
return responseParams;
|
||||
}
|
||||
}
|
||||
else if(httpMethod.equals("GET")){
|
||||
// if(payload!=null){
|
||||
// url = url+"?"+payload;
|
||||
// }
|
||||
HttpGet httpGet = new HttpGet(url);
|
||||
HttpGet httpGetWithHeaders = (HttpGet) buildHeaders(httpGet,headers,httpMethod);
|
||||
Log.d(TAG,httpGetWithHeaders.toString()+" GET");
|
||||
try {
|
||||
HttpResponse response = httpclient.execute(httpGetWithHeaders);
|
||||
responseParams.put("response", getResponseBody(response));
|
||||
responseParams.put("status", String.valueOf(response.getStatusLine().getStatusCode()));
|
||||
return responseParams;
|
||||
} catch (ClientProtocolException e) {
|
||||
Log.d(TAG, "ClientProtocolException :"+e.toString());
|
||||
return null;
|
||||
} catch (IOException e) {
|
||||
Log.d(TAG, e.toString());
|
||||
responseParams.put("response", "Internal Server Error");
|
||||
responseParams.put("status", "500");
|
||||
return responseParams;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Map<String, String> postDataAPI(APIUtilities apiUtilities, Map<String, String> headers) {
|
||||
String httpMethod = apiUtilities.getHttpMethod();
|
||||
String url = apiUtilities.getEndPoint();
|
||||
Map<String, String> params = apiUtilities.getRequestParamsMap();
|
||||
|
||||
Map<String, String> response_params = new HashMap<String, String>();
|
||||
HttpClient httpclient = getCertifiedHttpClient();
|
||||
String payload = buildPayload(params);
|
||||
|
||||
if(httpMethod.equals("POST")){
|
||||
HttpPost httpPost = new HttpPost(url);
|
||||
Log.e("url",""+url);
|
||||
HttpPost httpPostWithHeaders = (HttpPost)buildHeaders(httpPost,headers,httpMethod);
|
||||
byte[] postData = payload.getBytes();
|
||||
try {
|
||||
httpPostWithHeaders.setEntity(new ByteArrayEntity(postData));
|
||||
HttpResponse response = httpclient.execute(httpPostWithHeaders);
|
||||
String status = String.valueOf(response.getStatusLine().getStatusCode());
|
||||
Log.d(TAG,status);
|
||||
response_params.put("response", getResponseBody(response));
|
||||
response_params.put("status", status);
|
||||
return response_params;
|
||||
} catch (ClientProtocolException e) {
|
||||
Log.d(TAG, "ClientProtocolException :"+e.toString());
|
||||
return null;
|
||||
} catch (IOException e) {
|
||||
Log.d(TAG, e.toString());
|
||||
response_params.put("response", "Internal Server Error");
|
||||
response_params.put("status", "500");
|
||||
return response_params;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static HttpClient getCertifiedHttpClient() {
|
||||
try {
|
||||
HttpClient client = null;
|
||||
if(CommonUtilities.SERVER_PROTOCOL.equalsIgnoreCase("https://")){
|
||||
KeyStore localTrustStore = KeyStore.getInstance("BKS");
|
||||
InputStream in = IdentityProxy.getInstance().getContext()
|
||||
.getResources().openRawResource(R.raw.emm_truststore);
|
||||
localTrustStore.load(in, CommonUtilities.TRUSTSTORE_PASSWORD.toCharArray());
|
||||
|
||||
|
||||
SchemeRegistry schemeRegistry = new SchemeRegistry();
|
||||
schemeRegistry.register(new Scheme("http", PlainSocketFactory
|
||||
.getSocketFactory(), 80));
|
||||
SSLSocketFactory sslSocketFactory = new SSLSocketFactory(localTrustStore);
|
||||
sslSocketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
schemeRegistry.register(new Scheme("https", sslSocketFactory, 443));
|
||||
HttpParams params = new BasicHttpParams();
|
||||
ClientConnectionManager cm =
|
||||
new ThreadSafeClientConnManager(params, schemeRegistry);
|
||||
|
||||
client = new DefaultHttpClient(cm, params);
|
||||
|
||||
} else {
|
||||
client = new DefaultHttpClient();
|
||||
}
|
||||
return client;
|
||||
} catch (Exception e) {
|
||||
Log.d(TAG, e.toString());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static String getResponseBody(HttpResponse response) {
|
||||
|
||||
String response_text = null;
|
||||
HttpEntity entity = null;
|
||||
try {
|
||||
entity = response.getEntity();
|
||||
response_text = getResponseBodyContent(entity);
|
||||
} catch (ParseException e) {
|
||||
Log.d(TAG, e.toString());
|
||||
} catch (IOException e) {
|
||||
if (entity != null) {
|
||||
try {
|
||||
entity.consumeContent();
|
||||
} catch (IOException e1) {
|
||||
Log.d(TAG, e1.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
return response_text;
|
||||
}
|
||||
|
||||
public static String getResponseBodyContent(final HttpEntity entity) throws IOException, ParseException {
|
||||
|
||||
if (entity == null) {
|
||||
throw new IllegalArgumentException("HTTP entity may not be null");
|
||||
}
|
||||
|
||||
InputStream instream = entity.getContent();
|
||||
|
||||
if (instream == null) {
|
||||
return "";
|
||||
}
|
||||
|
||||
if (entity.getContentLength() > Integer.MAX_VALUE) {
|
||||
throw new IllegalArgumentException(
|
||||
|
||||
"HTTP entity too large to be buffered in memory");
|
||||
}
|
||||
|
||||
String charset = getContentCharSet(entity);
|
||||
|
||||
if (charset == null) {
|
||||
|
||||
charset = HTTP.DEFAULT_CONTENT_CHARSET;
|
||||
|
||||
}
|
||||
|
||||
Reader reader = new InputStreamReader(instream, charset);
|
||||
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
|
||||
try {
|
||||
|
||||
char[] tmp = new char[1024];
|
||||
|
||||
int l;
|
||||
|
||||
while ((l = reader.read(tmp)) != -1) {
|
||||
|
||||
buffer.append(tmp, 0, l);
|
||||
|
||||
}
|
||||
|
||||
} finally {
|
||||
|
||||
reader.close();
|
||||
|
||||
}
|
||||
|
||||
return buffer.toString();
|
||||
|
||||
}
|
||||
|
||||
public static String getContentCharSet(final HttpEntity entity) throws ParseException {
|
||||
|
||||
if (entity == null) {
|
||||
throw new IllegalArgumentException("HTTP entity may not be null");
|
||||
}
|
||||
|
||||
String charset = null;
|
||||
|
||||
if (entity.getContentType() != null) {
|
||||
|
||||
HeaderElement values[] = entity.getContentType().getElements();
|
||||
|
||||
if (values.length > 0) {
|
||||
|
||||
NameValuePair param = values[0].getParameterByName("charset");
|
||||
|
||||
if (param != null) {
|
||||
|
||||
charset = param.getValue();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return charset;
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,127 @@
|
||||
/**
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* Licensed 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.cdm.agent.services;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.Map;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.wso2.cdm.agent.R;
|
||||
import org.wso2.cdm.agent.RegistrationActivity;
|
||||
import org.wso2.cdm.agent.api.DeviceInfo;
|
||||
import org.wso2.cdm.agent.proxy.APIResultCallBack;
|
||||
import org.wso2.cdm.agent.utils.CommonUtilities;
|
||||
import org.wso2.cdm.agent.utils.Constant;
|
||||
import org.wso2.cdm.agent.utils.Preference;
|
||||
import org.wso2.cdm.agent.utils.ServerUtils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
* Used to coordinate the retrieval and processing of messages from the server.
|
||||
*/
|
||||
public class MessageProcessor implements APIResultCallBack {
|
||||
|
||||
private String TAG = MessageProcessor.class.getSimpleName();
|
||||
private Context context;
|
||||
String deviceId;
|
||||
|
||||
/**
|
||||
* Local notification message handler.
|
||||
*
|
||||
* @param context
|
||||
* Context of the application.
|
||||
*/
|
||||
public MessageProcessor(Context context) {
|
||||
this.context = context;
|
||||
|
||||
deviceId=Preference.get(context, "deviceId");
|
||||
if(deviceId ==null){
|
||||
DeviceInfo deviceInfo = new DeviceInfo(context);
|
||||
deviceId=deviceInfo.getMACAddress();
|
||||
Preference.put(context, "deviceId", deviceId);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param response
|
||||
* Response received from the server that needs to be processed
|
||||
* and applied to the device
|
||||
*/
|
||||
public void performOperation(String response) {
|
||||
try {
|
||||
JSONArray operations = new JSONArray(response);
|
||||
for (int x = 0; x < operations.length(); x++) {
|
||||
String featureCode = operations.getJSONObject(x).getString(Constant.CODE);
|
||||
String properties = operations.getJSONObject(x).getString(Constant.PROPERTIES);
|
||||
Operation operation = new Operation(context);
|
||||
operation.doTask(featureCode, properties, 0);
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Call the message retrieval end point of the server to get messages
|
||||
* pending.
|
||||
*/
|
||||
public void getMessages() {
|
||||
String ipSaved =
|
||||
Preference.get(context.getApplicationContext(),
|
||||
context.getResources().getString(R.string.shared_pref_ip));
|
||||
CommonUtilities.setServerURL(ipSaved);
|
||||
String deviceIdentifier = "";
|
||||
try {
|
||||
deviceIdentifier = URLEncoder.encode(deviceId, "utf-8");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
ServerUtils.callSecuredAPI(context, CommonUtilities.API_SERVER_URL +
|
||||
CommonUtilities.NOTIFICATION_ENDPOINT+File.separator+deviceIdentifier,
|
||||
CommonUtilities.GET_METHOD, new JSONObject(), MessageProcessor.this,
|
||||
CommonUtilities.NOTIFICATION_REQUEST_CODE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceiveAPIResult(Map<String, String> result, int requestCode) {
|
||||
String responseStatus;
|
||||
String response;
|
||||
if (requestCode == CommonUtilities.NOTIFICATION_REQUEST_CODE) {
|
||||
if (result != null) {
|
||||
responseStatus = result.get(CommonUtilities.STATUS_KEY);
|
||||
if (responseStatus != null &&
|
||||
responseStatus.equals(CommonUtilities.REQUEST_SUCCESSFUL)) {
|
||||
response = result.get(Constant.RESPONSE);
|
||||
if (response != null && !response.equals("")) {
|
||||
if (CommonUtilities.DEBUG_MODE_ENABLED) {
|
||||
Log.e(TAG, "onReceiveAPIResult- " + response);
|
||||
}
|
||||
performOperation(response);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
/**
|
||||
* Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||
*
|
||||
* Licensed 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.cdm.agent.utils;
|
||||
|
||||
/**
|
||||
* Constant values throughout the agent
|
||||
*/
|
||||
public class Constant {
|
||||
public static final String USERNAME = "username";
|
||||
public static final String PASSWORD = "password";
|
||||
public static final String STATUS = "status";
|
||||
public static final String RESPONSE = "response";
|
||||
public static final String PROPERTIES = "properties";
|
||||
public static final String CODE = "code";
|
||||
public static final String LOCAL = "LOCAL";
|
||||
|
||||
}
|
Loading…
Reference in new issue