|
|
- import { useCallback, useEffect } from "react";
- import Stomp from "webstomp-client";
- import SockJS from "sockjs-client";
- import { proxy } from "../package.json";
-
- import logo from "./logo.svg";
- import "./App.css";
-
- let stomp;
-
- const connect = async (token) => {
- if (stomp != null) return;
- let url = "/api/ws";
- let message = "Connect to Websocket";
- // webpack-dev-server also uses sockjs-client;
- // default proxy may incorrectly route requests
- // resulting in transport switch,
- // which is slow on https.
- //
- // Hence, we cannot rely on default proxy.
- // Requests should be sent directly to a websocket.
- if (process.env.NODE_ENV !== "production") {
- url = `${proxy}${url}`;
- message += " Directly";
- }
- console.info(message);
- const sock = new SockJS(url);
- stomp = Stomp.over(sock);
-
- // disable stomp logging
- stomp.debug = (msg) => {};
-
- stomp.connect(
- // { "X-Authorization": token.split(".").slice(0, 2).join(".") + ".alkdjalskdjals" },
- { "Authorization": `Bearer ${token}` },
- (frame) => {
- console.log("Connected", frame);
-
- const requestUrl = "/app/simple";
- let params = {
- tratata: 1,
- gratata: 0,
- };
-
- stomp.subscribe("/user/simple", (results) => {
- console.log(`msg from server: ${results.body}`);
- });
-
- stomp.send(requestUrl, JSON.stringify(params));
- },
- (error) => {
- console.error("Disconnected: ", error);
- },
- );
- };
-
- function App({ keycloak }) {
- const fetchFromApi = useCallback(
- async (url) => {
- const response = await fetch(url, {
- headers: {
- Authorization: `Bearer ${keycloak.token}`,
- },
- });
- if (response.ok) {
- alert(await response.text());
- } else {
- console.error(response.statusText);
- }
- },
- [keycloak.token],
- );
-
- useEffect(() => {
- connect(keycloak.token);
- }, [keycloak.token]);
-
- return (
- <div className="App">
- <header className="App-header">
- <img src={logo} className="App-logo" alt="logo" />
- <p>
- Edit <code>src/App.js</code> and save to reload.
- </p>
- <span
- className="App-link"
- onClick={(e) => {
- e.preventDefault();
- fetchFromApi("/api/userinfo");
- }}
- >
- Get user email
- </span>
- <br />
- <span
- className="App-link"
- onClick={(e) => {
- e.preventDefault();
- fetchFromApi("/api/users");
- }}
- >
- Get all users
- </span>
- <br />
- <span
- className="App-link"
- onClick={(e) => {
- e.preventDefault();
- keycloak.logout({
- redirectUri: "http://localhost:3000",
- });
- }}
- >
- Logout
- </span>
- </header>
- </div>
- );
- }
-
- export default App;
|