fix: IPv6 host support#4367
Conversation
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
There was a problem hiding this comment.
Pull Request Overview
This PR implements IPv6 host support across the APIML codebase by replacing manual URL string formatting with a centralized utility class to properly handle IPv6 addresses. IPv6 addresses require square brackets in URLs to be RFC-compliant.
- Added
UrlUtilsutility class with methods to format IPv6 addresses correctly - Updated URL construction throughout the codebase to use the new utility methods
- Added proper IPv6 address handling in route definitions and service registrations
Reviewed Changes
Copilot reviewed 11 out of 11 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| common-service-core/src/main/java/org/zowe/apiml/util/UrlUtils.java | New utility class with IPv6-aware URL formatting methods |
| zaas-service/src/main/java/org/zowe/apiml/zaas/cache/CachingServiceClient.java | Replaced manual URL formatting with UrlUtils.getUrl() |
| security-service-client-spring/src/main/java/org/zowe/apiml/security/client/service/GatewaySecurityService.java | Updated login, query, and OIDC validation endpoints to use UrlUtils |
| gateway-service/src/main/java/org/zowe/apiml/gateway/services/ServicesInfoService.java | Updated base URL construction for service info |
| gateway-service/src/main/java/org/zowe/apiml/gateway/service/routing/RouteDefinitionProducer.java | Added comprehensive IPv6 handling for route definitions and external URLs |
| gateway-service/src/main/java/org/zowe/apiml/gateway/service/GatewayIndexService.java | Updated WebClient base URL construction |
| gateway-service/src/main/java/org/zowe/apiml/gateway/filters/ZaasSchemeTransformRest.java | Added hostname formatting for ZAAS requests |
| gateway-service/src/main/java/org/zowe/apiml/gateway/config/RegistryConfig.java | Updated gateway service address configuration for IPv6 |
| gateway-service/src/main/java/org/zowe/apiml/gateway/caching/CachingServiceClientRest.java | Updated caching service URL construction |
| api-catalog-services/src/main/java/org/zowe/apiml/apicatalog/swagger/api/ApiDocV3Service.java | Updated OpenAPI server URL formatting |
| api-catalog-services/src/main/java/org/zowe/apiml/apicatalog/swagger/ApiDocRetrievalServiceLocal.java | Updated SpringDoc server URL construction |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| openAPI.getServers() | ||
| .forEach(server -> server.setUrl( | ||
| String.format("%s://%s/%s", scheme, getHostname(), server.getUrl()))); | ||
| UrlUtils.getUrl(scheme, UrlUtils.formatHostnameForUrl(getHostname())) + "/" + server.getUrl())); |
There was a problem hiding this comment.
getHostname() returns host+port, which contains ":" even if there is no IPv6 address. This will probably create an incorrect URL
There was a problem hiding this comment.
I've considered the possibility that getHostname() might be returning the host along with the port, and I've added handling for that here. But, I suspect the issue might be related to the formatHostnameForUrl() method. I'll take a closer look to better understand what's going wrong.
| } | ||
|
|
||
| // Check if this is an IPv6 address (contains multiple colons) | ||
| if (hostname.contains(":") && !hostname.startsWith("[")) { |
There was a problem hiding this comment.
is it safe to assume that any address containing ":" is IPv6? Isn't there a better validation?
There was a problem hiding this comment.
Yes, that’s a valid point. I also feel that relying solely on ":" for validation might not be sufficient. I’ll explore better alternatives and see what could work more reliably.
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
…host-formatting' into hrishikesh-nalawade/GH4318/IPv6-host-formatting
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
…host-formatting' into hrishikesh-nalawade/GH4318/IPv6-host-formatting
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
…host-formatting' into hrishikesh-nalawade/GH4318/IPv6-host-formatting
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
|
|
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
Signed-off-by: hrishikesh-nalawade <hrishikesh.nalawade.17@gmail.com>
|
|
This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. |


Description
Code changes to support IPv6 address
Linked to #4318
Type of change
Please delete options that are not relevant.
Checklist: