org.dasein.cloud.google.HttpsConnection.java Source code

Java tutorial

Introduction

Here is the source code for org.dasein.cloud.google.HttpsConnection.java

Source

/**
 * Copyright (C) 2012-2013 Dell, Inc
 * See annotations for authorship information
 *
 * ====================================================================
 * 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.dasein.cloud.google;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
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.conn.ClientConnectionManager;
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.StringEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;

import org.json.JSONArray;
import org.json.JSONObject;

public class HttpsConnection {

    /** E-mail address of the service account. */

    //   public static InputStream getResponseBody(HttpMethod conn) throws Exception {
    //      if (conn == null) throw new Exception("Not connected !");
    //      return conn.getResponseBodyAsStream();
    //   }

    public static File writeToFile(InputStream in, String name) throws Exception {

        BufferedReader is = new BufferedReader(new InputStreamReader(in));
        String line = "";
        File f = new File(name);
        OutputStream out = new FileOutputStream(f);
        while ((line = is.readLine()) != null) {
            out.write(line.getBytes());
        }
        out.close();
        in.close();
        return f;
    }

    public static String printFile(String file) throws Exception {
        BufferedReader inputFile = new BufferedReader(new FileReader(file));
        String line = "";
        String buff = "";
        // Read first line from file
        while ((line = inputFile.readLine()) != null)
            buff += line + "\n";
        return buff;
    }

    public static void main(String[] args) throws Exception {
        JSONArray a = new JSONArray(
                Arrays.asList(getJSON("676516473943-jt3udkrj247hvsuh1nrfivr5cfn84uio@developer.gserviceaccount.com",
                        "D:\\GCE-privatekey.p12")));
        System.out.println("Array : " + a.toString());

    }

    public static String getJSON(String iss, String p12File) throws Exception {
        System.out.println("ISS : " + iss);
        System.out.println("P12File : " + p12File);

        HttpClient client = new DefaultHttpClient();
        List formparams = new ArrayList();
        formparams.add(new BasicNameValuePair("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer"));
        formparams.add(new BasicNameValuePair("assertion", GenerateToken.getToken(iss, p12File)));
        UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");

        //      HttpClient client1 = new HttpClient();
        String url = "https://accounts.google.com/o/oauth2/token";
        //      System.out.println(url);
        //      PostMethod pm = new PostMethod(url); 
        //      pm.addRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        //      pm.addRequestHeader("Host", "accounts.google.com");
        ////      pm.addRequestHeader("Host", "accounts.google.com");
        //      pm.addParameter("grant_type", "urn:ietf:params:oauth:grant-type:jwt-bearer");
        //      pm.addParameter("assertion", GenerateToken.getData());
        ////      System.out.println(C.getData());
        //
        //      int statusCode = client1.executeMethod(pm);

        HttpPost httppost = new HttpPost(url);
        httppost.addHeader("Content-Type", "application/x-www-form-urlencoded");
        httppost.setEntity(entity);
        HttpResponse httpResponse1 = client.execute(httppost);
        int s1 = httpResponse1.getStatusLine().getStatusCode();
        if (s1 == HttpStatus.SC_OK) {
            try {
                //   InputStream in = getResponseBody(pm);
                InputStream in = httpResponse1.getEntity().getContent();
                writeToFile(in, "D:\\google_out.txt");
                System.out.println(printFile("D:\\google_out.txt"));
            } catch (Exception e) {
                System.out.println("No response body !");
            }
        }

        JSONObject obj1 = new JSONObject(printFile("D:\\google_out.txt"));
        String access_token = obj1.getString("access_token");
        String token_type = obj1.getString("token_type");
        String expires_in = obj1.getString("expires_in");
        String resource = "instances";
        url = "https://www.googleapis.com/compute/v1beta14/projects/enstratus.com:enstratus-dev/zones/us-east1-a/"
                + resource + "?access_token=" + access_token + "&token_type=Bearer&expires_in=3600";
        String str = "{"
                + "\"image\": \"https://www.googleapis.com/compute/v1beta14/projects/google/global/images/gcel-10-04-v20130104\","
                + "\"machineType\": \"https://www.googleapis.com/compute/v1beta14/projects/enstratus.com:enstratus-dev/global/machineTypes/n1-standard-1\","
                + "\"name\": \"trial\","
                + "\"zone\": \"https://www.googleapis.com/compute/v1beta14/projects/enstratus.com:enstratus-dev/zones/us-east1-a/\","
                + "\"networkInterfaces\": [ {  \"network\": \"https://www.googleapis.com/compute/v1beta14/projects/enstratus.com:enstratus-dev/networks/default\" } ],"
                + "\"disks\": [ { \"type\": \"EPHEMERAL\",  \"deleteOnTerminate\": true  } ], \"metadata\": { \"items\": [ ],  \"kind\": \"compute#metadata\" }}";
        System.out.println(str);
        JSONObject json = new JSONObject(str);
        System.out.println("POST Methods : " + url);
        StringEntity se = new StringEntity(str);
        JSONObject json1 = new JSONObject();
        json1.put("image",
                "https://www.googleapis.com/compute/v1beta14/projects/google/global/images/gcel-10-04-v20130104");
        json1.put("machineType",
                "https://www.googleapis.com/compute/v1beta14/projects/enstratus.com:enstratus-dev/global/machineTypes/n1-standard-1");
        json1.put("name", "trial");
        json1.put("zone",
                "https://www.googleapis.com/compute/v1beta14/projects/enstratus.com:enstratus-dev/zones/us-east1-a/");
        //json1.put("image", "https://www.googleapis.com/compute/v1beta13/projects/google/images/ubuntu-10-04-v20120621");
        System.out.println(" JSON 1 : " + json.toString() + " \n JSON 2 : " + json1.toString());
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
        nameValuePairs.add(new BasicNameValuePair("json", str));

        //              
        //               JSONObject jsonPayload = null;
        //               JSONObject obj = new JSONObject();
        //               
        //               try {
        //               obj.put("name", "vinotrial");
        //               obj.put("IPv4Range", "192.0.0.0/16");
        //               obj.put("description", "wrwer");
        //
        //               } catch (Exception e) {
        //                  
        //               }

        /*
        JSONObject jsonPayload = null;
        JSONObject obj = new JSONObject();
            
        try {
        obj.put("name", "testCreateStandardFirewall1734".toLowerCase());
        obj.put("description", "SSH allowed from anywhere");
        obj.put("network", "https://www.googleapis.com/compute/v1beta13/projects/enstratus.com:enstratus-dev/networks/default");
        JSONArray sranges = new JSONArray();
        JSONArray allowed = new JSONArray();
        JSONObject allowedtemp = new JSONObject();
        JSONArray ports = new JSONArray();
        allowedtemp.put("IPProtocol", "tcp");
        ports.put("22");
        allowedtemp.put("ports", ports);
        allowed.put(allowedtemp);
        //               
        //               JSONObject allowedtemp1 = new JSONObject();
        //               JSONArray ports1 = new JSONArray();
        //               allowedtemp1.put("IPProtocol", "udp");
        //               ports1.put("1-65535");
        //               allowedtemp1.put("ports", ports1);
        //               allowed.put(allowedtemp1);
        //               
        //               
        //               
        //               JSONObject allowedtemp2 = new JSONObject();
        //               
        //               allowedtemp2.put("IPProtocol", "icmp");
        //               
        //               allowed.put(allowedtemp2);
            
            
        sranges.put("0.0.0.0/0");
        obj.put("sourceRanges", sranges);
        obj.put("allowed", allowed);
        } catch (Exception e) {
             
        }
            
            
        */

        //UrlEncodedFormEntity entity1 = new UrlEncodedFormEntity(formparams1, "UTF-8");
        System.out.println("Creating an instance");
        HttpPost httppost1 = new HttpPost(url);
        httppost1.setHeader("Content-type", "application/json");
        //httppost1.addHeader("X-JavaScript-User-Agent", "trov");
        //httppost1.setEntity(se);
        //   httppost1.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        System.out.println("payload:" + json1.toString());
        System.out.println("url:" + url);
        StringEntity se1 = new StringEntity(json1.toString());
        se1.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
        httppost1.setEntity(se1);
        //

        HttpClient base = new DefaultHttpClient();
        SSLContext ctx = SSLContext.getInstance("TLS");
        X509TrustManager tm = new X509TrustManager() {

            public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {
            }

            public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {
            }

            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };
        ctx.init(null, new TrustManager[] { tm }, null);
        SSLSocketFactory ssf = new SSLSocketFactory(ctx);
        ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
        ClientConnectionManager ccm = base.getConnectionManager();
        SchemeRegistry sr = ccm.getSchemeRegistry();
        sr.register(new Scheme("https", ssf, 443));
        HttpClient client1 = new DefaultHttpClient(ccm);

        //HttpClient client1 = new DefaultHttpClient();
        HttpResponse httpResponse2 = client1.execute(httppost1);
        int s2 = httpResponse2.getStatusLine().getStatusCode();
        if (s2 == HttpStatus.SC_OK) {
            try {
                //   InputStream in = getResponseBody(pm);
                InputStream in = httpResponse2.getEntity().getContent();
                writeToFile(in, "D:\\google_out.txt");
                System.out.println(printFile("D:\\google_out.txt"));
            } catch (Exception e) {
                System.out.println("No response body !");
            }
        } else {
            System.out.println("Instance creation failed with error status " + s2);
            InputStream in = httpResponse2.getEntity().getContent();
            writeToFile(in, "D:\\google_out.txt");
            System.out.println(printFile("D:\\google_out.txt"));
        }

        String[] Zone = { "europe-west1-a", "europe-west1-b", "us-central1-a", "us-central1-b", "us-central2-a",
                "us-east1-a" };
        for (String zone : Zone) {
            //             {
            HttpClient client3 = new DefaultHttpClient();
            resource = "instances";
            System.out.println("listing the instances !");
            //      url= "https://www.googleapis.com/compute/v1beta13/projects/google/kernels?access_token=" + access_token + "&token_type=Bearer&expires_in=3600" ;
            url = "https://www.googleapis.com/compute/v1beta14/projects/enstratus.com:enstratus-dev/zones/us-central1-a/"
                    + resource + "?access_token=" + access_token + "&token_type=Bearer&expires_in=3600";
            //   url = "https://www.googleapis.com/compute/v1beta13/projects/enstratus.com:enstratus-dev?access_token=" + access_token + "&token_type=Bearer&expires_in=3600" ;
            //         url = "https://www.googleapis.com/compute/v1beta14/projects/enstratus.com:enstratus-dev/zones/us-east1-a/instances?access_token=" + access_token + "&token_type=Bearer&expires_in=3600" ;
            System.out.println("url : -----------" + url);

            JSONArray items = new JSONArray();

            HttpGet method = new HttpGet(url);

            HttpResponse httpResponse = client3.execute(method);
            int s = httpResponse.getStatusLine().getStatusCode();

            if (s == HttpStatus.SC_OK) {

                try {
                    System.out.println("\nResponse from Server : ");
                    //InputStream in = getResponseBody(gm);
                    InputStream in = httpResponse.getEntity().getContent();
                    writeToFile(in, "D:\\calendar_out.txt");
                    String str1 = printFile("D:\\calendar_out.txt");
                    System.out.println(str1);
                    JSONObject jsonO = new JSONObject(str1);
                    items = (JSONArray) jsonO.get("items");

                    //   return printFile("D:\\calendar_out.txt");
                } catch (Exception e) {
                    System.out.println("No response body !" + e.getLocalizedMessage());
                }

            } else
                System.out.println(httpResponse);

            for (int i = 0; i < items.length(); i++) {

                JSONObject item = (JSONObject) items.get(i);
                String name = null;
                if (item.has("name"))
                    name = (String) item.get("name");
                //System.out.println("instance : " + name);

                if (!name.contains("default")) {
                    System.out.println("Deleting the instance " + name);
                    url = "https://www.googleapis.com/compute/v1beta14/projects/enstratus.com:enstratus-dev/zones/us-central1-a/"
                            + resource + "/" + name + "?access_token=" + access_token
                            + "&token_type=Bearer&expires_in=3600";
                    System.out.println("url : " + url);

                    HttpDelete delMethod = new HttpDelete(url);
                    HttpResponse httpResponse3 = client.execute(delMethod);
                    int s3 = httpResponse3.getStatusLine().getStatusCode();
                    if (s3 == HttpStatus.SC_OK) {

                        try {
                            System.out.println("\nResponse from Server : ");
                            //InputStream in = getResponseBody(gm);
                            InputStream in = httpResponse3.getEntity().getContent();
                            writeToFile(in, "D:\\calendar_out.txt");
                            System.out.println(printFile("D:\\calendar_out.txt"));
                            //   return printFile("D:\\calendar_out.txt");
                        } catch (Exception e) {
                            System.out.println("No response body !");

                        }

                    } else {
                        System.out.println("Deleting failed with status : " + s3);
                        try {
                            InputStream in = httpResponse3.getEntity().getContent();
                            writeToFile(in, "D:\\calendar_out.txt");
                            System.out.println(printFile("D:\\calendar_out.txt"));
                        } catch (Exception e) {

                        }
                    }
                }
            }

            //      https://www.googleapis.com/compute/v1beta13/projects/enstratus.com%3Aenstratus-dev/instances/trial
            //      GetMethod gm      = new GetMethod(url); 
            //      HttpMethodParams params = new HttpMethodParams();
            ////      params.setParameter("calendarId", "vidhyanallasamy%40gmail.com");
            //      gm.setParams(params);
            //
            //      statusCode = client1.executeMethod(gm);
            //      System.out.println("\nStatus Code : " + statusCode);
            //
            //      try {
            //         System.out.println("\nResponse from Server : ");
            //         InputStream in = getResponseBody(gm);
            //         writeToFile(in, "D:\\calendar_out.txt");
            //         System.out.println(printFile("D:\\calendar_out.txt"));
            //      } catch (Exception e) {
            //         System.out.println("No response body !");
            //      }\
        }
        return null;
    }

}