Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.HttpClientErrorException;

import java.net.URI;
import java.util.*;

/**
Expand Down Expand Up @@ -58,6 +59,7 @@ public static Map<ToolSpecification, ToolExecutor> buildTools(AiragMcp airagMcp,
if (isEmptyBaseUrl) {
if (currentHttpRequest != null) {
baseUrl = CommonUtils.getBaseUrl(currentHttpRequest);
baseUrl = fixInternalBaseUrlPort(baseUrl, currentHttpRequest);
log.info("插件[{}]的BaseURL为空,使用系统地址: {}", airagMcp.getName(), baseUrl);
} else {
log.warn("插件[{}]的BaseURL为空且无法获取系统地址,跳过工具构建", airagMcp.getName());
Expand Down Expand Up @@ -97,6 +99,39 @@ public static Map<ToolSpecification, ToolExecutor> buildTools(AiragMcp airagMcp,
return tools;
}

/**
* Fixes the internal callback URL when a reverse proxy exposes the request on 80/443 but the app listens on another port.
*/
private static String fixInternalBaseUrlPort(String baseUrl, HttpServletRequest request) {
if (oConvertUtils.isEmpty(baseUrl) || request == null) {
return baseUrl;
}

int localPort = request.getLocalPort();
if (isDefaultHttpPort(localPort)) {
return baseUrl;
}

try {
URI uri = URI.create(baseUrl);
if (uri.getPort() > 0 || !isDefaultHttpPort(request.getServerPort()) || !isSingleLabelHost(uri.getHost())) {
return baseUrl;
}
return new URI(uri.getScheme(), null, uri.getHost(), localPort, uri.getPath(), uri.getQuery(), uri.getFragment()).toString();
} catch (Exception e) {
log.debug("Fix plugin baseUrl port failed, baseUrl={}", baseUrl, e);
return baseUrl;
}
}

private static boolean isDefaultHttpPort(int port) {
return port == 80 || port == 443 || port <= 0;
}

private static boolean isSingleLabelHost(String host) {
return oConvertUtils.isNotEmpty(host) && host.indexOf('.') < 0;
}

/**
* 构建ToolSpecification
*/
Expand Down