From b0a63b8ac92ceb16eb0cc107f8308f53258426a1 Mon Sep 17 00:00:00 2001
From: Alfredo Chissotti <20033498@studenti.uniupo.it>
Date: Sun, 14 Aug 2022 18:28:12 +0200
Subject: [PATCH] keycloack x server

---
 WebServer/src/code/Home.java | 68 +++++++++++++++++++++++++++++++-----
 1 file changed, 59 insertions(+), 9 deletions(-)

diff --git a/WebServer/src/code/Home.java b/WebServer/src/code/Home.java
index 1ed4049..166d2fe 100644
--- a/WebServer/src/code/Home.java
+++ b/WebServer/src/code/Home.java
@@ -9,6 +9,9 @@ import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.json.JSONException;
+import org.json.JSONObject;
+
 import com.sun.net.httpserver.HttpExchange;
 import com.sun.net.httpserver.HttpHandler;
 
@@ -17,8 +20,9 @@ public class Home implements HttpHandler {
     @Override
     public void handle(HttpExchange exchange) throws IOException {
         URI requestURI = exchange.getRequestURI();
-
-        if(requestURI.compareTo(URI.create("/")) != 0) {
+        boolean wantsHome = Helper.compareText(requestURI.toString(),URI.create("/").toString());
+        boolean wantsKeycloak = Helper.compareText(requestURI.toString(),URI.create("/keycloack.json").toString());
+        if(!wantsHome || !wantsKeycloak) {
             String error = "Invalid URI";
             OutputStream os = exchange.getResponseBody();
             exchange.sendResponseHeaders(400, error.getBytes().length);
@@ -29,14 +33,27 @@ public class Home implements HttpHandler {
 
         String requestMethod = exchange.getRequestMethod();
         if (Helper.compareText(requestMethod, "GET")) {
-            String response = getHomePage();
             List<String> strlist = new ArrayList<>();
-            strlist.add("text/html");
-            exchange.getResponseHeaders().put("content-type", strlist);
-            exchange.sendResponseHeaders(200, response.getBytes().length);
-            OutputStream os = exchange.getResponseBody();
-            os.write(response.getBytes());
-            os.close();
+            String response = null;
+            if(wantsHome){
+                response = getHomePage();
+                strlist.add("text/html");
+            } else if (wantsKeycloak){
+                response = getKeycloak();
+                strlist.add("text/json");
+            }
+            if(!Helper.compareText(response, "fail")){
+                exchange.getResponseHeaders().put("content-type", strlist);
+                exchange.sendResponseHeaders(200, response.getBytes().length);
+                OutputStream os = exchange.getResponseBody();
+                os.write(response.getBytes());
+                os.close();
+            } else {
+                exchange.sendResponseHeaders(500, response.getBytes().length);
+                OutputStream os = exchange.getResponseBody();
+                os.write(response.getBytes());
+                os.close();
+            }
         } else {
             Helper.methodNotAllowed(exchange);
         }
@@ -94,6 +111,39 @@ public class Home implements HttpHandler {
         return answer.toString();
     }
 
+    private static String getKeycloak(){
+        String page = Server.CLIENT_PATH+"/keycloak.json";
+        BufferedReader bufferedReader = null;
+        StringBuilder answer = new StringBuilder();
+        try {
+            FileReader fileReader = new FileReader(page);
+            bufferedReader = new BufferedReader(fileReader);
+            String line;
+            while ((line = bufferedReader.readLine()) != null) {
+                answer.append(line.trim());
+            }
+
+            JSONObject js = new JSONObject(answer.toString());
+            return js.toString();
+        } catch (FileNotFoundException ex) {
+            System.out.println("Unable to open file '" + page + "'");
+            return "fail";
+        } catch (IOException ex) {
+            System.out.println("Error reading file '" + page + "'");
+            return "fail";
+        } catch (JSONException e) {
+            System.out.println("The file doesn't contain a JSON '" + page + "'");
+            return "fail";
+        } finally {
+            try{
+                if(bufferedReader != null)
+                    bufferedReader.close();
+            } catch (IOException ex){
+                System.out.println("Error closing bufferedReader");
+            }
+        }
+    }
+
     private static String getExtension(String file) {
         int i = file.length() - 1;
         while (i > 0 && file.charAt(i) != '.' && file.charAt(i) != '/')
-- 
GitLab