diff options
author | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2019-11-29 16:16:53 +0100 |
---|---|---|
committer | SonarTech <sonartech@sonarsource.com> | 2020-01-13 20:46:25 +0100 |
commit | e13456fdb410c9938402b36a50a5462bc6597a42 (patch) | |
tree | 62b726fb7c8d2e0a97e2b26b501b35849c2a625a /server/sonar-server-common | |
parent | 611fb9ad6896b19dd6f948f348bb0d2608752d6f (diff) | |
download | sonarqube-e13456fdb410c9938402b36a50a5462bc6597a42.tar.gz sonarqube-e13456fdb410c9938402b36a50a5462bc6597a42.zip |
SONAR-12717 add sort and paging to api/hotspots/search
Diffstat (limited to 'server/sonar-server-common')
5 files changed, 46 insertions, 8 deletions
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueDoc.java b/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueDoc.java index 88e8254667a..292139ef1a7 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueDoc.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueDoc.java @@ -33,6 +33,7 @@ import org.sonar.db.rule.RuleDefinitionDto; import org.sonar.server.es.BaseDoc; import org.sonar.server.permission.index.AuthorizationDoc; import org.sonar.server.security.SecurityStandards; +import org.sonar.server.security.SecurityStandards.VulnerabilityProbability; import static org.sonar.server.issue.index.IssueIndexDefinition.TYPE_ISSUE; @@ -330,12 +331,23 @@ public class IssueDoc extends BaseDoc { @CheckForNull public SecurityStandards.SQCategory getSonarSourceSecurityCategory() { - String key = getNullableField(IssueIndexDefinition.FIELD_ISSUE_SONARSOURCE_SECURITY); + String key = getNullableField(IssueIndexDefinition.FIELD_ISSUE_SQ_SECURITY_CATEGORY); return SecurityStandards.SQCategory.fromKey(key).orElse(null); } public IssueDoc setSonarSourceSecurityCategory(@Nullable SecurityStandards.SQCategory c) { - setField(IssueIndexDefinition.FIELD_ISSUE_SONARSOURCE_SECURITY, c == null ? null : c.getKey()); + setField(IssueIndexDefinition.FIELD_ISSUE_SQ_SECURITY_CATEGORY, c == null ? null : c.getKey()); + return this; + } + + @CheckForNull + public VulnerabilityProbability getVulnerabilityProbability() { + Integer score = getNullableField(IssueIndexDefinition.FIELD_ISSUE_VULNERABILITY_PROBABILITY); + return VulnerabilityProbability.byScore(score).orElse(null); + } + + public IssueDoc setVulnerabilityProbability(@Nullable VulnerabilityProbability v) { + setField(IssueIndexDefinition.FIELD_ISSUE_VULNERABILITY_PROBABILITY, v == null ? null : v.getScore()); return this; } } diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIndexDefinition.java b/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIndexDefinition.java index 3e4114d1af1..f02f7536cfc 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIndexDefinition.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIndexDefinition.java @@ -99,7 +99,8 @@ public class IssueIndexDefinition implements IndexDefinition { public static final String FIELD_ISSUE_OWASP_TOP_10 = "owaspTop10"; public static final String FIELD_ISSUE_SANS_TOP_25 = "sansTop25"; public static final String FIELD_ISSUE_CWE = "cwe"; - public static final String FIELD_ISSUE_SONARSOURCE_SECURITY = "sonarsourceSecurity"; + public static final String FIELD_ISSUE_SQ_SECURITY_CATEGORY = "sonarsourceSecurity"; + public static final String FIELD_ISSUE_VULNERABILITY_PROBABILITY = "vulnerabilityProbability"; private final Configuration config; private final boolean enableSource; @@ -160,6 +161,7 @@ public class IssueIndexDefinition implements IndexDefinition { mapping.keywordFieldBuilder(FIELD_ISSUE_OWASP_TOP_10).disableNorms().build(); mapping.keywordFieldBuilder(FIELD_ISSUE_SANS_TOP_25).disableNorms().build(); mapping.keywordFieldBuilder(FIELD_ISSUE_CWE).disableNorms().build(); - mapping.keywordFieldBuilder(FIELD_ISSUE_SONARSOURCE_SECURITY).disableNorms().build(); + mapping.keywordFieldBuilder(FIELD_ISSUE_SQ_SECURITY_CATEGORY).disableNorms().build(); + mapping.keywordFieldBuilder(FIELD_ISSUE_VULNERABILITY_PROBABILITY).disableNorms().build(); } } diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIteratorForSingleChunk.java b/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIteratorForSingleChunk.java index 0095f0c050d..d3ffeb07751 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIteratorForSingleChunk.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/issue/index/IssueIteratorForSingleChunk.java @@ -230,10 +230,12 @@ class IssueIteratorForSingleChunk implements IssueIterator { doc.setType(RuleType.valueOf(rs.getInt(22))); SecurityStandards securityStandards = fromSecurityStandards(deserializeSecurityStandardsString(rs.getString(23))); + SecurityStandards.SQCategory sqCategory = securityStandards.getSqCategory(); doc.setOwaspTop10(securityStandards.getOwaspTop10()); doc.setCwe(securityStandards.getCwe()); doc.setSansTop25(securityStandards.getSansTop25()); - doc.setSonarSourceSecurityCategory(securityStandards.getSqCategory()); + doc.setSonarSourceSecurityCategory(sqCategory); + doc.setVulnerabilityProbability(sqCategory.getVulnerability()); return doc; } diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/security/SecurityStandards.java b/server/sonar-server-common/src/main/java/org/sonar/server/security/SecurityStandards.java index b954d454339..89bb8ab155b 100644 --- a/server/sonar-server-common/src/main/java/org/sonar/server/security/SecurityStandards.java +++ b/server/sonar-server-common/src/main/java/org/sonar/server/security/SecurityStandards.java @@ -22,6 +22,7 @@ package org.sonar.server.security; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Ordering; +import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; @@ -64,9 +65,28 @@ public final class SecurityStandards { SANS_TOP_25_POROUS_DEFENSES, POROUS_CWE); public enum VulnerabilityProbability { - HIGH, - MEDIUM, - LOW + HIGH(3), + MEDIUM(2), + LOW(1); + + private final int score; + + VulnerabilityProbability(int index) { + this.score = index; + } + + public int getScore() { + return score; + } + + public static Optional<VulnerabilityProbability> byScore(@Nullable Integer score) { + if (score == null) { + return Optional.empty(); + } + return Arrays.stream(values()) + .filter(t -> t.score == score) + .findFirst(); + } } public enum SQCategory { diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexerTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexerTest.java index abaefc7c63a..c33af919d42 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexerTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/issue/index/IssueIndexerTest.java @@ -50,6 +50,7 @@ import org.sonar.server.permission.index.AuthorizationScope; import org.sonar.server.permission.index.IndexPermissions; import org.sonar.server.security.SecurityStandards; import org.sonar.server.security.SecurityStandards.SQCategory; +import org.sonar.server.security.SecurityStandards.VulnerabilityProbability; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; @@ -140,6 +141,7 @@ public class IssueIndexerTest { assertThat(doc.getOwaspTop10()).isEmpty(); assertThat(doc.getSansTop25()).isEmpty(); assertThat(doc.getSonarSourceSecurityCategory()).isEqualTo(SQCategory.OTHERS); + assertThat(doc.getVulnerabilityProbability()).isEqualTo(VulnerabilityProbability.LOW); } @Test |