/** * Copyright (c) 2011-2014, OpenIoT * * This file is part of OpenIoT. * * OpenIoT is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, version 3 of the License. * * OpenIoT is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with OpenIoT. If not, see <http://www.gnu.org/licenses/>. * * Contact: OpenIoT mailto: info@openiot.eu * @author Behnaz Bostanipour */ package org.openiot.gsn.http.ac; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIUtils; import org.apache.http.conn.scheme.PlainSocketFactory; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.apache.http.Header; import org.apache.log4j.Logger; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.security.KeyStore; import java.security.KeyStoreException; import java.util.ArrayList; import java.net.URI; /** * Created by IntelliJ IDEA. * User: Behnaz Bostanipour * Date: Apr 27, 2010 * Time: 1:39:48 PM * To change this template use File | Settings | File Templates. */ /* this class defines a Http Client which can do login, send queries and receive responses */ public class GSNClient { private String host; private int gsnhttpport; // GSN serevr htttp port private int gsnhttpsport;// GSN server https port private DefaultHttpClient httpclient; private KeyStore trustStore; // KeyStore for materials used for SSL/TLS protocl final static String trustStorePassWord="changeit"; // better to be stored in GSN.xml private static transient Logger logger= Logger.getLogger( GSNClient.class ); public GSNClient( String host, int gsnhttpport, int gsnhttpsport ) { this.host=host; this.gsnhttpport=gsnhttpport; this.gsnhttpsport=gsnhttpsport; httpclient = new DefaultHttpClient(); FileInputStream instream=null; try { this.trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); instream = new FileInputStream(new File("conf/clienttestkeystore")); this.trustStore.load(instream, "changeit".toCharArray()); SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore); socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); Scheme sch = new Scheme("https", socketFactory, gsnhttpsport); Scheme plainsch = new Scheme("http", PlainSocketFactory.getSocketFactory(),gsnhttpport); httpclient.getConnectionManager().getSchemeRegistry().register(sch); httpclient.getConnectionManager().getSchemeRegistry().register(plainsch); } catch(KeyStoreException e) { logger.error("ERROR IN GSNCLIENT : Exception while creating trustStore :"); logger.error(e.getMessage(),e); } catch(FileNotFoundException e) { logger.error("ERROR IN GSNCLIENT : FileInputStream exception :"); logger.error(e.getMessage(),e); } catch(Exception e) { logger.error("ERROR IN GSNCLIENT : Exception while loading truststore :"); logger.error(e.getMessage(),e); } finally { try { if(instream !=null) { instream.close(); } } catch(Exception e) {} } } public boolean doLogin(String username, String password)throws IOException, KeyStoreException { ArrayList formparams = new ArrayList(); formparams.add(new BasicNameValuePair("username", username)); formparams.add(new BasicNameValuePair("password", password)); UrlEncodedFormEntity entityform = new UrlEncodedFormEntity(formparams, "UTF-8"); boolean loginOK=false; try { URI uri = URIUtils.createURI("https", this.host, this.gsnhttpsport, "/gsn/MyLoginHandlerServlet",null, null); HttpPost httppost = new HttpPost(uri); httppost.addHeader("client","apache"); logger.info("executing request" + httppost.getRequestLine()); httppost.setEntity(entityform); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); Header header = response.getFirstHeader("logedin"); if(header!=null) { if(header.getValue().equals("yes")) { loginOK = true; } else if(header.getValue().equals("no")) { loginOK = false; } } logger.info("---------------------------------------- "+response.getStatusLine() ); if (entity != null) { logger.info("Response content length: " + entity.getContentLength()); logger.info(EntityUtils.toString(entity)); } if (entity != null) { entity.consumeContent(); } } catch(Exception e) { logger.error("ERROR IN DOLOGIN: Exception while creating uri"); logger.error(e.getMessage(),e); } return loginOK; } public String sendQuery(String scheme,String path, String query, String fragment) { String message=""; try { int queryport=0; if(scheme.equals("http")) { queryport=this.gsnhttpport; } else if(scheme.equals("https")) { queryport=this.gsnhttpsport; } URI uri = URIUtils.createURI(scheme, this.host, queryport, path,query, fragment); //HttpGet httpget = new HttpGet("http://localhost:22001/gsn?REQUEST=116&name=remotepushtest"); HttpGet httpget = new HttpGet(uri); logger.info("executing request" + httpget.getRequestLine()); HttpResponse response = httpclient.execute(httpget); HttpEntity firstentity = response.getEntity(); logger.info("----------------------------------------"); logger.info(response.getStatusLine()); if (firstentity != null) { logger.info("Response content length: " + firstentity.getContentLength()); message=EntityUtils.toString(firstentity); } if (firstentity != null) { firstentity.consumeContent(); } } catch(Exception e) { message="Exception in sendQuery : "+ e.getMessage() +" The cause : "+e.getCause(); } return message; } public void shutdownConnection() { this.httpclient.getConnectionManager().shutdown(); } }