1
1
const axios = require ( "axios" ) ;
2
+ const fs = require ( "fs" ) ;
2
3
3
4
// Load the JSON payload
4
5
const payload = require ( "./keycloak-config.json" ) ;
6
+ const { get } = require ( "http" ) ;
5
7
6
8
const serverUrl =
7
- process . env . KEYCLOAK_SERVER_URL || "http://192.168.15.250 :9088" ;
9
+ process . env . KEYCLOAK_SERVER_URL || "http://192.168.100.57 :9088" ;
8
10
const adminUser = process . env . KEYCLOAK_ADMIN_USER || "admin" ;
9
11
const adminPassword =
10
12
process . env . KEYCLOAK_ADMIN_PASSWORD || "dev_password_only" ;
11
13
const adminClientId = process . env . KEYCLOAK_ADMIN_CLIENT_ID || "admin-cli" ;
12
14
const realm = process . env . KEYCLOAK_REALM || "platform-realm" ;
15
+ const serviceAccountUser =
16
+ process . env . KEYCLOAK_SERVICE_ACCOUNT_USER || "service-account" ; // Add service account user
13
17
14
18
// Function definitions
15
19
async function getAdminToken (
@@ -96,7 +100,7 @@ async function getOrCreateClient(client, keycloakBaseUrl, realm, adminToken) {
96
100
console . log ( `Updated client: ${ client . clientId } ` ) ;
97
101
} else {
98
102
// Client does not exist, create a new one
99
- const newClientResponse = await axios . post (
103
+ clientResponse = await axios . post (
100
104
`${ keycloakBaseUrl } /admin/realms/${ realm } /clients` ,
101
105
client ,
102
106
{
@@ -107,8 +111,8 @@ async function getOrCreateClient(client, keycloakBaseUrl, realm, adminToken) {
107
111
}
108
112
) ;
109
113
console . log ( `Created client: ${ client . clientId } ` ) ;
110
- return newClientResponse . data ;
111
114
}
115
+ return clientResponse . data ;
112
116
} catch ( error ) {
113
117
console . error (
114
118
"Error creating or updating client:" ,
@@ -147,40 +151,12 @@ async function processKeycloakPayload(
147
151
let roleId ;
148
152
149
153
try {
150
- // Create or update client
154
+ // Create of update client
151
155
152
156
// Step 1: Create or update a role for each client scope
153
- roleId = await getRoleByName ( name , keycloakBaseUrl , realm , adminToken ) ;
154
- if ( roleId ) {
155
- // Role exists, update it
156
- await axios . put (
157
- `${ keycloakBaseUrl } /admin/realms/${ realm } /roles-by-id/${ roleId } ` ,
158
- role ,
159
- {
160
- headers : {
161
- Authorization : `Bearer ${ adminToken } ` ,
162
- "Content-Type" : "application/json" ,
163
- } ,
164
- }
165
- ) ;
166
- console . log ( `Updated role: ${ name } ` ) ;
167
- } else {
168
- // Role does not exist, create a new one
169
- const roleResponse = await axios . post (
170
- `${ keycloakBaseUrl } /admin/realms/${ realm } /roles` ,
171
- role ,
172
- {
173
- headers : {
174
- Authorization : `Bearer ${ adminToken } ` ,
175
- "Content-Type" : "application/json" ,
176
- } ,
177
- }
178
- ) ;
179
- roleId = roleResponse . data . id ;
180
- console . log ( `Created role: ${ name } ` ) ;
181
- }
182
157
183
158
// Step 2: Create or update the client scope
159
+
184
160
const clientScopeResponse = await axios . get (
185
161
`${ keycloakBaseUrl } /admin/realms/${ realm } /client-scopes` ,
186
162
{
@@ -230,10 +206,11 @@ async function processKeycloakPayload(
230
206
}
231
207
) ;
232
208
}
233
-
209
+ roleId = await getRoleByName ( name , keycloakBaseUrl , realm , adminToken ) ;
234
210
// Step 3: Map the created role to the client scope
235
211
await axios . post (
236
212
`${ keycloakBaseUrl } /admin/realms/${ realm } /client-scopes/${ clientScope . id } /scope-mappings/realm` ,
213
+
237
214
[ { id : roleId , name } ] ,
238
215
{
239
216
headers : {
@@ -249,9 +226,10 @@ async function processKeycloakPayload(
249
226
} )
250
227
) ;
251
228
252
- // Step 4: Create or update the service-account user
229
+ // Step 5: Create or update the service-account user
230
+ let userResponse , user , createdgroupResponse ;
253
231
try {
254
- const groupResponse = await axios . get (
232
+ let groupResponse = await axios . get (
255
233
`${ keycloakBaseUrl } /admin/realms/${ realm } /groups?search=${ defaultGroup } ` ,
256
234
{
257
235
headers : {
@@ -260,12 +238,11 @@ async function processKeycloakPayload(
260
238
} ,
261
239
}
262
240
) ;
263
-
264
241
let groupId = "" ;
265
242
if ( groupResponse . data . length > 0 ) {
266
243
// Group exists, update it
267
244
groupId = groupResponse . data [ 0 ] . id ;
268
- await axios . put (
245
+ createdgroupResponse = await axios . put (
269
246
`${ keycloakBaseUrl } /admin/realms/${ realm } /groups/${ groupId } ` ,
270
247
{
271
248
name : defaultGroup ,
@@ -279,7 +256,7 @@ async function processKeycloakPayload(
279
256
) ;
280
257
} else {
281
258
// Group does not exist, create a new one
282
- const createdGroupResponse = await axios . post (
259
+ createdgroupResponse = await axios . post (
283
260
`${ keycloakBaseUrl } /admin/realms/${ realm } /groups` ,
284
261
{
285
262
name : defaultGroup ,
@@ -291,10 +268,20 @@ async function processKeycloakPayload(
291
268
} ,
292
269
}
293
270
) ;
294
- groupId = createdGroupResponse . data . id ;
295
- console . log ( `Created group: ${ defaultGroup } ` ) ;
271
+ let createdGroup = await axios . get (
272
+ `${ keycloakBaseUrl } /admin/realms/${ realm } /groups?search=${ defaultGroup } ` ,
273
+ {
274
+ headers : {
275
+ Authorization : `Bearer ${ adminToken } ` ,
276
+ "Content-Type" : "application/json" ,
277
+ } ,
278
+ }
279
+ ) ;
280
+ console . log ( `Created group: ` , createdGroup ) ;
281
+ groupId = createdGroup . data [ 0 ] . id ;
296
282
}
297
283
284
+ const createdGroup = createdgroupResponse . data [ 0 ] ;
298
285
const usersResponse = await axios . get (
299
286
`${ keycloakBaseUrl } /admin/realms/${ realm } /users` ,
300
287
{
@@ -306,14 +293,13 @@ async function processKeycloakPayload(
306
293
) ;
307
294
308
295
const users = usersResponse . data ;
309
- const user = users . find (
310
- ( u ) => u . username === defaultUser . username . toLowerCase ( )
311
- ) ;
296
+ user = users . find ( ( u ) => u . username === defaultUser . username . toLowerCase ( ) ) ;
312
297
313
298
if ( user ) {
314
299
// User exists, update it
315
- await axios . put (
316
- `${ keycloakBaseUrl } /admin/realms/${ realm } /users/${ user . id } ` ,
300
+ const userId = user . id ;
301
+ userResponse = await axios . put (
302
+ `${ keycloakBaseUrl } /admin/realms/${ realm } /users/${ userId } ` ,
317
303
defaultUser ,
318
304
{
319
305
headers : {
@@ -325,7 +311,7 @@ async function processKeycloakPayload(
325
311
console . log ( `Updated user: ${ defaultUser . username } ` ) ;
326
312
} else {
327
313
// User does not exist, create a new one
328
- const userResponse = await axios . post (
314
+ userResponse = await axios . post (
329
315
`${ keycloakBaseUrl } /admin/realms/${ realm } /users` ,
330
316
defaultUser ,
331
317
{
@@ -338,9 +324,13 @@ async function processKeycloakPayload(
338
324
console . log ( `Created user: ${ defaultUser . username } ` ) ;
339
325
}
340
326
327
+ const createdUser = userResponse . data ;
328
+ console . log ( "here" , user ) ;
341
329
// Reset the password
342
- await axios . put (
343
- `${ keycloakBaseUrl } /admin/realms/${ realm } /users/${ user . id } /reset-password` ,
330
+ const newPass = await axios . put (
331
+ `${ keycloakBaseUrl } /admin/realms/${ realm } /users/${
332
+ userResponse . id ? userResponse . id : user . id
333
+ } /reset-password`,
344
334
resetPassword ,
345
335
{
346
336
headers : {
@@ -349,11 +339,12 @@ async function processKeycloakPayload(
349
339
} ,
350
340
}
351
341
) ;
352
- console . log ( `Reset password for user ${ defaultUser . username } ` ) ;
353
-
354
- // Add service-account user to the group
342
+ console . log ( `Reset password for user ${ createdUser } ` , newPass . data ) ;
343
+ // Step 5: Add service-account user to the group
355
344
await axios . put (
356
- `${ keycloakBaseUrl } /admin/realms/${ realm } /users/${ user . id } /groups/${ groupId } ` ,
345
+ `${ keycloakBaseUrl } /admin/realms/${ realm } /users/${
346
+ createdUser . id ? createdUser . id : user . id
347
+ } /groups/${ groupId } `,
357
348
{ } ,
358
349
{
359
350
headers : {
@@ -362,22 +353,21 @@ async function processKeycloakPayload(
362
353
} ,
363
354
}
364
355
) ;
365
- console . log ( `Added user ${ defaultUser . username } to group ${ defaultGroup } ` ) ;
366
-
356
+ console . log ( `Added ${ createdUser } to group ${ createdgroupResponse } ` ) ;
367
357
const uniqueRolesArray = await getUniqueRolesArray ( payload ) ;
368
358
for ( const role of uniqueRolesArray ) {
369
- const roleId = await getRoleByName (
359
+ const roleID = await getRoleByName (
370
360
role . name ,
371
361
keycloakBaseUrl ,
372
362
realm ,
373
363
adminToken
374
364
) ;
375
-
376
- await axios . post (
365
+ console . log ( roleID ) ;
366
+ const roleMapping = await axios . post (
377
367
`${ keycloakBaseUrl } /admin/realms/${ realm } /groups/${ groupId } /role-mappings/realm` ,
378
368
[
379
369
{
380
- id : roleId ,
370
+ id : roleID ,
381
371
clientRole : false ,
382
372
composite : false ,
383
373
containerId : realm ,
@@ -392,7 +382,7 @@ async function processKeycloakPayload(
392
382
} ,
393
383
}
394
384
) ;
395
- console . log ( `Added role mapping to group: ${ role . name } ` ) ;
385
+ console . log ( `Added role mapping to group ${ roleMapping } ` , role ) ;
396
386
}
397
387
} catch ( error ) {
398
388
console . error (
@@ -401,8 +391,23 @@ async function processKeycloakPayload(
401
391
) ;
402
392
throw error ;
403
393
}
404
- }
405
394
395
+ // Step 6: Add role mapping to the group
396
+ // Extract unique roles
397
+
398
+ // const rolesToBeMapped = [];
399
+ // uniqueRolesArray.forEach(async (role) => {
400
+ // const rolesToBeMappedPayload = await getRoleByName(
401
+ // role.name,
402
+ // keycloakBaseUrl,
403
+ // realm,
404
+ // adminToken
405
+ // );
406
+ // console.log(rolesToBeMappedPayload);
407
+ // rolesToBeMapped.push(rolesToBeMappedPayload);
408
+ // });
409
+ // console.log("sdsdsd", rolesToBeMapped);
410
+ }
406
411
async function getUniqueRolesArray ( payload ) {
407
412
const rolesSet = new Set ( ) ;
408
413
const { clientScopes } = payload ;
@@ -417,7 +422,6 @@ async function getUniqueRolesArray(payload) {
417
422
const uniqueRolesArray = Array . from ( rolesSet ) . map ( ( role ) => JSON . parse ( role ) ) ;
418
423
return uniqueRolesArray ;
419
424
}
420
-
421
425
// Call the function and handle the result
422
426
async function main ( ) {
423
427
try {
@@ -428,14 +432,19 @@ async function main() {
428
432
adminUser ,
429
433
adminPassword
430
434
) ;
431
-
432
435
const client = payload . client ;
433
- await getOrCreateClient ( client , serverUrl , realm , adminToken ) ;
434
-
436
+ const createorupdateClient = await getOrCreateClient (
437
+ client ,
438
+ serverUrl ,
439
+ realm ,
440
+ adminToken
441
+ ) ;
442
+ console . log ( createorupdateClient ) ;
435
443
const uniqueRolesArray = await getUniqueRolesArray ( payload ) ;
444
+
436
445
for ( const role of uniqueRolesArray ) {
437
446
const { name } = role ;
438
- const roleId = await getRoleByName ( name , serverUrl , realm , adminToken ) ;
447
+ let roleId = await getRoleByName ( name , serverUrl , realm , adminToken ) ;
439
448
440
449
if ( roleId ) {
441
450
// Role exists, update it
@@ -462,10 +471,10 @@ async function main() {
462
471
} ,
463
472
}
464
473
) ;
474
+ roleId = roleResponse . data . id ;
465
475
console . log ( `Created role: ${ name } ` ) ;
466
476
}
467
477
}
468
-
469
478
await processKeycloakPayload ( payload , serverUrl , realm , adminToken ) ;
470
479
console . log ( "Keycloak payload processed successfully" ) ;
471
480
} catch ( error ) {
0 commit comments