From: Mathieu Baudier Date: Tue, 19 Jul 2022 11:05:08 +0000 (+0200) Subject: Introduce CMS client X-Git-Tag: v2.3.10~109 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=b1a235695e876269172d9db401eb0a25af938a30;p=lgpl%2Fargeo-commons.git Introduce CMS client --- 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 index c6cb88aea..000000000 --- a/org.argeo.cms.ee/src/org/argeo/cms/websocket/server/WebSocketEventClient.java +++ /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 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 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 index 000000000..e530f5550 --- /dev/null +++ b/org.argeo.cms/src/org/argeo/cms/client/SpnegoHttpClient.java @@ -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= " + + SpnegoHttpClient.class.getName() + " "); + 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() { +// +// 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 bodyHandler = BodyHandlers.ofString(); + HttpResponse 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 index 000000000..aab806a46 --- /dev/null +++ b/org.argeo.cms/src/org/argeo/cms/client/WebSocketEventClient.java @@ -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() + " "); + 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 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 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 index 000000000..dc540ddb2 --- /dev/null +++ b/org.argeo.cms/src/org/argeo/cms/client/jaas.cfg @@ -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 index 42b2a2d12..000000000 --- a/org.argeo.cms/src/org/argeo/cms/internal/http/client/SpnegoHttpClient.java +++ /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= " - + SpnegoHttpClient.class.getName() + " "); - 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() { -// -// 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 bodyHandler = BodyHandlers.ofString(); - HttpResponse 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 index dc540ddb2..000000000 --- a/org.argeo.cms/src/org/argeo/cms/internal/http/client/jaas.cfg +++ /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