test_realm.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import axios from 'axios';
  2. import dotenv from 'dotenv';
  3. dotenv.config();
  4. const KEYCLOAK_URL = process.env.KEYCLOAK_URL || 'https://auth.mrx8086.com';
  5. const NEXTCLOUD_CLIENT_ID = process.env.NEXTCLOUD_CLIENT_ID || 'nextcloud';
  6. const TESTADMIN_USERNAME = "testadmin@mrx8086.com";
  7. const TESTADMIN_PASSWORD = process.env.TESTADMIN_PASSWORD;
  8. const REALM_NAME = 'office-automation';
  9. const CLIENT_SECRET = process.env.KEYCLOAK_NEXTCLOUD_CLIENT_SECRET;
  10. // Hilfsfunktion für API-Fehlerbehandlung
  11. const handleAxiosError = (error, operation, config, response) => {
  12. console.error(`Error during ${operation}:`);
  13. if (config) {
  14. console.error('Request:', {
  15. method: config.method,
  16. url: config.url,
  17. headers: config.headers,
  18. data: config.data,
  19. });
  20. }
  21. if (error.response) {
  22. console.error('Response:', {
  23. status: error.response.status,
  24. data: error.response.data
  25. });
  26. } else {
  27. console.error('Error Message:', error.message);
  28. }
  29. throw error;
  30. };
  31. // Funktion um den Access Token abzufragen
  32. async function getAccessToken(username, password) {
  33. try {
  34. const response = await axios.post(
  35. `${KEYCLOAK_URL}/realms/${REALM_NAME}/protocol/openid-connect/token`,
  36. new URLSearchParams({
  37. client_id: NEXTCLOUD_CLIENT_ID,
  38. client_secret: CLIENT_SECRET,
  39. grant_type: 'password',
  40. username: username,
  41. password: password,
  42. }),
  43. {
  44. headers: {
  45. 'Content-Type': 'application/x-www-form-urlencoded',
  46. },
  47. }
  48. );
  49. return response.data.access_token;
  50. } catch (error) {
  51. handleAxiosError(error, 'getting access token', error.config, error.response);
  52. return null;
  53. }
  54. }
  55. // Funktion zum Decodieren eines JWT-Tokens
  56. function decodeToken(token) {
  57. try {
  58. const base64Url = token.split('.')[1];
  59. const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
  60. const jsonPayload = decodeURIComponent(atob(base64).split('').map(function (c) {
  61. return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
  62. }).join(''));
  63. return JSON.parse(jsonPayload);
  64. } catch (error) {
  65. console.error("Error decoding token:", error.message);
  66. return null;
  67. }
  68. }
  69. // Prüfe ob ein Admin Token korrekt generiert werden kann
  70. async function testKeycloakLogin() {
  71. try {
  72. const accessToken = await getAccessToken(TESTADMIN_USERNAME, TESTADMIN_PASSWORD);
  73. if (!accessToken) {
  74. console.error('Failed to get access token.');
  75. return;
  76. }
  77. console.log('Access Token:', accessToken);
  78. const decodedToken = decodeToken(accessToken);
  79. if(decodedToken) {
  80. console.log('Decoded Access Token:', decodedToken);
  81. if (Array.isArray(decodedToken.groups) && decodedToken.groups.includes('/nextcloud-admins')){
  82. console.log("Admin Group is set correctly!")
  83. } else if (typeof decodedToken.groups === 'string' && decodedToken.groups.includes('/nextcloud-admins')) {
  84. console.log("Admin Group is set correctly!")
  85. }
  86. else {
  87. console.error("Admin Group is not set correctly!")
  88. }
  89. }
  90. } catch (error) {
  91. console.error('An error occurred:', error);
  92. }
  93. }
  94. testKeycloakLogin();