Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,14 @@

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;

/**
* IPMI2 Protocol
Expand Down Expand Up @@ -72,8 +76,20 @@ static class Field {

@Override
public boolean isInvalid() {

// todo: add
return true;
if (!validateIpDomain(host) || !validPort(port) || Integer.parseInt(port) <= 0) {
return true;
}
if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
return true;
}
if (StringUtils.isBlank(type)) {
return true;
}
if (!"Chassis".equalsIgnoreCase(type)
&& !"Sensor".equalsIgnoreCase(type)
&& !"Raw".equalsIgnoreCase(type)) {
return true;
}
return "Raw".equalsIgnoreCase(type) && field == null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,14 @@

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;

/**
* Jmx protocol
Expand Down Expand Up @@ -67,8 +71,26 @@ public class JmxProtocol implements CommonRequestProtocol, Protocol {

@Override
public boolean isInvalid() {

// todo: add
return true;
if (StringUtils.isBlank(objectName)) {
return true;
}
if (StringUtils.isNotBlank(ssl)
&& !"true".equalsIgnoreCase(ssl)
&& !"false".equalsIgnoreCase(ssl)) {
return true;
}
if (StringUtils.isNotBlank(username) && StringUtils.isBlank(password)) {
return true;
}
if (StringUtils.isBlank(username) && StringUtils.isNotBlank(password)) {
return true;
}
if (StringUtils.isNotBlank(url)) {
return !url.startsWith("service:jmx:rmi:") || url.contains("/stub/");
}
if (!validateIpDomain(host) || !validPort(port)) {
return true;
}
return Integer.parseInt(port) <= 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
public interface Protocol {

/**
* Check Protocol params vaild.
* Check Protocol params valid.
* @return True or False.
*/
boolean isInvalid();
Expand Down
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.isHasSchema;
import static org.apache.hertzbeat.common.util.IpDomainUtil.validPort;
import static org.apache.hertzbeat.common.util.IpDomainUtil.validateIpDomain;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.hertzbeat.common.entity.dto.Field;

/**
Expand All @@ -39,8 +44,26 @@ public class PushProtocol implements CommonRequestProtocol, Protocol {

@Override
public boolean isInvalid() {

// todo: add
return true;
if ((!validateIpDomain(host) && !isHasSchema(host)) || !validPort(port)) {
return true;
}
if (Integer.parseInt(port) <= 0) {
return true;
}
if (StringUtils.isBlank(uri) || !uri.startsWith("/") || StringUtils.containsWhitespace(uri)) {
return true;
}
if (fields == null || fields.isEmpty()) {
return true;
}
for (Field field : fields) {
if (field == null
|| StringUtils.isBlank(field.getName())
|| field.getType() == null
|| (field.getType() != 0 && field.getType() != 1)) {
return true;
}
}
return false;
}
}
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.isHasSchema;
import static org.apache.hertzbeat.common.util.IpDomainUtil.validPort;
import static org.apache.hertzbeat.common.util.IpDomainUtil.validateIpDomain;

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

/**
* Redfish Protocol
Expand Down Expand Up @@ -65,8 +70,30 @@ public class RedfishProtocol implements CommonRequestProtocol, Protocol {

@Override
public boolean isInvalid() {

// todo: add
return true;
if ((!validateIpDomain(host) && !isHasSchema(host)) || !validPort(port)) {
return true;
}
if (Integer.parseInt(port) <= 0) {
return true;
}
if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {
return true;
}
if (!StringUtils.isNumeric(timeout)) {
return true;
}
if (StringUtils.isNotBlank(schema)
&& (!schema.startsWith("/") || StringUtils.containsWhitespace(schema))) {
return true;
}
if (jsonPath == null || jsonPath.isEmpty()) {
return true;
}
for (String path : jsonPath) {
if (StringUtils.isBlank(path)) {
return true;
}
}
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,14 @@

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;

/**
* Websocket Protocol
Expand All @@ -47,8 +51,15 @@ public class WebsocketProtocol implements CommonRequestProtocol, Protocol {

@Override
public boolean isInvalid() {

// todo: add
return true;
if (!validateIpDomain(host) || !validPort(port)) {
return true;
}
if (Integer.parseInt(port) <= 0) {
return true;
}
if (StringUtils.isEmpty(path)) {
return false;
}
return !path.startsWith("/") || StringUtils.containsWhitespace(path);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

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

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;

import org.junit.jupiter.api.Test;

class IpmiProtocolTest {

@Test
void isInvalidValidProtocol() {
IpmiProtocol protocol = IpmiProtocol.builder()
.host("192.168.1.1")
.port("623")
.username("admin")
.password("password")
.type("Chassis")
.build();
assertFalse(protocol.isInvalid());
}

@Test
void isInvalidValidRawProtocol() {
IpmiProtocol protocol = IpmiProtocol.builder()
.host("192.168.1.1")
.port("623")
.username("admin")
.password("password")
.type("Raw")
.field(new IpmiProtocol.Field())
.build();
assertFalse(protocol.isInvalid());
}

@Test
void isInvalidInvalidHost() {
IpmiProtocol protocol = IpmiProtocol.builder()
.host("")
.port("623")
.username("admin")
.password("password")
.type("Chassis")
.build();
assertTrue(protocol.isInvalid());
}

@Test
void isInvalidInvalidPort() {
IpmiProtocol protocol = IpmiProtocol.builder()
.host("192.168.1.1")
.port("70000")
.username("admin")
.password("password")
.type("Chassis")
.build();
assertTrue(protocol.isInvalid());
}

@Test
void isInvalidBlankUsername() {
IpmiProtocol protocol = IpmiProtocol.builder()
.host("192.168.1.1")
.port("623")
.username("")
.password("password")
.type("Chassis")
.build();
assertTrue(protocol.isInvalid());
}

@Test
void isInvalidBlankPassword() {
IpmiProtocol protocol = IpmiProtocol.builder()
.host("192.168.1.1")
.port("623")
.username("admin")
.password("")
.type("Chassis")
.build();
assertTrue(protocol.isInvalid());
}

@Test
void isInvalidBlankType() {
IpmiProtocol protocol = IpmiProtocol.builder()
.host("192.168.1.1")
.port("623")
.username("admin")
.password("password")
.type("")
.build();
assertTrue(protocol.isInvalid());
}

@Test
void isInvalidUnsupportedType() {
IpmiProtocol protocol = IpmiProtocol.builder()
.host("192.168.1.1")
.port("623")
.username("admin")
.password("password")
.type("Unknown")
.build();
assertTrue(protocol.isInvalid());
}

@Test
void isInvalidRawWithoutField() {
IpmiProtocol protocol = IpmiProtocol.builder()
.host("192.168.1.1")
.port("623")
.username("admin")
.password("password")
.type("Raw")
.build();
assertTrue(protocol.isInvalid());
}
}
Loading
Loading