Introduce CMS client
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 19 Jul 2022 11:05:08 +0000 (13:05 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 19 Jul 2022 11:05:08 +0000 (13:05 +0200)
org.argeo.cms.ee/src/org/argeo/cms/websocket/server/WebSocketEventClient.java [deleted file]
org.argeo.cms/src/org/argeo/cms/client/SpnegoHttpClient.java [new file with mode: 0644]
org.argeo.cms/src/org/argeo/cms/client/WebSocketEventClient.java [new file with mode: 0644]
org.argeo.cms/src/org/argeo/cms/client/jaas.cfg [new file with mode: 0644]
org.argeo.cms/src/org/argeo/cms/internal/http/client/SpnegoHttpClient.java [deleted file]
org.argeo.cms/src/org/argeo/cms/internal/http/client/jaas.cfg [deleted file]

diff --git a/org.argeo.cms.ee/src/org/argeo/cms/websocket/server/WebSocketEventClient.java b/org.argeo.cms.ee/src/org/argeo/cms/websocket/server/WebSocketEventClient.java
deleted file mode 100644 (file)
index c6cb88a..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.argeo.cms.websocket.server;
-
-import java.net.URI;
-import java.net.http.HttpClient;
-import java.net.http.WebSocket;
-import java.nio.ByteBuffer;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.CompletionStage;
-
-/** Tests connectivity to the web socket server. */
-public class WebSocketEventClient {
-
-       public static void main(String[] args) throws Exception {
-               WebSocket.Listener listener = new WebSocket.Listener() {
-
-                       public CompletionStage<?> onText(WebSocket webSocket, CharSequence message, boolean last) {
-                               System.out.println(message);
-                               CompletionStage<String> res = CompletableFuture.completedStage(message.toString());
-                               return res;
-                       }
-
-                       @Override
-                       public CompletionStage<?> onPong(WebSocket webSocket, ByteBuffer message) {
-                               // System.out.println("Pong received.");
-                               return null;
-                       }
-
-               };
-
-               HttpClient client = HttpClient.newHttpClient();
-               CompletableFuture<WebSocket> ws = client.newWebSocketBuilder()
-                               .buildAsync(URI.create("ws://localhost:7070/cms/status/event/cms"), listener);
-               WebSocket webSocket = ws.get();
-               webSocket.request(Long.MAX_VALUE);
-
-               Runtime.getRuntime().addShutdownHook(new Thread(() -> webSocket.sendClose(WebSocket.NORMAL_CLOSURE, "")));
-
-               while (!webSocket.isInputClosed()) {
-                       webSocket.sendPing(ByteBuffer.allocate(0));
-                       Thread.sleep(10000);
-               }
-       }
-
-}
diff --git a/org.argeo.cms/src/org/argeo/cms/client/SpnegoHttpClient.java b/org.argeo.cms/src/org/argeo/cms/client/SpnegoHttpClient.java
new file mode 100644 (file)
index 0000000..e530f55
--- /dev/null
@@ -0,0 +1,101 @@
+package org.argeo.cms.client;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.net.http.HttpResponse.BodyHandler;
+import java.net.http.HttpResponse.BodyHandlers;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import javax.security.auth.Subject;
+import javax.security.auth.login.LoginContext;
+
+import org.argeo.cms.auth.RemoteAuthUtils;
+
+public class SpnegoHttpClient {
+       public static void main(String[] args) throws MalformedURLException {
+//             String principal = System.getProperty("javax.security.auth.login.name");
+               if (args.length == 0 ) {
+                       System.err.println("usage: java -Djavax.security.auth.login.name=<principal@REALM> "
+                                       + SpnegoHttpClient.class.getName() + " <url>");
+                       System.exit(1);
+                       return;
+               }
+               String url = args[0];
+               URL u = new URL(url);
+               String server = u.getHost();
+               
+               URL jaasUrl = SpnegoHttpClient.class.getResource("jaas.cfg");
+               System.setProperty("java.security.auth.login.config", jaasUrl.toExternalForm());
+               try {
+                       LoginContext lc = new LoginContext("SINGLE_USER");
+                       lc.login();
+
+//                     int responseCode = Subject.doAs(lc.getSubject(), new PrivilegedExceptionAction<Integer>() {
+//
+//                             public Integer run() throws Exception {
+
+//                                     InputStream ins = u.openConnection().getInputStream();
+//                                     BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
+//                                     String str;
+//                                     while ((str = reader.readLine()) != null)
+//                                             System.out.println(str);
+//                                     return 666;
+
+                       HttpClient httpClient = openHttpClient(lc.getSubject());
+                       String token = RemoteAuthUtils.getGssToken(lc.getSubject(), "HTTP", server);
+
+                       HttpRequest request = HttpRequest.newBuilder().uri(u.toURI()) //
+                                       .header("Authorization", "Negotiate " + token) //
+                                       .build();
+                       BodyHandler<String> bodyHandler = BodyHandlers.ofString();
+                       HttpResponse<String> response = httpClient.send(request, bodyHandler);
+                       System.out.println(response.body());
+                       int responseCode = response.statusCode();
+//                                     return response.statusCode();
+//                             }
+//                     });
+                       System.out.println("Reponse code: " + responseCode);
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+       }
+
+       private static HttpClient openHttpClient(Subject subject) {
+               HttpClient client = HttpClient.newBuilder() //
+//                             .sslContext(insecureContext()) //
+                               .version(HttpClient.Version.HTTP_1_1) //
+                               .build();
+
+               return client;
+       }
+
+       static SSLContext insecureContext() {
+               TrustManager[] noopTrustManager = new TrustManager[] { new X509TrustManager() {
+                       public void checkClientTrusted(X509Certificate[] xcs, String string) {
+                       }
+
+                       public void checkServerTrusted(X509Certificate[] xcs, String string) {
+                       }
+
+                       public X509Certificate[] getAcceptedIssuers() {
+                               return null;
+                       }
+               } };
+               try {
+                       SSLContext sc = SSLContext.getInstance("ssl");
+                       sc.init(null, noopTrustManager, null);
+                       return sc;
+               } catch (KeyManagementException | NoSuchAlgorithmException e) {
+                       throw new IllegalStateException("Cannot create insecure SSL context ", e);
+               }
+       }
+
+}
diff --git a/org.argeo.cms/src/org/argeo/cms/client/WebSocketEventClient.java b/org.argeo.cms/src/org/argeo/cms/client/WebSocketEventClient.java
new file mode 100644 (file)
index 0000000..aab806a
--- /dev/null
@@ -0,0 +1,49 @@
+package org.argeo.cms.client;
+
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.WebSocket;
+import java.nio.ByteBuffer;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionStage;
+
+/** Tests connectivity to the web socket server. */
+public class WebSocketEventClient {
+
+       public static void main(String[] args) throws Exception {
+               if (args.length == 0) {
+                       System.err.println("usage: java " + WebSocketEventClient.class.getName() + " <url>");
+                       System.exit(1);
+                       return;
+               }
+               URI uri = URI.create(args[0]);
+               WebSocket.Listener listener = new WebSocket.Listener() {
+
+                       public CompletionStage<?> onText(WebSocket webSocket, CharSequence message, boolean last) {
+                               System.out.println(message);
+                               CompletionStage<String> res = CompletableFuture.completedStage(message.toString());
+                               return res;
+                       }
+
+                       @Override
+                       public CompletionStage<?> onPong(WebSocket webSocket, ByteBuffer message) {
+                               // System.out.println("Pong received.");
+                               return null;
+                       }
+
+               };
+
+               HttpClient client = HttpClient.newHttpClient();
+               CompletableFuture<WebSocket> ws = client.newWebSocketBuilder().buildAsync(uri, listener);
+               WebSocket webSocket = ws.get();
+               webSocket.request(Long.MAX_VALUE);
+
+               Runtime.getRuntime().addShutdownHook(new Thread(() -> webSocket.sendClose(WebSocket.NORMAL_CLOSURE, "")));
+
+               while (!webSocket.isInputClosed()) {
+                       webSocket.sendPing(ByteBuffer.allocate(0));
+                       Thread.sleep(10000);
+               }
+       }
+
+}
diff --git a/org.argeo.cms/src/org/argeo/cms/client/jaas.cfg b/org.argeo.cms/src/org/argeo/cms/client/jaas.cfg
new file mode 100644 (file)
index 0000000..dc540dd
--- /dev/null
@@ -0,0 +1,10 @@
+SINGLE_USER {
+    com.sun.security.auth.module.Krb5LoginModule required
+     useTicketCache=true
+     debug=true;
+};
+
+com.sun.security.jgss.krb5.initiate {
+    com.sun.security.auth.module.Krb5LoginModule
+     required useTicketCache=true;
+};
\ No newline at end of file
diff --git a/org.argeo.cms/src/org/argeo/cms/internal/http/client/SpnegoHttpClient.java b/org.argeo.cms/src/org/argeo/cms/internal/http/client/SpnegoHttpClient.java
deleted file mode 100644 (file)
index 42b2a2d..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.argeo.cms.internal.http.client;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.http.HttpClient;
-import java.net.http.HttpRequest;
-import java.net.http.HttpResponse;
-import java.net.http.HttpResponse.BodyHandler;
-import java.net.http.HttpResponse.BodyHandlers;
-import java.security.KeyManagementException;
-import java.security.NoSuchAlgorithmException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import javax.security.auth.Subject;
-import javax.security.auth.login.LoginContext;
-
-import org.argeo.cms.auth.RemoteAuthUtils;
-
-public class SpnegoHttpClient {
-       public static void main(String[] args) throws MalformedURLException {
-//             String principal = System.getProperty("javax.security.auth.login.name");
-               if (args.length == 0 ) {
-                       System.err.println("usage: java -Djavax.security.auth.login.name=<principal@REALM> "
-                                       + SpnegoHttpClient.class.getName() + " <url>");
-                       System.exit(1);
-                       return;
-               }
-               String url = args[0];
-               URL u = new URL(url);
-               String server = u.getHost();
-               
-               URL jaasUrl = SpnegoHttpClient.class.getResource("jaas.cfg");
-               System.setProperty("java.security.auth.login.config", jaasUrl.toExternalForm());
-               try {
-                       LoginContext lc = new LoginContext("SINGLE_USER");
-                       lc.login();
-
-//                     int responseCode = Subject.doAs(lc.getSubject(), new PrivilegedExceptionAction<Integer>() {
-//
-//                             public Integer run() throws Exception {
-
-//                                     InputStream ins = u.openConnection().getInputStream();
-//                                     BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
-//                                     String str;
-//                                     while ((str = reader.readLine()) != null)
-//                                             System.out.println(str);
-//                                     return 666;
-
-                       HttpClient httpClient = openHttpClient(lc.getSubject());
-                       String token = RemoteAuthUtils.getGssToken(lc.getSubject(), "HTTP", server);
-
-                       HttpRequest request = HttpRequest.newBuilder().uri(u.toURI()) //
-                                       .header("Authorization", "Negotiate " + token) //
-                                       .build();
-                       BodyHandler<String> bodyHandler = BodyHandlers.ofString();
-                       HttpResponse<String> response = httpClient.send(request, bodyHandler);
-                       System.out.println(response.body());
-                       int responseCode = response.statusCode();
-//                                     return response.statusCode();
-//                             }
-//                     });
-                       System.out.println("Reponse code: " + responseCode);
-               } catch (Exception e) {
-                       e.printStackTrace();
-               }
-       }
-
-       private static HttpClient openHttpClient(Subject subject) {
-               HttpClient client = HttpClient.newBuilder() //
-//                             .sslContext(insecureContext()) //
-                               .version(HttpClient.Version.HTTP_1_1) //
-                               .build();
-
-               return client;
-       }
-
-       static SSLContext insecureContext() {
-               TrustManager[] noopTrustManager = new TrustManager[] { new X509TrustManager() {
-                       public void checkClientTrusted(X509Certificate[] xcs, String string) {
-                       }
-
-                       public void checkServerTrusted(X509Certificate[] xcs, String string) {
-                       }
-
-                       public X509Certificate[] getAcceptedIssuers() {
-                               return null;
-                       }
-               } };
-               try {
-                       SSLContext sc = SSLContext.getInstance("ssl");
-                       sc.init(null, noopTrustManager, null);
-                       return sc;
-               } catch (KeyManagementException | NoSuchAlgorithmException e) {
-                       throw new IllegalStateException("Cannot create insecure SSL context ", e);
-               }
-       }
-
-}
diff --git a/org.argeo.cms/src/org/argeo/cms/internal/http/client/jaas.cfg b/org.argeo.cms/src/org/argeo/cms/internal/http/client/jaas.cfg
deleted file mode 100644 (file)
index dc540dd..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-SINGLE_USER {
-    com.sun.security.auth.module.Krb5LoginModule required
-     useTicketCache=true
-     debug=true;
-};
-
-com.sun.security.jgss.krb5.initiate {
-    com.sun.security.auth.module.Krb5LoginModule
-     required useTicketCache=true;
-};
\ No newline at end of file