Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Java SDK v1.24.0 - IAM Authentication Upgrade

Latest

Choose a tag to compare

@BRBussy BRBussy released this 28 Oct 15:57
· 2 commits to master since this release

Java SDK v1.24.0 - IAM Authentication Upgrade

🚨 Breaking Changes

This release implements breaking changes to the IAM authentication API for improved batch operations and standardized role paths.

Role Path Format Update

Role paths now include explicit /roles/ segment:

// Old format
String role = "groups/01ABC123XYZABCDEFGHJKMNPQ/1000001";

// New format
String role = "groups/01ABC123XYZABCDEFGHJKMNPQ/roles/1000001";

Batch Role Operations

API User Service:

import co.meshtrade.api.iam.api_user.v1.ApiUserService;
import co.meshtrade.api.iam.api_user.v1.Service.AssignRolesToAPIUserRequest;
import co.meshtrade.api.iam.api_user.v1.ApiUser.APIUser;

// Old - Single role assignment
AssignRoleToAPIUserRequest request = AssignRoleToAPIUserRequest.newBuilder()
    .setName("api_users/01XYZ...")
    .setRole("groups/01ABC.../1000001")  // Old: singular
    .build();

// New - Batch role assignment  
AssignRolesToAPIUserRequest request = AssignRolesToAPIUserRequest.newBuilder()
    .setName("api_users/01XYZ...")
    .addAllRoles(Arrays.asList(  // New: plural with List
        "groups/01ABC.../roles/1000001",
        "groups/01ABC.../roles/1000002"
    ))
    .build();

APIUser apiUser = service.assignRolesToAPIUser(request, Optional.empty());

User Service:

import co.meshtrade.api.iam.user.v1.UserService;
import co.meshtrade.api.iam.user.v1.Service.RevokeRolesFromUserRequest;
import co.meshtrade.api.iam.user.v1.User.User;

// Old - No revoke method existed!

// New - Batch role revocation
RevokeRolesFromUserRequest request = RevokeRolesFromUserRequest.newBuilder()
    .setName("users/01XYZ...")
    .addAllRoles(Arrays.asList(
        "groups/01ABC.../roles/1000001",
        "groups/01ABC.../roles/1000002"
    ))
    .build();

User user = service.revokeRolesFromUser(request, Optional.empty());

✨ What's New

Enhanced RoleUtils

Updated role utilities in co.meshtrade.api.iam.role.v1.RoleUtils:

import co.meshtrade.api.iam.role.v1.RoleUtils;

// Build role path with new format
String rolePath = RoleUtils.buildRolePath("01ABC123XYZABCDEFGHJKMNPQ", 1000001);
// Returns: "groups/01ABC123XYZABCDEFGHJKMNPQ/roles/1000001"

// Parse role path
RoleUtils.RolePath parsed = RoleUtils.parseRolePath(rolePath);
String groupId = parsed.getGroupId();  // "01ABC123XYZABCDEFGHJKMNPQ"
int roleId = parsed.getRoleId();       // 1000001

// Validate role path
boolean isValid = RoleUtils.isValidRolePath(rolePath);  // true

Service Method Updates

API User Service (co.meshtrade.api.iam.api_user.v1):

  • βœ… assignRolesToAPIUser() - Batch assignment
  • βœ… revokeRolesFromAPIUser() - Batch revocation
  • ❌ Removed: assignRoleToAPIUser() (singular)
  • ❌ Removed: revokeRoleFromAPIUser() (singular)

User Service (co.meshtrade.api.iam.user.v1):

  • βœ… assignRolesToUser() - Batch assignment
  • ✨ NEW: revokeRolesFromUser() - Batch revocation
  • ❌ Removed: assignRoleToUser() (singular)

πŸ”§ Migration Guide

1. Update Maven Dependency

<dependency>
    <groupId>co.meshtrade</groupId>
    <artifactId>api</artifactId>
    <version>1.24.0</version>
</dependency>

Or with Gradle:

implementation 'co.meshtrade:api:1.24.0'

2. Update Imports

