Skip to content
Merged
Show file tree
Hide file tree
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 @@ -17,10 +17,12 @@

package org.apache.hertzbeat.common.entity.job.protocol;

import java.net.URI;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;

/**
* eureka sd protocol
Expand All @@ -35,8 +37,15 @@ public class EurekaSdProtocol implements Protocol{

@Override
public boolean isInvalid() {

// todo: add
return true;
if (StringUtils.isBlank(url)) {
return true;
}
try {
URI uri = URI.create(url.trim());
return StringUtils.isBlank(uri.getHost())
|| (!"http".equalsIgnoreCase(uri.getScheme()) && !"https".equalsIgnoreCase(uri.getScheme()));
} catch (Exception e) {
return true;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,15 @@

package org.apache.hertzbeat.common.entity.job.protocol;

import static org.apache.hertzbeat.common.util.IpDomainUtil.validPort;
import static org.apache.hertzbeat.common.util.IpDomainUtil.validateIpDomain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.hertzbeat.common.util.CommonUtil;

/**
* ftp protocol
Expand Down Expand Up @@ -68,8 +73,17 @@ public class FtpProtocol implements CommonRequestProtocol, Protocol {

@Override
public boolean isInvalid() {

// todo: add
return true;
if (!validateIpDomain(host) || !validPort(port) || StringUtils.isBlank(direction) || StringUtils.isBlank(timeout)) {
return true;
}
if (!CommonUtil.isNumeric(timeout)) {
Copy link

Copilot AI Mar 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CommonUtil.isNumeric(timeout) accepts decimal/signed values (e.g., "3000.5"), but the FTP collector later uses Integer.parseInt(timeout) (e.g., in FtpCollectImpl) which would throw at runtime. Consider validating timeout as an integer (e.g., parse with Integer.parseInt in a try/catch, or use a stricter integer-only check) to keep isInvalid() consistent with downstream parsing.

Suggested change
if (!CommonUtil.isNumeric(timeout)) {
try {
Integer.parseInt(timeout);
} catch (NumberFormatException ex) {

Copilot uses AI. Check for mistakes.
return true;
}
if (StringUtils.isNotBlank(ssl)
&& !"true".equalsIgnoreCase(ssl)
&& !"false".equalsIgnoreCase(ssl)) {
return true;
}
return "true".equalsIgnoreCase(ssl) && StringUtils.isAnyBlank(username, password);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,15 @@

package org.apache.hertzbeat.common.entity.job.protocol;

import static org.apache.hertzbeat.common.util.IpDomainUtil.validPort;
import static org.apache.hertzbeat.common.util.IpDomainUtil.validateIpDomain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.hertzbeat.common.util.CommonUtil;

/**
* imap protocol
Expand Down Expand Up @@ -66,8 +71,17 @@ public class ImapProtocol implements CommonRequestProtocol, Protocol {

@Override
public boolean isInvalid() {

// todo: add
return true;
if (!validateIpDomain(host) || !validPort(port)) {
return true;
}
if (StringUtils.isAnyBlank(timeout, email, authorize, folderName)) {
return true;
}
if (!CommonUtil.isNumeric(timeout)) {
Copy link

Copilot AI Mar 30, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CommonUtil.isNumeric(timeout) treats decimals as numeric, but ImapCollectImpl later does Integer.parseInt(imapProtocol.getTimeout()), which will fail for values like "6000.5". Tighten the timeout validation here to ensure it matches the collector’s integer parsing expectations (integer-only parse/check).

Suggested change
if (!CommonUtil.isNumeric(timeout)) {
if (!StringUtils.isNumeric(timeout)) {

Copilot uses AI. Check for mistakes.
return true;
}
return StringUtils.isNotBlank(ssl)
&& !"true".equalsIgnoreCase(ssl)
&& !"false".equalsIgnoreCase(ssl);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,17 @@

package org.apache.hertzbeat.common.entity.job.protocol;

import static org.apache.hertzbeat.common.util.IpDomainUtil.validPort;
import static org.apache.hertzbeat.common.util.IpDomainUtil.validateIpDomain;

import java.util.List;
import java.util.Set;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.hertzbeat.common.util.CommonUtil;

/**
* NGQL protocol
Expand All @@ -31,6 +37,7 @@
@AllArgsConstructor
@NoArgsConstructor
public class NgqlProtocol implements CommonRequestProtocol, Protocol {
private static final Set<String> VALID_PARSE_TYPES = Set.of("oneRow", "multiRow", "filterCount", "columns");

/**
* IP ADDRESS OR DOMAIN NAME OF THE PEER HOST
Expand Down Expand Up @@ -74,8 +81,18 @@ public class NgqlProtocol implements CommonRequestProtocol, Protocol {

@Override
public boolean isInvalid() {

// todo: add
return true;
if (!validateIpDomain(host) || !validPort(port)) {
return true;
}
if (StringUtils.isAnyBlank(username, password, timeout, parseType)) {
return true;
}
if (!VALID_PARSE_TYPES.contains(parseType) || !CommonUtil.isNumeric(timeout)) {
return true;
}
if (commands == null || commands.isEmpty()) {
return true;
}
return commands.stream().anyMatch(StringUtils::isBlank);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,15 @@

package org.apache.hertzbeat.common.entity.job.protocol;

import static org.apache.hertzbeat.common.util.IpDomainUtil.validPort;
import static org.apache.hertzbeat.common.util.IpDomainUtil.validateIpDomain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.hertzbeat.common.util.CommonUtil;

/**
* Ntp Protocol
Expand All @@ -47,8 +52,12 @@ public class NtpProtocol implements CommonRequestProtocol, Protocol {

@Override
public boolean isInvalid() {

// todo: add
return true;
if (!validateIpDomain(host)) {
return true;
}
if (StringUtils.isNotBlank(port) && !validPort(port)) {
return true;
}
return StringUtils.isNotBlank(timeout) && !CommonUtil.isNumeric(timeout);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,13 @@

package org.apache.hertzbeat.common.entity.job.protocol;

import java.nio.charset.Charset;
import java.util.Set;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;

/**
* script protocol
Expand All @@ -30,6 +33,9 @@
@AllArgsConstructor
@NoArgsConstructor
public class ScriptProtocol implements CommonRequestProtocol, Protocol {
private static final Set<String> VALID_PARSE_TYPES = Set.of("oneRow", "multiRow", "netcat", "log");
private static final Set<String> VALID_SCRIPT_TOOLS = Set.of("bash", "cmd", "powershell");

/**
* OS charset
*/
Expand Down Expand Up @@ -72,8 +78,23 @@ public void setPort(String port) {

@Override
public boolean isInvalid() {
if (StringUtils.isBlank(charset) || !isSupportedCharset(charset)) {
return true;
}
if (StringUtils.isBlank(parseType) || !VALID_PARSE_TYPES.contains(parseType)) {
return true;
}
if (StringUtils.isBlank(scriptTool) || !VALID_SCRIPT_TOOLS.contains(scriptTool)) {
return true;
}
return StringUtils.isAllBlank(scriptCommand, scriptPath);
}

// todo: add
return true;
private boolean isSupportedCharset(String charsetName) {
try {
return Charset.isSupported(charsetName);
} catch (Exception e) {
return false;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,15 @@

package org.apache.hertzbeat.common.entity.job.protocol;

import static org.apache.hertzbeat.common.util.IpDomainUtil.validPort;
import static org.apache.hertzbeat.common.util.IpDomainUtil.validateIpDomain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.hertzbeat.common.util.CommonUtil;

/**
* Smtp Protocol
Expand Down Expand Up @@ -57,8 +62,9 @@ public class SmtpProtocol implements CommonRequestProtocol, Protocol {

@Override
public boolean isInvalid() {

// todo: add
return true;
if (!validateIpDomain(host) || !validPort(port) || StringUtils.isBlank(email)) {
return true;
}
return StringUtils.isNotBlank(timeout) && !CommonUtil.isNumeric(timeout);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,16 @@

package org.apache.hertzbeat.common.entity.job.protocol;

import static org.apache.hertzbeat.common.util.IpDomainUtil.validPort;
import static org.apache.hertzbeat.common.util.IpDomainUtil.validateIpDomain;

import java.util.Map;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.hertzbeat.common.util.CommonUtil;

/**
* snmp Protocol configuration
Expand All @@ -31,6 +36,9 @@
@AllArgsConstructor
@NoArgsConstructor
public class SnmpProtocol implements CommonRequestProtocol, Protocol {
private static final String OPERATION_GET = "get";
private static final String OPERATION_WALK = "walk";

/**
* IP ADDRESS OR DOMAIN NAME OF THE PEER HOST
*/
Expand Down Expand Up @@ -94,8 +102,50 @@ public class SnmpProtocol implements CommonRequestProtocol, Protocol {

@Override
public boolean isInvalid() {
if (!validateIpDomain(host) || !validPort(port) || StringUtils.isBlank(version)) {
return true;
}
if (StringUtils.isNotBlank(timeout) && !CommonUtil.isNumeric(timeout)) {
return true;
}
if (StringUtils.isNotBlank(operation)
&& !OPERATION_GET.equalsIgnoreCase(operation)
&& !OPERATION_WALK.equalsIgnoreCase(operation)) {
return true;
}
if (oids == null || oids.isEmpty()) {
return true;
}
for (Map.Entry<String, String> entry : oids.entrySet()) {
if (StringUtils.isAnyBlank(entry.getKey(), entry.getValue())) {
return true;
}
}
if (isVersion3()) {
return StringUtils.isAnyBlank(username, authPassphrase, privPassphrase);
}
if (!isVersion1Or2c()) {
return true;
}
return StringUtils.isBlank(community);
}

private boolean isVersion1Or2c() {
return isVersion1() || isVersion2c();
}

private boolean isVersion1() {
return "0".equalsIgnoreCase(version) || "v1".equalsIgnoreCase(version);
}

private boolean isVersion2c() {
return "1".equalsIgnoreCase(version)
|| "2".equalsIgnoreCase(version)
|| "2c".equalsIgnoreCase(version)
|| "v2c".equalsIgnoreCase(version);
}

// todo: add
return true;
private boolean isVersion3() {
return "3".equalsIgnoreCase(version) || "v3".equalsIgnoreCase(version);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;

/**
* Zookeeper service discovery protocol
Expand All @@ -37,8 +38,11 @@ public class ZookeeperSdProtocol implements Protocol{

@Override
public boolean isInvalid() {

// todo: add
return true;
if (StringUtils.isAnyBlank(url, pathPrefix)) {
return true;
}
return StringUtils.containsWhitespace(url)
|| StringUtils.containsWhitespace(pathPrefix)
|| !pathPrefix.startsWith("/");
}
}
Loading
Loading