cleaning hard 2
This commit is contained in:
parent
4046e03261
commit
4c9c01c531
61
lib/keycloak.ts
Normal file
61
lib/keycloak.ts
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
import KcAdminClient from '@keycloak/keycloak-admin-client';
|
||||||
|
import { Credentials } from '@keycloak/keycloak-admin-client/lib/utils/auth';
|
||||||
|
|
||||||
|
// Cache the KC admin client to avoid multiple initializations
|
||||||
|
let kcAdminClient: KcAdminClient | null = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a configured Keycloak admin client instance
|
||||||
|
*/
|
||||||
|
export async function getKeycloakAdminClient(): Promise<KcAdminClient> {
|
||||||
|
// If we already have a client initialized, return it
|
||||||
|
if (kcAdminClient) {
|
||||||
|
try {
|
||||||
|
// Try to refresh the token before returning
|
||||||
|
await kcAdminClient.auth({
|
||||||
|
grantType: 'refresh_token',
|
||||||
|
refreshToken: kcAdminClient.refreshToken
|
||||||
|
});
|
||||||
|
return kcAdminClient;
|
||||||
|
} catch (error) {
|
||||||
|
// Token refresh failed, initialize a new client
|
||||||
|
console.log('Token refresh failed, initializing new Keycloak admin client');
|
||||||
|
kcAdminClient = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize a new client
|
||||||
|
kcAdminClient = new KcAdminClient({
|
||||||
|
baseUrl: process.env.KEYCLOAK_URL || process.env.NEXT_PUBLIC_KEYCLOAK_ISSUER?.replace('/realms/cercle', '') || '',
|
||||||
|
realmName: process.env.KEYCLOAK_REALM || 'cercle',
|
||||||
|
});
|
||||||
|
|
||||||
|
// Authenticate the client
|
||||||
|
await kcAdminClient.auth({
|
||||||
|
grantType: 'client_credentials',
|
||||||
|
clientId: process.env.KEYCLOAK_ADMIN_CLIENT_ID || process.env.KEYCLOAK_CLIENT_ID || '',
|
||||||
|
clientSecret: process.env.KEYCLOAK_ADMIN_CLIENT_SECRET || process.env.KEYCLOAK_CLIENT_SECRET || '',
|
||||||
|
} as Credentials);
|
||||||
|
|
||||||
|
return kcAdminClient;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of users from Keycloak with optional search parameters
|
||||||
|
*/
|
||||||
|
export async function getKeycloakUsers(search?: string, first?: number, max?: number) {
|
||||||
|
const client = await getKeycloakAdminClient();
|
||||||
|
return client.users.find({
|
||||||
|
search,
|
||||||
|
first,
|
||||||
|
max,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a specific user from Keycloak by ID
|
||||||
|
*/
|
||||||
|
export async function getKeycloakUser(userId: string) {
|
||||||
|
const client = await getKeycloakAdminClient();
|
||||||
|
return client.users.findOne({ id: userId });
|
||||||
|
}
|
||||||
@ -43,10 +43,6 @@ const nextConfig = {
|
|||||||
compress: true,
|
compress: true,
|
||||||
// Enable production source maps for better performance debugging
|
// Enable production source maps for better performance debugging
|
||||||
productionBrowserSourceMaps: false,
|
productionBrowserSourceMaps: false,
|
||||||
// Optimize fonts
|
|
||||||
optimizeFonts: true,
|
|
||||||
// Enable React strict mode for better development experience
|
|
||||||
reactStrictMode: true,
|
|
||||||
// Reduce build output size
|
// Reduce build output size
|
||||||
poweredByHeader: false,
|
poweredByHeader: false,
|
||||||
// Add cache headers to immutable assets
|
// Add cache headers to immutable assets
|
||||||
|
|||||||
32
node_modules/.package-lock.json
generated
vendored
32
node_modules/.package-lock.json
generated
vendored
@ -426,6 +426,20 @@
|
|||||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@keycloak/keycloak-admin-client": {
|
||||||
|
"version": "26.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@keycloak/keycloak-admin-client/-/keycloak-admin-client-26.2.2.tgz",
|
||||||
|
"integrity": "sha512-H0U3jjkXRHR0zU9xVcv5+GzWpDCAEab4NHKCbilVZSjrSLzqbGLMTEiGAo81NpHilseTiFpzEkz2qFm6/Hm0BA==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"camelize-ts": "^3.0.0",
|
||||||
|
"url-join": "^5.0.0",
|
||||||
|
"url-template": "^3.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@next/bundle-analyzer": {
|
"node_modules/@next/bundle-analyzer": {
|
||||||
"version": "15.3.1",
|
"version": "15.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-15.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-15.3.1.tgz",
|
||||||
@ -2952,6 +2966,15 @@
|
|||||||
"node": ">= 6"
|
"node": ">= 6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/camelize-ts": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/camelize-ts/-/camelize-ts-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-cgRwKKavoDKLTjO4FQTs3dRBePZp/2Y9Xpud0FhuCOTE86M2cniKN4CCXgRnsyXNMmQMifVHcv6SPaMtTx6ofQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001692",
|
"version": "1.0.30001692",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz",
|
||||||
@ -7106,6 +7129,15 @@
|
|||||||
"requires-port": "^1.0.0"
|
"requires-port": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/url-template": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/url-template/-/url-template-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-4oszoaEKE/mQOtAmdMWqIRHmkxWkUZMnXFnjQ5i01CuRSK3uluxcH1MRVVVWmhlnzT1SCDfKxxficm2G37qzCA==",
|
||||||
|
"license": "BSD-3-Clause",
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/use-callback-ref": {
|
"node_modules/use-callback-ref": {
|
||||||
"version": "1.3.3",
|
"version": "1.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
|
||||||
|
|||||||
33
package-lock.json
generated
33
package-lock.json
generated
@ -10,6 +10,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fullcalendar/react": "^6.1.15",
|
"@fullcalendar/react": "^6.1.15",
|
||||||
"@hookform/resolvers": "^3.9.1",
|
"@hookform/resolvers": "^3.9.1",
|
||||||
|
"@keycloak/keycloak-admin-client": "^26.2.2",
|
||||||
"@nextcloud/files": "^2.1.0",
|
"@nextcloud/files": "^2.1.0",
|
||||||
"@prisma/client": "^6.4.1",
|
"@prisma/client": "^6.4.1",
|
||||||
"@radix-ui/react-accordion": "^1.2.2",
|
"@radix-ui/react-accordion": "^1.2.2",
|
||||||
@ -1292,6 +1293,20 @@
|
|||||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@keycloak/keycloak-admin-client": {
|
||||||
|
"version": "26.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@keycloak/keycloak-admin-client/-/keycloak-admin-client-26.2.2.tgz",
|
||||||
|
"integrity": "sha512-H0U3jjkXRHR0zU9xVcv5+GzWpDCAEab4NHKCbilVZSjrSLzqbGLMTEiGAo81NpHilseTiFpzEkz2qFm6/Hm0BA==",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"camelize-ts": "^3.0.0",
|
||||||
|
"url-join": "^5.0.0",
|
||||||
|
"url-template": "^3.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@next/bundle-analyzer": {
|
"node_modules/@next/bundle-analyzer": {
|
||||||
"version": "15.3.1",
|
"version": "15.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-15.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-15.3.1.tgz",
|
||||||
@ -3930,6 +3945,15 @@
|
|||||||
"node": ">= 6"
|
"node": ">= 6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/camelize-ts": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/camelize-ts/-/camelize-ts-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-cgRwKKavoDKLTjO4FQTs3dRBePZp/2Y9Xpud0FhuCOTE86M2cniKN4CCXgRnsyXNMmQMifVHcv6SPaMtTx6ofQ==",
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001692",
|
"version": "1.0.30001692",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz",
|
||||||
@ -8084,6 +8108,15 @@
|
|||||||
"requires-port": "^1.0.0"
|
"requires-port": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/url-template": {
|
||||||
|
"version": "3.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/url-template/-/url-template-3.1.1.tgz",
|
||||||
|
"integrity": "sha512-4oszoaEKE/mQOtAmdMWqIRHmkxWkUZMnXFnjQ5i01CuRSK3uluxcH1MRVVVWmhlnzT1SCDfKxxficm2G37qzCA==",
|
||||||
|
"license": "BSD-3-Clause",
|
||||||
|
"engines": {
|
||||||
|
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/use-callback-ref": {
|
"node_modules/use-callback-ref": {
|
||||||
"version": "1.3.3",
|
"version": "1.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
|
||||||
|
|||||||
@ -11,6 +11,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fullcalendar/react": "^6.1.15",
|
"@fullcalendar/react": "^6.1.15",
|
||||||
"@hookform/resolvers": "^3.9.1",
|
"@hookform/resolvers": "^3.9.1",
|
||||||
|
"@keycloak/keycloak-admin-client": "^26.2.2",
|
||||||
"@nextcloud/files": "^2.1.0",
|
"@nextcloud/files": "^2.1.0",
|
||||||
"@prisma/client": "^6.4.1",
|
"@prisma/client": "^6.4.1",
|
||||||
"@radix-ui/react-accordion": "^1.2.2",
|
"@radix-ui/react-accordion": "^1.2.2",
|
||||||
|
|||||||
19
yarn.lock
19
yarn.lock
@ -222,6 +222,15 @@
|
|||||||
"@jridgewell/resolve-uri" "^3.1.0"
|
"@jridgewell/resolve-uri" "^3.1.0"
|
||||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||||
|
|
||||||
|
"@keycloak/keycloak-admin-client@^26.2.2":
|
||||||
|
version "26.2.2"
|
||||||
|
resolved "https://registry.npmjs.org/@keycloak/keycloak-admin-client/-/keycloak-admin-client-26.2.2.tgz"
|
||||||
|
integrity sha512-H0U3jjkXRHR0zU9xVcv5+GzWpDCAEab4NHKCbilVZSjrSLzqbGLMTEiGAo81NpHilseTiFpzEkz2qFm6/Hm0BA==
|
||||||
|
dependencies:
|
||||||
|
camelize-ts "^3.0.0"
|
||||||
|
url-join "^5.0.0"
|
||||||
|
url-template "^3.1.1"
|
||||||
|
|
||||||
"@next/bundle-analyzer@^15.3.1":
|
"@next/bundle-analyzer@^15.3.1":
|
||||||
version "15.3.1"
|
version "15.3.1"
|
||||||
resolved "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-15.3.1.tgz"
|
resolved "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-15.3.1.tgz"
|
||||||
@ -1432,6 +1441,11 @@ camelcase-css@^2.0.1:
|
|||||||
resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz"
|
resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz"
|
||||||
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
|
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
|
||||||
|
|
||||||
|
camelize-ts@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.npmjs.org/camelize-ts/-/camelize-ts-3.0.0.tgz"
|
||||||
|
integrity sha512-cgRwKKavoDKLTjO4FQTs3dRBePZp/2Y9Xpud0FhuCOTE86M2cniKN4CCXgRnsyXNMmQMifVHcv6SPaMtTx6ofQ==
|
||||||
|
|
||||||
caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688:
|
caniuse-lite@^1.0.30001579, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688:
|
||||||
version "1.0.30001692"
|
version "1.0.30001692"
|
||||||
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz"
|
resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001692.tgz"
|
||||||
@ -3914,6 +3928,11 @@ url-parse@^1.5.10:
|
|||||||
querystringify "^2.1.1"
|
querystringify "^2.1.1"
|
||||||
requires-port "^1.0.0"
|
requires-port "^1.0.0"
|
||||||
|
|
||||||
|
url-template@^3.1.1:
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.npmjs.org/url-template/-/url-template-3.1.1.tgz"
|
||||||
|
integrity sha512-4oszoaEKE/mQOtAmdMWqIRHmkxWkUZMnXFnjQ5i01CuRSK3uluxcH1MRVVVWmhlnzT1SCDfKxxficm2G37qzCA==
|
||||||
|
|
||||||
use-callback-ref@^1.3.3:
|
use-callback-ref@^1.3.3:
|
||||||
version "1.3.3"
|
version "1.3.3"
|
||||||
resolved "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz"
|
resolved "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user