You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

121 lines
2.8 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. import { useCallback, useEffect } from "react";
  2. import Stomp from "webstomp-client";
  3. import SockJS from "sockjs-client";
  4. import { proxy } from "../package.json";
  5. import logo from "./logo.svg";
  6. import "./App.css";
  7. let stomp;
  8. const connect = async (token) => {
  9. if (stomp != null) return;
  10. let url = "/api/ws";
  11. let message = "Connect to Websocket";
  12. // webpack-dev-server also uses sockjs-client;
  13. // default proxy may incorrectly route requests
  14. // resulting in transport switch,
  15. // which is slow on https.
  16. //
  17. // Hence, we cannot rely on default proxy.
  18. // Requests should be sent directly to a websocket.
  19. if (process.env.NODE_ENV !== "production") {
  20. url = `${proxy}${url}`;
  21. message += " Directly";
  22. }
  23. console.info(message);
  24. const sock = new SockJS(url);
  25. stomp = Stomp.over(sock);
  26. // disable stomp logging
  27. stomp.debug = (msg) => {};
  28. stomp.connect(
  29. // { "X-Authorization": token.split(".").slice(0, 2).join(".") + ".alkdjalskdjals" },
  30. { "Authorization": `Bearer ${token}` },
  31. (frame) => {
  32. console.log("Connected", frame);
  33. const requestUrl = "/app/simple";
  34. let params = {
  35. tratata: 1,
  36. gratata: 0,
  37. };
  38. stomp.subscribe("/user/simple", (results) => {
  39. console.log(`msg from server: ${results.body}`);
  40. });
  41. stomp.send(requestUrl, JSON.stringify(params));
  42. },
  43. (error) => {
  44. console.error("Disconnected: ", error);
  45. },
  46. );
  47. };
  48. function App({ keycloak }) {
  49. const fetchFromApi = useCallback(
  50. async (url) => {
  51. const response = await fetch(url, {
  52. headers: {
  53. Authorization: `Bearer ${keycloak.token}`,
  54. },
  55. });
  56. if (response.ok) {
  57. alert(await response.text());
  58. } else {
  59. console.error(response.statusText);
  60. }
  61. },
  62. [keycloak.token],
  63. );
  64. useEffect(() => {
  65. connect(keycloak.token);
  66. }, [keycloak.token]);
  67. return (
  68. <div className="App">
  69. <header className="App-header">
  70. <img src={logo} className="App-logo" alt="logo" />
  71. <p>
  72. Edit <code>src/App.js</code> and save to reload.
  73. </p>
  74. <span
  75. className="App-link"
  76. onClick={(e) => {
  77. e.preventDefault();
  78. fetchFromApi("/api/userinfo");
  79. }}
  80. >
  81. Get user email
  82. </span>
  83. <br />
  84. <span
  85. className="App-link"
  86. onClick={(e) => {
  87. e.preventDefault();
  88. fetchFromApi("/api/users");
  89. }}
  90. >
  91. Get all users
  92. </span>
  93. <br />
  94. <span
  95. className="App-link"
  96. onClick={(e) => {
  97. e.preventDefault();
  98. keycloak.logout({
  99. redirectUri: "http://localhost:3000",
  100. });
  101. }}
  102. >
  103. Logout
  104. </span>
  105. </header>
  106. </div>
  107. );
  108. }
  109. export default App;