1212import com .salesforce .multicloudj .common .provider .Provider ;
1313import com .salesforce .multicloudj .iam .driver .AbstractIam ;
1414import com .salesforce .multicloudj .iam .model .AttachInlinePolicyRequest ;
15+ import com .salesforce .multicloudj .iam .model .CreateIdentityRequest ;
1516import com .salesforce .multicloudj .iam .model .CreateOptions ;
17+ import com .salesforce .multicloudj .iam .model .DeleteIdentityRequest ;
1618import com .salesforce .multicloudj .iam .model .GetAttachedPoliciesRequest ;
19+ import com .salesforce .multicloudj .iam .model .GetIdentityRequest ;
1720import com .salesforce .multicloudj .iam .model .GetInlinePolicyDetailsRequest ;
21+ import com .salesforce .multicloudj .iam .model .RemovePolicyRequest ;
1822import com .salesforce .multicloudj .iam .model .PolicyDocument ;
1923import com .salesforce .multicloudj .iam .model .Statement ;
2024import com .salesforce .multicloudj .iam .model .TrustConfiguration ;
@@ -155,25 +159,20 @@ public void close() throws Exception {
155159 /**
156160 * Create IAM Role with optional Trust Configuration and Create Options.
157161 *
158- * @param identityName the IAM role name (e.g., "MyApplicationRole").
159- * @param description optional description for the role.
160- * @param tenantId the AWS Account ID.
161- * @param region the AWS region for the IAM client.
162- * @param trustConfig optional trust configuration.
163- * @param options optional creation options for the role.
162+ * @param request the request containing identity name, description, tenant ID, region, trust config, and options.
164163 * @return the IAM role ARN.
165164 */
166165 @ Override
167- protected String doCreateIdentity (String identityName , String description , String tenantId , String region , Optional < TrustConfiguration > trustConfig , Optional < CreateOptions > options ) {
168- String assumeRolePolicyDocument = buildAssumeRolePolicyDocument (tenantId , trustConfig );
166+ protected String doCreateIdentity (CreateIdentityRequest request ) {
167+ String assumeRolePolicyDocument = buildAssumeRolePolicyDocument (request . getTenantId (), request . getTrustConfig () );
169168
170169 CreateRoleRequest .Builder requestBuilder = CreateRoleRequest .builder ()
171- .roleName (identityName )
170+ .roleName (request . getIdentityName () )
172171 .assumeRolePolicyDocument (assumeRolePolicyDocument )
173- .description (StringUtils .defaultString (description ));
172+ .description (StringUtils .defaultString (request . getDescription () ));
174173
175- if (options .isPresent ()) {
176- CreateOptions opts = options .get ();
174+ if (request . getOptions () .isPresent ()) {
175+ CreateOptions opts = request . getOptions () .get ();
177176 if (StringUtils .isNotBlank (opts .getPath ())) {
178177 requestBuilder .path (opts .getPath ());
179178 }
@@ -190,11 +189,11 @@ protected String doCreateIdentity(String identityName, String description, Strin
190189 Role role = response .role ();
191190 return role != null ? role .arn () : null ;
192191 } catch (EntityAlreadyExistsException e ) {
193- GetRoleResponse getRoleResponse = this .iamClient .getRole (GetRoleRequest .builder ().roleName (identityName ).build ());
192+ GetRoleResponse getRoleResponse = this .iamClient .getRole (GetRoleRequest .builder ().roleName (request . getIdentityName () ).build ());
194193 Role existingRole = getRoleResponse .role ();
195194
196195 if (existingRole != null ) {
197- updateRoleIfNeeded (existingRole , description , assumeRolePolicyDocument , options );
196+ updateRoleIfNeeded (existingRole , request . getDescription () , assumeRolePolicyDocument , request . getOptions () );
198197 }
199198
200199 return existingRole != null ? existingRole .arn () : null ;
@@ -313,10 +312,10 @@ private String buildAssumeRolePolicyDocument(String tenantId, Optional<TrustConf
313312
314313 Map <String , Object > principal = new LinkedHashMap <>();
315314 if (!awsPrincipals .isEmpty ()) {
316- principal .put ("AWS" , awsPrincipals . size () == 1 ? awsPrincipals . get ( 0 ) : awsPrincipals );
315+ principal .put ("AWS" , awsPrincipals );
317316 }
318317 if (!servicePrincipals .isEmpty ()) {
319- principal .put ("Service" , servicePrincipals . size () == 1 ? servicePrincipals . get ( 0 ) : servicePrincipals );
318+ principal .put ("Service" , servicePrincipals );
320319 }
321320 stmt .put ("Principal" , principal );
322321
@@ -334,9 +333,6 @@ private String buildAssumeRolePolicyDocument(String tenantId, Optional<TrustConf
334333
335334 @ Override
336335 protected void doAttachInlinePolicy (AttachInlinePolicyRequest request ) {
337- if (StringUtils .isBlank (request .getIdentityName ())) {
338- throw new InvalidArgumentException ("identityName is required for AWS IAM" );
339- }
340336 if (StringUtils .isBlank (request .getPolicyDocument ().getName ())) {
341337 throw new InvalidArgumentException ("policy name is required for AWS IAM" );
342338 }
@@ -356,7 +352,7 @@ protected void doAttachInlinePolicy(AttachInlinePolicyRequest request) {
356352 private static String buildInlinePolicyDocumentJson (PolicyDocument policyDocument ) {
357353 String version = policyDocument .getVersion ();
358354 if (StringUtils .isBlank (version )) {
359- throw new InvalidArgumentException ( "Version is required for AWS inline policy document" ) ;
355+ version = POLICY_VERSION ;
360356 }
361357 Map <String , Object > doc = new LinkedHashMap <>();
362358 doc .put ("Version" , version );
@@ -368,21 +364,19 @@ private static String buildInlinePolicyDocumentJson(PolicyDocument policyDocumen
368364
369365 List <String > actions = stmt .getActions ();
370366 if (actions != null && !actions .isEmpty ()) {
371- awsStmt .put ("Action" , actions . size () == 1 ? actions . get ( 0 ) : actions );
367+ awsStmt .put ("Action" , actions );
372368 }
373369 if (StringUtils .isNotBlank (stmt .getSid ())) {
374370 awsStmt .put ("Sid" , stmt .getSid ());
375371 }
376372 if (stmt .getResources () != null && !stmt .getResources ().isEmpty ()) {
377- awsStmt .put ("Resource" , stmt .getResources ().size () == 1 ? stmt .getResources ().get (0 ) : stmt .getResources ());
378- } else {
379- awsStmt .put ("Resource" , "*" );
373+ awsStmt .put ("Resource" , stmt .getResources ());
380374 }
381375 if (stmt .getConditions () != null && !stmt .getConditions ().isEmpty ()) {
382376 awsStmt .put ("Condition" , stmt .getConditions ());
383377 }
384378 if (stmt .getPrincipals () != null && !stmt .getPrincipals ().isEmpty ()) {
385- awsStmt .put ("Principal" , stmt .getPrincipals (). size () == 1 ? stmt . getPrincipals (). get ( 0 ) : stmt . getPrincipals () );
379+ awsStmt .put ("Principal" , stmt .getPrincipals ());
386380 }
387381
388382 awsStatements .add (awsStmt );
@@ -439,51 +433,44 @@ protected List<String> doGetAttachedPolicies(GetAttachedPoliciesRequest request)
439433 /**
440434 * Removes an inline policy from an IAM role.
441435 *
442- * @param identityName the IAM role name.
443- * @param policyName the name of the inline policy to remove.
444- * @param tenantId the AWS Account ID.
445- * @param region the AWS region for the IAM client.
436+ * @param request the request containing identity name, policy name, tenant ID, and region.
446437 */
447438 @ Override
448- protected void doRemovePolicy (String identityName , String policyName , String tenantId , String region ) {
449- DeleteRolePolicyRequest request = DeleteRolePolicyRequest .builder ()
450- .roleName (identityName )
451- .policyName (policyName )
439+ protected void doRemovePolicy (RemovePolicyRequest request ) {
440+ DeleteRolePolicyRequest deleteRequest = DeleteRolePolicyRequest .builder ()
441+ .roleName (request . getIdentityName () )
442+ .policyName (request . getPolicyName () )
452443 .build ();
453444
454- this .iamClient .deleteRolePolicy (request );
445+ this .iamClient .deleteRolePolicy (deleteRequest );
455446 }
456447
457448
458449 /**
459450 * Delete IAM Role.
460451 *
461- * @param identityName the IAM role name.
462- * @param tenantId the AWS Account ID.
463- * @param region the AWS region for the IAM client.
452+ * @param request the request containing identity name, tenant ID, and region.
464453 */
465454 @ Override
466- protected void doDeleteIdentity (String identityName , String tenantId , String region ) {
467- DeleteRoleRequest request = DeleteRoleRequest .builder ()
468- .roleName (identityName )
455+ protected void doDeleteIdentity (DeleteIdentityRequest request ) {
456+ DeleteRoleRequest deleteRoleRequest = DeleteRoleRequest .builder ()
457+ .roleName (request . getIdentityName () )
469458 .build ();
470- this .iamClient .deleteRole (request );
459+ this .iamClient .deleteRole (deleteRoleRequest );
471460 }
472461
473462 /**
474463 * Get IAM Role.
475464 *
476- * @param identityName the IAM role name.
477- * @param tenantId the AWS Account ID.
478- * @param region the AWS region for the IAM client.
465+ * @param request the request containing identity name, tenant ID, and region.
479466 * @return the IAM role ARN.
480467 */
481468 @ Override
482- protected String doGetIdentity (String identityName , String tenantId , String region ) {
483- GetRoleRequest request = GetRoleRequest .builder ()
484- .roleName (identityName )
469+ protected String doGetIdentity (GetIdentityRequest request ) {
470+ GetRoleRequest getRoleRequest = GetRoleRequest .builder ()
471+ .roleName (request . getIdentityName () )
485472 .build ();
486- GetRoleResponse response = this .iamClient .getRole (request );
473+ GetRoleResponse response = this .iamClient .getRole (getRoleRequest );
487474 Role role = response .role ();
488475 return role != null ? role .arn () : null ;
489476 }
0 commit comments