2727import java .util .Locale ;
2828import org .apache .iceberg .catalog .Namespace ;
2929import org .apache .iceberg .catalog .TableIdentifier ;
30- import org .apache .iceberg .exceptions .NotAuthorizedException ;
3130import org .apache .iceberg .rest .responses .ErrorResponse ;
32- import org .apache .polaris .core .PolarisDiagnostics ;
3331import org .apache .polaris .core .admin .model .AddGrantRequest ;
3432import org .apache .polaris .core .admin .model .AuthenticationParameters ;
3533import org .apache .polaris .core .admin .model .AwsStorageConfigInfo ;
6462import org .apache .polaris .core .admin .model .UpdatePrincipalRequest ;
6563import org .apache .polaris .core .admin .model .UpdatePrincipalRoleRequest ;
6664import org .apache .polaris .core .admin .model .ViewGrant ;
67- import org .apache .polaris .core .auth .PolarisAuthorizer ;
68- import org .apache .polaris .core .auth .PolarisPrincipal ;
6965import org .apache .polaris .core .config .FeatureConfiguration ;
7066import org .apache .polaris .core .config .RealmConfig ;
71- import org .apache .polaris .core .context .CallContext ;
7267import org .apache .polaris .core .context .RealmContext ;
7368import org .apache .polaris .core .entity .CatalogEntity ;
7469import org .apache .polaris .core .entity .CatalogRoleEntity ;
7570import org .apache .polaris .core .entity .PolarisPrivilege ;
7671import org .apache .polaris .core .entity .PrincipalEntity ;
7772import org .apache .polaris .core .entity .PrincipalRoleEntity ;
78- import org .apache .polaris .core .persistence .MetaStoreManagerFactory ;
79- import org .apache .polaris .core .persistence .PolarisMetaStoreManager ;
8073import org .apache .polaris .core .persistence .dao .entity .BaseResult ;
8174import org .apache .polaris .core .persistence .dao .entity .PrivilegeResult ;
82- import org .apache .polaris .core .persistence .resolver .ResolutionManifestFactory ;
83- import org .apache .polaris .core .secrets .UserSecretsManager ;
84- import org .apache .polaris .core .secrets .UserSecretsManagerFactory ;
8575import org .apache .polaris .service .admin .api .PolarisCatalogsApiService ;
8676import org .apache .polaris .service .admin .api .PolarisPrincipalRolesApiService ;
8777import org .apache .polaris .service .admin .api .PolarisPrincipalsApiService ;
@@ -99,57 +89,21 @@ public class PolarisServiceImpl
9989 PolarisPrincipalsApiService ,
10090 PolarisPrincipalRolesApiService {
10191 private static final Logger LOGGER = LoggerFactory .getLogger (PolarisServiceImpl .class );
102- private final PolarisDiagnostics diagnostics ;
103- private final ResolutionManifestFactory resolutionManifestFactory ;
104- private final PolarisAuthorizer polarisAuthorizer ;
105- private final MetaStoreManagerFactory metaStoreManagerFactory ;
106- private final UserSecretsManagerFactory userSecretsManagerFactory ;
107- private final CallContext callContext ;
10892 private final RealmConfig realmConfig ;
10993 private final ReservedProperties reservedProperties ;
11094 private final PolarisEventListener polarisEventListener ;
95+ private final PolarisAdminService adminService ;
11196
11297 @ Inject
11398 public PolarisServiceImpl (
114- PolarisDiagnostics diagnostics ,
115- ResolutionManifestFactory resolutionManifestFactory ,
116- MetaStoreManagerFactory metaStoreManagerFactory ,
117- UserSecretsManagerFactory userSecretsManagerFactory ,
118- PolarisAuthorizer polarisAuthorizer ,
119- CallContext callContext ,
99+ RealmConfig realmConfig ,
120100 ReservedProperties reservedProperties ,
121- PolarisEventListener polarisEventListener ) {
122- this .diagnostics = diagnostics ;
123- this .resolutionManifestFactory = resolutionManifestFactory ;
124- this .metaStoreManagerFactory = metaStoreManagerFactory ;
125- this .userSecretsManagerFactory = userSecretsManagerFactory ;
126- this .polarisAuthorizer = polarisAuthorizer ;
127- this .callContext = callContext ;
128- this .realmConfig = callContext .getRealmConfig ();
101+ PolarisEventListener polarisEventListener ,
102+ PolarisAdminService adminService ) {
103+ this .realmConfig = realmConfig ;
129104 this .reservedProperties = reservedProperties ;
130105 this .polarisEventListener = polarisEventListener ;
131- }
132-
133- private PolarisAdminService newAdminService (
134- RealmContext realmContext , SecurityContext securityContext ) {
135- PolarisPrincipal authenticatedPrincipal = (PolarisPrincipal ) securityContext .getUserPrincipal ();
136- if (authenticatedPrincipal == null ) {
137- throw new NotAuthorizedException ("Failed to find authenticatedPrincipal in SecurityContext" );
138- }
139-
140- PolarisMetaStoreManager metaStoreManager =
141- metaStoreManagerFactory .getOrCreateMetaStoreManager (realmContext );
142- UserSecretsManager userSecretsManager =
143- userSecretsManagerFactory .getOrCreateUserSecretsManager (realmContext );
144- return new PolarisAdminService (
145- diagnostics ,
146- callContext ,
147- resolutionManifestFactory ,
148- metaStoreManager ,
149- userSecretsManager ,
150- securityContext ,
151- polarisAuthorizer ,
152- reservedProperties );
106+ this .adminService = adminService ;
153107 }
154108
155109 private static Response toResponse (BaseResult result , Response .Status successStatus ) {
@@ -172,7 +126,6 @@ private static Response toResponse(BaseResult result, Response.Status successSta
172126 @ Override
173127 public Response createCatalog (
174128 CreateCatalogRequest request , RealmContext realmContext , SecurityContext securityContext ) {
175- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
176129 Catalog catalog = request .getCatalog ();
177130 validateStorageConfig (catalog .getStorageConfigInfo ());
178131 validateExternalCatalog (catalog );
@@ -259,7 +212,6 @@ private void validateAuthenticationParameters(AuthenticationParameters authentic
259212 @ Override
260213 public Response deleteCatalog (
261214 String catalogName , RealmContext realmContext , SecurityContext securityContext ) {
262- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
263215 adminService .deleteCatalog (catalogName );
264216 return Response .status (Response .Status .NO_CONTENT ).build ();
265217 }
@@ -268,7 +220,6 @@ public Response deleteCatalog(
268220 @ Override
269221 public Response getCatalog (
270222 String catalogName , RealmContext realmContext , SecurityContext securityContext ) {
271- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
272223 return Response .ok (adminService .getCatalog (catalogName ).asCatalog ()).build ();
273224 }
274225
@@ -279,7 +230,6 @@ public Response updateCatalog(
279230 UpdateCatalogRequest updateRequest ,
280231 RealmContext realmContext ,
281232 SecurityContext securityContext ) {
282- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
283233 if (updateRequest .getStorageConfigInfo () != null ) {
284234 validateStorageConfig (updateRequest .getStorageConfigInfo ());
285235 }
@@ -289,7 +239,6 @@ public Response updateCatalog(
289239 /** From PolarisCatalogsApiService */
290240 @ Override
291241 public Response listCatalogs (RealmContext realmContext , SecurityContext securityContext ) {
292- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
293242 List <Catalog > catalogList = adminService .listCatalogs ();
294243 Catalogs catalogs = new Catalogs (catalogList );
295244 LOGGER .debug ("listCatalogs returning: {}" , catalogs );
@@ -300,7 +249,6 @@ public Response listCatalogs(RealmContext realmContext, SecurityContext security
300249 @ Override
301250 public Response createPrincipal (
302251 CreatePrincipalRequest request , RealmContext realmContext , SecurityContext securityContext ) {
303- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
304252 PrincipalEntity principal =
305253 new PrincipalEntity .Builder ()
306254 .setName (request .getPrincipal ().getName ())
@@ -334,7 +282,6 @@ public Response resetCredentials(
334282 if (safeResetPrincipalRequest .getClientSecret () != null ) {
335283 validateClientSecret (safeResetPrincipalRequest .getClientSecret ());
336284 }
337- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
338285 return Response .ok (adminService .resetCredentials (principalName , safeResetPrincipalRequest ))
339286 .build ();
340287 }
@@ -343,7 +290,6 @@ public Response resetCredentials(
343290 @ Override
344291 public Response deletePrincipal (
345292 String principalName , RealmContext realmContext , SecurityContext securityContext ) {
346- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
347293 adminService .deletePrincipal (principalName );
348294 return Response .status (Response .Status .NO_CONTENT ).build ();
349295 }
@@ -352,7 +298,6 @@ public Response deletePrincipal(
352298 @ Override
353299 public Response getPrincipal (
354300 String principalName , RealmContext realmContext , SecurityContext securityContext ) {
355- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
356301 return Response .ok (adminService .getPrincipal (principalName ).asPrincipal ()).build ();
357302 }
358303
@@ -363,7 +308,6 @@ public Response updatePrincipal(
363308 UpdatePrincipalRequest updateRequest ,
364309 RealmContext realmContext ,
365310 SecurityContext securityContext ) {
366- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
367311 return Response .ok (adminService .updatePrincipal (principalName , updateRequest ).asPrincipal ())
368312 .build ();
369313 }
@@ -372,14 +316,12 @@ public Response updatePrincipal(
372316 @ Override
373317 public Response rotateCredentials (
374318 String principalName , RealmContext realmContext , SecurityContext securityContext ) {
375- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
376319 return Response .ok (adminService .rotateCredentials (principalName )).build ();
377320 }
378321
379322 /** From PolarisPrincipalsApiService */
380323 @ Override
381324 public Response listPrincipals (RealmContext realmContext , SecurityContext securityContext ) {
382- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
383325 List <Principal > principalList = adminService .listPrincipals ();
384326 Principals principals = new Principals (principalList );
385327 LOGGER .debug ("listPrincipals returning: {}" , principals );
@@ -392,7 +334,6 @@ public Response createPrincipalRole(
392334 CreatePrincipalRoleRequest request ,
393335 RealmContext realmContext ,
394336 SecurityContext securityContext ) {
395- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
396337 PrincipalRoleEntity entity =
397338 new PrincipalRoleEntity .Builder ()
398339 .setName (request .getPrincipalRole ().getName ())
@@ -410,7 +351,6 @@ public Response createPrincipalRole(
410351 @ Override
411352 public Response deletePrincipalRole (
412353 String principalRoleName , RealmContext realmContext , SecurityContext securityContext ) {
413- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
414354 adminService .deletePrincipalRole (principalRoleName );
415355 return Response .status (Response .Status .NO_CONTENT ).build ();
416356 }
@@ -419,7 +359,6 @@ public Response deletePrincipalRole(
419359 @ Override
420360 public Response getPrincipalRole (
421361 String principalRoleName , RealmContext realmContext , SecurityContext securityContext ) {
422- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
423362 return Response .ok (adminService .getPrincipalRole (principalRoleName ).asPrincipalRole ()).build ();
424363 }
425364
@@ -430,7 +369,6 @@ public Response updatePrincipalRole(
430369 UpdatePrincipalRoleRequest updateRequest ,
431370 RealmContext realmContext ,
432371 SecurityContext securityContext ) {
433- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
434372 return Response .ok (
435373 adminService .updatePrincipalRole (principalRoleName , updateRequest ).asPrincipalRole ())
436374 .build ();
@@ -439,7 +377,6 @@ public Response updatePrincipalRole(
439377 /** From PolarisPrincipalRolesApiService */
440378 @ Override
441379 public Response listPrincipalRoles (RealmContext realmContext , SecurityContext securityContext ) {
442- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
443380 List <PrincipalRole > principalRoleList = adminService .listPrincipalRoles ();
444381 PrincipalRoles principalRoles = new PrincipalRoles (principalRoleList );
445382 LOGGER .debug ("listPrincipalRoles returning: {}" , principalRoles );
@@ -453,7 +390,6 @@ public Response createCatalogRole(
453390 CreateCatalogRoleRequest request ,
454391 RealmContext realmContext ,
455392 SecurityContext securityContext ) {
456- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
457393 CatalogRoleEntity entity =
458394 new CatalogRoleEntity .Builder ()
459395 .setName (request .getCatalogRole ().getName ())
@@ -474,7 +410,6 @@ public Response deleteCatalogRole(
474410 String catalogRoleName ,
475411 RealmContext realmContext ,
476412 SecurityContext securityContext ) {
477- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
478413 adminService .deleteCatalogRole (catalogName , catalogRoleName );
479414 return Response .status (Response .Status .NO_CONTENT ).build ();
480415 }
@@ -486,7 +421,6 @@ public Response getCatalogRole(
486421 String catalogRoleName ,
487422 RealmContext realmContext ,
488423 SecurityContext securityContext ) {
489- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
490424 return Response .ok (adminService .getCatalogRole (catalogName , catalogRoleName ).asCatalogRole ())
491425 .build ();
492426 }
@@ -499,7 +433,6 @@ public Response updateCatalogRole(
499433 UpdateCatalogRoleRequest updateRequest ,
500434 RealmContext realmContext ,
501435 SecurityContext securityContext ) {
502- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
503436 return Response .ok (
504437 adminService
505438 .updateCatalogRole (catalogName , catalogRoleName , updateRequest )
@@ -511,7 +444,6 @@ public Response updateCatalogRole(
511444 @ Override
512445 public Response listCatalogRoles (
513446 String catalogName , RealmContext realmContext , SecurityContext securityContext ) {
514- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
515447 List <CatalogRole > catalogRoleList = adminService .listCatalogRoles (catalogName );
516448 CatalogRoles catalogRoles = new CatalogRoles (catalogRoleList );
517449 LOGGER .debug ("listCatalogRoles returning: {}" , catalogRoles );
@@ -529,7 +461,6 @@ public Response assignPrincipalRole(
529461 "Assigning principalRole {} to principal {}" ,
530462 request .getPrincipalRole ().getName (),
531463 principalName );
532- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
533464 PrivilegeResult result =
534465 adminService .assignPrincipalRole (principalName , request .getPrincipalRole ().getName ());
535466 return toResponse (result , Response .Status .CREATED );
@@ -543,7 +474,6 @@ public Response revokePrincipalRole(
543474 RealmContext realmContext ,
544475 SecurityContext securityContext ) {
545476 LOGGER .info ("Revoking principalRole {} from principal {}" , principalRoleName , principalName );
546- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
547477 PrivilegeResult result = adminService .revokePrincipalRole (principalName , principalRoleName );
548478 return toResponse (result , Response .Status .NO_CONTENT );
549479 }
@@ -552,7 +482,6 @@ public Response revokePrincipalRole(
552482 @ Override
553483 public Response listPrincipalRolesAssigned (
554484 String principalName , RealmContext realmContext , SecurityContext securityContext ) {
555- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
556485 List <PrincipalRole > principalRoleList =
557486 adminService .listPrincipalRolesAssigned (principalName ).stream ()
558487 .map (PrincipalRoleEntity ::new )
@@ -576,7 +505,6 @@ public Response assignCatalogRoleToPrincipalRole(
576505 request .getCatalogRole ().getName (),
577506 catalogName ,
578507 principalRoleName );
579- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
580508 PrivilegeResult result =
581509 adminService .assignCatalogRoleToPrincipalRole (
582510 principalRoleName , catalogName , request .getCatalogRole ().getName ());
@@ -596,7 +524,6 @@ public Response revokeCatalogRoleFromPrincipalRole(
596524 catalogRoleName ,
597525 catalogName ,
598526 principalRoleName );
599- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
600527 PrivilegeResult result =
601528 adminService .revokeCatalogRoleFromPrincipalRole (
602529 principalRoleName , catalogName , catalogRoleName );
@@ -607,7 +534,6 @@ public Response revokeCatalogRoleFromPrincipalRole(
607534 @ Override
608535 public Response listAssigneePrincipalsForPrincipalRole (
609536 String principalRoleName , RealmContext realmContext , SecurityContext securityContext ) {
610- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
611537 List <Principal > principalList =
612538 adminService .listAssigneePrincipalsForPrincipalRole (principalRoleName ).stream ()
613539 .map (PrincipalEntity ::new )
@@ -625,7 +551,6 @@ public Response listCatalogRolesForPrincipalRole(
625551 String catalogName ,
626552 RealmContext realmContext ,
627553 SecurityContext securityContext ) {
628- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
629554 List <CatalogRole > catalogRoleList =
630555 adminService .listCatalogRolesForPrincipalRole (principalRoleName , catalogName ).stream ()
631556 .map (CatalogRoleEntity ::new )
@@ -649,7 +574,6 @@ public Response addGrantToCatalogRole(
649574 grantRequest ,
650575 catalogRoleName ,
651576 catalogName );
652- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
653577 PrivilegeResult result ;
654578 switch (grantRequest .getGrant ()) {
655579 // The per-securable-type Privilege enums must be exact String match for a subset of all
@@ -744,7 +668,6 @@ public Response revokeGrantFromCatalogRole(
744668 return Response .status (501 ).build (); // not implemented
745669 }
746670
747- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
748671 PrivilegeResult result ;
749672 switch (grantRequest .getGrant ()) {
750673 // The per-securable-type Privilege enums must be exact String match for a subset of all
@@ -828,7 +751,6 @@ public Response listAssigneePrincipalRolesForCatalogRole(
828751 String catalogRoleName ,
829752 RealmContext realmContext ,
830753 SecurityContext securityContext ) {
831- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
832754 List <PrincipalRole > principalRoleList =
833755 adminService .listAssigneePrincipalRolesForCatalogRole (catalogName , catalogRoleName ).stream ()
834756 .map (PrincipalRoleEntity ::new )
@@ -846,7 +768,6 @@ public Response listGrantsForCatalogRole(
846768 String catalogRoleName ,
847769 RealmContext realmContext ,
848770 SecurityContext securityContext ) {
849- PolarisAdminService adminService = newAdminService (realmContext , securityContext );
850771 List <GrantResource > grantList =
851772 adminService .listGrantsForCatalogRole (catalogName , catalogRoleName );
852773 GrantResources grantResources = new GrantResources (grantList );
0 commit comments