@@ -98,7 +98,7 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
98
98
}
99
99
} ,
100
100
onRequest : ( req , res , done ) => {
101
- verifyAuth ( [ AuthMode . JWT , AuthMode . API_KEY ] ) ( req , res , ( ) => {
101
+ verifyAuth ( [ AuthMode . JWT , AuthMode . API_KEY , AuthMode . IDENTITY_ACCESS_TOKEN ] ) ( req , res , ( ) => {
102
102
verifySuperAdmin ( req , res , done ) ;
103
103
} ) ;
104
104
} ,
@@ -139,7 +139,7 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
139
139
}
140
140
} ,
141
141
onRequest : ( req , res , done ) => {
142
- verifyAuth ( [ AuthMode . JWT ] ) ( req , res , ( ) => {
142
+ verifyAuth ( [ AuthMode . JWT , AuthMode . IDENTITY_ACCESS_TOKEN ] ) ( req , res , ( ) => {
143
143
verifySuperAdmin ( req , res , done ) ;
144
144
} ) ;
145
145
} ,
@@ -171,12 +171,16 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
171
171
identities : IdentitiesSchema . pick ( {
172
172
name : true ,
173
173
id : true
174
- } ) . array ( )
174
+ } )
175
+ . extend ( {
176
+ isInstanceAdmin : z . boolean ( )
177
+ } )
178
+ . array ( )
175
179
} )
176
180
}
177
181
} ,
178
182
onRequest : ( req , res , done ) => {
179
- verifyAuth ( [ AuthMode . JWT ] ) ( req , res , ( ) => {
183
+ verifyAuth ( [ AuthMode . JWT , AuthMode . IDENTITY_ACCESS_TOKEN ] ) ( req , res , ( ) => {
180
184
verifySuperAdmin ( req , res , done ) ;
181
185
} ) ;
182
186
} ,
@@ -206,7 +210,7 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
206
210
}
207
211
} ,
208
212
onRequest : ( req , res , done ) => {
209
- verifyAuth ( [ AuthMode . JWT ] ) ( req , res , ( ) => {
213
+ verifyAuth ( [ AuthMode . JWT , AuthMode . IDENTITY_ACCESS_TOKEN ] ) ( req , res , ( ) => {
210
214
verifySuperAdmin ( req , res , done ) ;
211
215
} ) ;
212
216
} ,
@@ -240,7 +244,7 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
240
244
}
241
245
} ,
242
246
onRequest : ( req , res , done ) => {
243
- verifyAuth ( [ AuthMode . JWT ] ) ( req , res , ( ) => {
247
+ verifyAuth ( [ AuthMode . JWT , AuthMode . IDENTITY_ACCESS_TOKEN ] ) ( req , res , ( ) => {
244
248
verifySuperAdmin ( req , res , done ) ;
245
249
} ) ;
246
250
} ,
@@ -265,7 +269,7 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
265
269
} )
266
270
} ,
267
271
onRequest : ( req , res , done ) => {
268
- verifyAuth ( [ AuthMode . JWT ] ) ( req , res , ( ) => {
272
+ verifyAuth ( [ AuthMode . JWT , AuthMode . IDENTITY_ACCESS_TOKEN ] ) ( req , res , ( ) => {
269
273
verifySuperAdmin ( req , res , done ) ;
270
274
} ) ;
271
275
} ,
@@ -293,7 +297,7 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
293
297
}
294
298
} ,
295
299
onRequest : ( req , res , done ) => {
296
- verifyAuth ( [ AuthMode . JWT ] ) ( req , res , ( ) => {
300
+ verifyAuth ( [ AuthMode . JWT , AuthMode . IDENTITY_ACCESS_TOKEN ] ) ( req , res , ( ) => {
297
301
verifySuperAdmin ( req , res , done ) ;
298
302
} ) ;
299
303
} ,
@@ -316,7 +320,7 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
316
320
} )
317
321
} ,
318
322
onRequest : ( req , res , done ) => {
319
- verifyAuth ( [ AuthMode . JWT ] ) ( req , res , ( ) => {
323
+ verifyAuth ( [ AuthMode . JWT , AuthMode . IDENTITY_ACCESS_TOKEN ] ) ( req , res , ( ) => {
320
324
verifySuperAdmin ( req , res , done ) ;
321
325
} ) ;
322
326
} ,
@@ -394,4 +398,141 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => {
394
398
} ;
395
399
}
396
400
} ) ;
401
+
402
+ server . route ( {
403
+ method : "DELETE" ,
404
+ url : "/identity-management/identities/:identityId/super-admin-access" ,
405
+ config : {
406
+ rateLimit : writeLimit
407
+ } ,
408
+ schema : {
409
+ params : z . object ( {
410
+ identityId : z . string ( )
411
+ } ) ,
412
+ response : {
413
+ 200 : z . object ( {
414
+ identity : IdentitiesSchema . pick ( {
415
+ name : true ,
416
+ id : true
417
+ } )
418
+ } )
419
+ }
420
+ } ,
421
+ onRequest : ( req , res , done ) => {
422
+ verifyAuth ( [ AuthMode . JWT , AuthMode . IDENTITY_ACCESS_TOKEN ] ) ( req , res , ( ) => {
423
+ verifySuperAdmin ( req , res , done ) ;
424
+ } ) ;
425
+ } ,
426
+ handler : async ( req ) => {
427
+ const identity = await server . services . superAdmin . deleteIdentitySuperAdminAccess (
428
+ req . params . identityId ,
429
+ req . permission . id
430
+ ) ;
431
+
432
+ return {
433
+ identity
434
+ } ;
435
+ }
436
+ } ) ;
437
+
438
+ server . route ( {
439
+ method : "DELETE" ,
440
+ url : "/user-management/users/:userId/admin-access" ,
441
+ config : {
442
+ rateLimit : writeLimit
443
+ } ,
444
+ schema : {
445
+ params : z . object ( {
446
+ userId : z . string ( )
447
+ } ) ,
448
+ response : {
449
+ 200 : z . object ( {
450
+ user : UsersSchema . pick ( {
451
+ username : true ,
452
+ firstName : true ,
453
+ lastName : true ,
454
+ email : true ,
455
+ id : true
456
+ } )
457
+ } )
458
+ }
459
+ } ,
460
+ onRequest : ( req , res , done ) => {
461
+ verifyAuth ( [ AuthMode . JWT , AuthMode . IDENTITY_ACCESS_TOKEN ] ) ( req , res , ( ) => {
462
+ verifySuperAdmin ( req , res , done ) ;
463
+ } ) ;
464
+ } ,
465
+ handler : async ( req ) => {
466
+ const user = await server . services . superAdmin . deleteUserSuperAdminAccess ( req . params . userId ) ;
467
+
468
+ return {
469
+ user
470
+ } ;
471
+ }
472
+ } ) ;
473
+
474
+ server . route ( {
475
+ method : "POST" ,
476
+ url : "/bootstrap" ,
477
+ config : {
478
+ rateLimit : writeLimit
479
+ } ,
480
+ schema : {
481
+ body : z . object ( {
482
+ email : z . string ( ) . email ( ) . trim ( ) . min ( 1 ) ,
483
+ password : z . string ( ) . trim ( ) . min ( 1 ) ,
484
+ organization : z . string ( ) . trim ( ) . min ( 1 )
485
+ } ) ,
486
+ response : {
487
+ 200 : z . object ( {
488
+ message : z . string ( ) ,
489
+ user : UsersSchema . pick ( {
490
+ username : true ,
491
+ firstName : true ,
492
+ lastName : true ,
493
+ email : true ,
494
+ id : true ,
495
+ superAdmin : true
496
+ } ) ,
497
+ organization : OrganizationsSchema . pick ( {
498
+ id : true ,
499
+ name : true ,
500
+ slug : true
501
+ } ) ,
502
+ identity : IdentitiesSchema . pick ( {
503
+ id : true ,
504
+ name : true
505
+ } ) . extend ( {
506
+ credentials : z . object ( {
507
+ token : z . string ( )
508
+ } ) // would just be Token AUTH for now
509
+ } )
510
+ } )
511
+ }
512
+ } ,
513
+ handler : async ( req ) => {
514
+ const { user, organization, machineIdentity } = await server . services . superAdmin . bootstrapInstance ( {
515
+ ...req . body ,
516
+ organizationName : req . body . organization
517
+ } ) ;
518
+
519
+ await server . services . telemetry . sendPostHogEvents ( {
520
+ event : PostHogEventTypes . AdminInit ,
521
+ distinctId : user . user . username ?? "" ,
522
+ properties : {
523
+ username : user . user . username ,
524
+ email : user . user . email ?? "" ,
525
+ lastName : user . user . lastName || "" ,
526
+ firstName : user . user . firstName || ""
527
+ }
528
+ } ) ;
529
+
530
+ return {
531
+ message : "Successfully bootstrapped instance" ,
532
+ user : user . user ,
533
+ organization,
534
+ identity : machineIdentity
535
+ } ;
536
+ }
537
+ } ) ;
397
538
} ;
0 commit comments