Skip to content
Merged
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package io.openaev.output_processor;

import static org.springframework.util.StringUtils.hasText;

import com.fasterxml.jackson.databind.JsonNode;
import io.openaev.database.model.ContractOutputField;
import io.openaev.database.model.ContractOutputTechnicalType;
import io.openaev.database.model.ContractOutputType;
import io.openaev.rest.finding.FindingService;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.stereotype.Component;

@Component
public class AccountWithPasswordNotRequiredOutputProcessor extends FindingCapableOutputProcessor {

private static final String ASSET_ID = "asset_id";
private static final String ACCOUNT = "account";
private static final String STATUS = "status";
private static final String HOST = "host";

public AccountWithPasswordNotRequiredOutputProcessor(FindingService findingService) {
super(
ContractOutputType.AccountWithPasswordNotRequired,
ContractOutputTechnicalType.Object,
List.of(
new ContractOutputField(ASSET_ID, ContractOutputTechnicalType.Text, false),
new ContractOutputField(ACCOUNT, ContractOutputTechnicalType.Text, true),
new ContractOutputField(STATUS, ContractOutputTechnicalType.Text, false),
new ContractOutputField(HOST, ContractOutputTechnicalType.Text, false)),
findingService);
}

@Override
public boolean validate(JsonNode jsonNode) {
return jsonNode.hasNonNull(ACCOUNT);
}

@Override
public String toFindingValue(JsonNode jsonNode) {
String account = buildString(jsonNode, ACCOUNT);
String status = buildString(jsonNode, STATUS);
if (hasText(status)) {
return account + " (" + status + ")";
}
return account;
}

@Override
public List<String> toFindingAssets(JsonNode jsonNode) {
JsonNode assetIdNode = jsonNode.get(ASSET_ID);
if (assetIdNode == null) {
return Collections.emptyList();
}
if (assetIdNode.isArray()) {
List<String> result = new ArrayList<>();
for (JsonNode idNode : assetIdNode) {
result.add(idNode.asText());
}
return result;
}
return List.of(assetIdNode.asText());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package io.openaev.output_processor;

import com.fasterxml.jackson.databind.JsonNode;
import io.openaev.database.model.ContractOutputField;
import io.openaev.database.model.ContractOutputTechnicalType;
import io.openaev.database.model.ContractOutputType;
import io.openaev.rest.finding.FindingService;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.stereotype.Component;

@Component
public class AdminUsernameOutputProcessor extends FindingCapableOutputProcessor {

private static final String ASSET_ID = "asset_id";
private static final String USERNAME = "username";
private static final String HOST = "host";

public AdminUsernameOutputProcessor(FindingService findingService) {
super(
ContractOutputType.AdminUsername,
ContractOutputTechnicalType.Object,
List.of(
new ContractOutputField(ASSET_ID, ContractOutputTechnicalType.Text, false),
new ContractOutputField(USERNAME, ContractOutputTechnicalType.Text, true),
new ContractOutputField(HOST, ContractOutputTechnicalType.Text, false)),
findingService);
}

@Override
public boolean validate(JsonNode jsonNode) {
return jsonNode.hasNonNull(USERNAME);
}

@Override
public String toFindingValue(JsonNode jsonNode) {
return buildString(jsonNode, USERNAME);
}

@Override
public List<String> toFindingAssets(JsonNode jsonNode) {
JsonNode assetIdNode = jsonNode.get(ASSET_ID);
if (assetIdNode == null) {
return Collections.emptyList();
}
if (assetIdNode.isArray()) {
List<String> result = new ArrayList<>();
for (JsonNode idNode : assetIdNode) {
result.add(idNode.asText());
}
return result;
}
return List.of(assetIdNode.asText());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package io.openaev.output_processor;

import com.fasterxml.jackson.databind.JsonNode;
import io.openaev.database.model.ContractOutputField;
import io.openaev.database.model.ContractOutputTechnicalType;
import io.openaev.database.model.ContractOutputType;
import io.openaev.rest.finding.FindingService;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.stereotype.Component;

@Component
public class AsreproastableAccountOutputProcessor extends FindingCapableOutputProcessor {

private static final String ASSET_ID = "asset_id";
private static final String USERNAME = "username";
private static final String HASH = "hash";
private static final String HOST = "host";

public AsreproastableAccountOutputProcessor(FindingService findingService) {
super(
ContractOutputType.AsreproastableAccount,
ContractOutputTechnicalType.Object,
List.of(
new ContractOutputField(ASSET_ID, ContractOutputTechnicalType.Text, false),
new ContractOutputField(USERNAME, ContractOutputTechnicalType.Text, true),
new ContractOutputField(HASH, ContractOutputTechnicalType.Text, false),
new ContractOutputField(HOST, ContractOutputTechnicalType.Text, false)),
findingService);
}

@Override
public boolean validate(JsonNode jsonNode) {
return jsonNode.hasNonNull(USERNAME);
}

@Override
public String toFindingValue(JsonNode jsonNode) {
return buildString(jsonNode, USERNAME);
}

@Override
public List<String> toFindingAssets(JsonNode jsonNode) {
JsonNode assetIdNode = jsonNode.get(ASSET_ID);
if (assetIdNode == null) {
return Collections.emptyList();
}
if (assetIdNode.isArray()) {
List<String> result = new ArrayList<>();
for (JsonNode idNode : assetIdNode) {
result.add(idNode.asText());
}
return result;
}
return List.of(assetIdNode.asText());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package io.openaev.output_processor;

import com.fasterxml.jackson.databind.JsonNode;
import io.openaev.database.model.ContractOutputField;
import io.openaev.database.model.ContractOutputTechnicalType;
import io.openaev.database.model.ContractOutputType;
import io.openaev.rest.finding.FindingService;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.stereotype.Component;

@Component
public class ComputerOutputProcessor extends FindingCapableOutputProcessor {

private static final String ASSET_ID = "asset_id";
private static final String COMPUTER_NAME = "computer_name";
private static final String HOST = "host";

public ComputerOutputProcessor(FindingService findingService) {
super(
ContractOutputType.Computer,
ContractOutputTechnicalType.Object,
List.of(
new ContractOutputField(ASSET_ID, ContractOutputTechnicalType.Text, false),
new ContractOutputField(COMPUTER_NAME, ContractOutputTechnicalType.Text, true),
new ContractOutputField(HOST, ContractOutputTechnicalType.Text, false)),
findingService);
}

@Override
public boolean validate(JsonNode jsonNode) {
return jsonNode.hasNonNull(COMPUTER_NAME);
}

@Override
public String toFindingValue(JsonNode jsonNode) {
return buildString(jsonNode, COMPUTER_NAME);
}

@Override
public List<String> toFindingAssets(JsonNode jsonNode) {
JsonNode assetIdNode = jsonNode.get(ASSET_ID);
if (assetIdNode == null) {
return Collections.emptyList();
}
if (assetIdNode.isArray()) {
List<String> result = new ArrayList<>();
for (JsonNode idNode : assetIdNode) {
result.add(idNode.asText());
}
return result;
}
return List.of(assetIdNode.asText());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,34 +5,61 @@
import io.openaev.database.model.ContractOutputTechnicalType;
import io.openaev.database.model.ContractOutputType;
import io.openaev.rest.finding.FindingService;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.stereotype.Component;

@Component
public class CredentialsOutputProcessor extends FindingCapableOutputProcessor {

private static final String ASSET_ID = "asset_id";
private static final String USERNAME = "username";
private static final String PASSWORD = "password";
private static final String HASH = "hash";
private static final String HOST = "host";

public CredentialsOutputProcessor(FindingService findingService) {
super(
ContractOutputType.Credentials,
ContractOutputTechnicalType.Object,
List.of(
new ContractOutputField(ASSET_ID, ContractOutputTechnicalType.Text, false),
new ContractOutputField(USERNAME, ContractOutputTechnicalType.Text, true),
new ContractOutputField(PASSWORD, ContractOutputTechnicalType.Text, true)),
new ContractOutputField(PASSWORD, ContractOutputTechnicalType.Text, false),
new ContractOutputField(HASH, ContractOutputTechnicalType.Text, false),
new ContractOutputField(HOST, ContractOutputTechnicalType.Text, false)),
findingService);
}

@Override
public boolean validate(JsonNode jsonNode) {
return jsonNode.hasNonNull(USERNAME) && jsonNode.hasNonNull(PASSWORD);
return jsonNode.hasNonNull(USERNAME)
&& (jsonNode.hasNonNull(PASSWORD) || jsonNode.hasNonNull(HASH));
}

@Override
public String toFindingValue(JsonNode jsonNode) {
String username = buildString(jsonNode, USERNAME);
String password = buildString(jsonNode, PASSWORD);
return username + ":" + password;
if (jsonNode.hasNonNull(PASSWORD)) {
return username + ":" + buildString(jsonNode, PASSWORD);
}
return username + ":" + buildString(jsonNode, HASH);
}

@Override
public List<String> toFindingAssets(JsonNode jsonNode) {
JsonNode assetIdNode = jsonNode.get(ASSET_ID);
if (assetIdNode == null) {
return Collections.emptyList();
}
if (assetIdNode.isArray()) {
List<String> result = new ArrayList<>();
for (JsonNode idNode : assetIdNode) {
result.add(idNode.asText());
}
return result;
}
return List.of(assetIdNode.asText());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package io.openaev.output_processor;

import static org.springframework.util.StringUtils.hasText;

import com.fasterxml.jackson.databind.JsonNode;
import io.openaev.database.model.ContractOutputField;
import io.openaev.database.model.ContractOutputTechnicalType;
import io.openaev.database.model.ContractOutputType;
import io.openaev.rest.finding.FindingService;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.stereotype.Component;

@Component
public class DelegationOutputProcessor extends FindingCapableOutputProcessor {

private static final String ASSET_ID = "asset_id";
private static final String ACCOUNT = "account";
private static final String DELEGATION_TYPE = "delegation_type";
private static final String RIGHTS_TO = "rights_to";
private static final String HOST = "host";

public DelegationOutputProcessor(FindingService findingService) {
super(
ContractOutputType.Delegation,
ContractOutputTechnicalType.Object,
List.of(
new ContractOutputField(ASSET_ID, ContractOutputTechnicalType.Text, false),
new ContractOutputField(ACCOUNT, ContractOutputTechnicalType.Text, true),
new ContractOutputField(DELEGATION_TYPE, ContractOutputTechnicalType.Text, false),
new ContractOutputField(RIGHTS_TO, ContractOutputTechnicalType.Text, false),
new ContractOutputField(HOST, ContractOutputTechnicalType.Text, false)),
findingService);
}

@Override
public boolean validate(JsonNode jsonNode) {
return jsonNode.hasNonNull(ACCOUNT);
}

@Override
public String toFindingValue(JsonNode jsonNode) {
String account = buildString(jsonNode, ACCOUNT);
String delegationType = buildString(jsonNode, DELEGATION_TYPE);
String rightsTo = buildString(jsonNode, RIGHTS_TO);
StringBuilder sb = new StringBuilder(account);
if (hasText(delegationType)) {
sb.append(" [").append(delegationType).append("]");
}
if (hasText(rightsTo)) {
sb.append(" -> ").append(rightsTo);
}
return sb.toString();
}

@Override
public List<String> toFindingAssets(JsonNode jsonNode) {
JsonNode assetIdNode = jsonNode.get(ASSET_ID);
if (assetIdNode == null) {
return Collections.emptyList();
}
if (assetIdNode.isArray()) {
List<String> result = new ArrayList<>();
for (JsonNode idNode : assetIdNode) {
result.add(idNode.asText());
}
return result;
}
return List.of(assetIdNode.asText());
}
}
Loading
Loading