// API User Service
import co.meshtrade.api.iam.api_user.v1.ApiUserService;
import co.meshtrade.api.iam.api_user.v1.Service.AssignRolesToAPIUserRequest;    // Changed: plural
import co.meshtrade.api.iam.api_user.v1.Service.RevokeRolesFromAPIUserRequest;  // Changed: plural

// User Service
import co.meshtrade.api.iam.user.v1.UserService;
import co.meshtrade.api.iam.user.v1.Service.AssignRolesToUserRequest;      // Changed: plural
import co.meshtrade.api.iam.user.v1.Service.RevokeRolesFromUserRequest;    // NEW!

// Role utilities
import co.meshtrade.api.iam.role.v1.RoleUtils;

3. Update Method Calls

Before:

// Single role assignment
AssignRoleToAPIUserRequest request = AssignRoleToAPIUserRequest.newBuilder()
    .setName("api_users/01XYZ...")
    .setRole("groups/01ABC.../1000001")  // Old format, singular
    .build();

APIUser apiUser = service.assignRoleToAPIUser(request, Optional.empty());

After:

// Batch role assignment
AssignRolesToAPIUserRequest request = AssignRolesToAPIUserRequest.newBuilder()
    .setName("api_users/01XYZ...")
    .addAllRoles(Arrays.asList(  // Plural method, List parameter
        RoleUtils.buildRolePath(groupId, 1000001),  // New format with helper
        RoleUtils.buildRolePath(groupId, 1000002)
    ))
    .build();

APIUser apiUser = service.assignRolesToAPIUser(request, Optional.empty());

4. Use RoleUtils for Path Construction

import co.meshtrade.api.iam.role.v1.RoleUtils;
import java.util.Arrays;
import java.util.List;

// Build role paths correctly
String groupId = "01ABC123XYZABCDEFGHJKMNPQ";
List<String> roles = Arrays.asList(
    RoleUtils.buildRolePath(groupId, 1000001),
    RoleUtils.buildRolePath(groupId, 1000002)
);

// Use in request
AssignRolesToUserRequest request = AssignRolesToUserRequest.newBuilder()
    .setName("users/01XYZ...")
    .addAllRoles(roles)
    .build();

User user = userService.assignRolesToUser(request, Optional.empty());

βœ… Testing

All tests passing:

  • βœ… Unit tests with new role format
  • βœ… Validation tests for batch operations
  • βœ… RoleUtils tests with comprehensive coverage
  • βœ… Integration tests
  • βœ… Checkstyle (Google Java Style Guide)
  • βœ… PMD code quality checks
  • βœ… Error Prone static analysis

πŸ“¦ Package Details

Group ID: co.meshtrade
Artifact ID: api
Version: 1.24.0
Java: 21+
Maven Central: https://central.sonatype.com/artifact/co.meshtrade/api/1.24.0

Maven:

<dependency>
    <groupId>co.meshtrade</groupId>
    <artifactId>api</artifactId>
    <version>1.24.0</version>
</dependency>

Gradle:

implementation 'co.meshtrade:api:1.24.0'

πŸ”— Related Releases

  • Protobuf v1.24.0
  • Go SDK v1.24.0
  • Python SDK v1.24.0

πŸ“‹ Modified Files (5)

  • java/src/main/java/co/meshtrade/api/iam/api_user/v1/ApiUser.java
  • java/src/main/java/co/meshtrade/api/iam/role/v1/RoleUtils.java
  • java/src/test/java/co/meshtrade/api/iam/api_user/v1/ApiUserServiceIntegrationTest.java
  • java/src/test/java/co/meshtrade/api/iam/api_user/v1/ApiUserServiceValidationTest.java
  • java/src/test/java/co/meshtrade/api/iam/role/v1/RoleUtilsTest.java

πŸš€ Deployment

This release will be automatically deployed to Maven Central via GitHub Actions with GPG signing.

Deployment Status: Monitor at https://github.com/meshtrade/api/actions

Availability: Artifacts typically available on Maven Central within 15-30 minutes of deployment completion.


Full Changelog: java/v1.23.0...java/v1.24.0
PR: #76 - Upgrade IAM authentication API