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); // trueService 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.javajava/src/main/java/co/meshtrade/api/iam/role/v1/RoleUtils.javajava/src/test/java/co/meshtrade/api/iam/api_user/v1/ApiUserServiceIntegrationTest.javajava/src/test/java/co/meshtrade/api/iam/api_user/v1/ApiUserServiceValidationTest.javajava/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