import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class Guacamole {
   
	
    public static void main(String[] args) throws Exception {
		 HttpClient client = HttpClientBuilder.create().build();
	  
		
		 // Etape 1 Token POST
		 String DNS="http://192.168.157.129:8080/";
	       HttpPost post = new HttpPost(DNS+"guacamole/api/tokens");
	   
	        // Create username and paswword for HttpPost parameters
	        List<NameValuePair> arguments = new ArrayList<>(3);
	        arguments.add(new BasicNameValuePair("username", "superadmin"));
	        arguments.add(new BasicNameValuePair("password", "superadmin"));
	        try {
	        	
	            post.setEntity(new UrlEncodedFormEntity(arguments));
	            HttpResponse response = client.execute(post);
	           
	            String responsestring = EntityUtils.toString(response.getEntity());
	            
	            //Convert String to JSON
	            JsonParser jsonParser = new JsonParser();
	            JsonObject responseJSON = jsonParser.parse(responsestring).getAsJsonObject();
	            JsonElement TokenJSON = responseJSON.get("authToken");
	            String Token = TokenJSON.getAsString();
	        	
	            System.out.println(Token);
	       
	            
	            
	       
	           //Etape2 id session & uuid 
	             HttpGet GetToken=new HttpGet(DNS+"guacamole/api/session/data/mysql/activeConnections?token="+Token);
	            HttpResponse responseToken = client.execute(GetToken);
	            String responseGetTokenstring = EntityUtils.toString(responseToken.getEntity()); 
	            //Convert String to JSON

	            JSONObject obj= new JSONObject(responseGetTokenstring);
	            
	          	
	            Iterator<String> keys = obj.keys();
	            System.out.println(Token);
               // get some_name_i_wont_know in str_Name

	            String str_Name=keys.next(); 

	                String value = obj.optString(str_Name);

	                System.out.println(value);
	                //convert string to json

	                JsonObject responseJSON2 = jsonParser.parse(value).getAsJsonObject();

	                //System.out.println(responseJSON2);
	                JsonElement a1 = responseJSON2.get("identifier");

	                String id = a1.getAsString();

	                System.out.println(id);

	                JsonElement bb = responseJSON2.get("connectionIdentifier");

	                String idcon = bb.getAsString();

	                System.out.println(idcon); 
	                
	                
	          
	                
				// Étape 3  Get the key
	               
	            
	            

		   
	                HttpGet GetKey=new HttpGet(DNS+"guacamole/api/session/tunnels/"+id+"/activeConnection/sharingCredentials/"+idcon+"?token="+Token); 
	                	

	                HttpResponse responseGetKey = client.execute(GetKey);

	                String responsestringGetKey = EntityUtils.toString(responseGetKey.getEntity());


	                JsonObject responseJSONGetKey = jsonParser.parse(responsestringGetKey).getAsJsonObject();
		           

  		            System.out.println(responseJSONGetKey);

  		            JsonElement message = responseJSONGetKey.get("message");

  		            String messageGet = message.getAsString();

  		            System.out.println(messageGet);
  		            System.out.println(Token);
     
    	        	
	                
	    			} catch (IOException e) {
	            e.printStackTrace();
	        }
	    
}	}
       

	

