Skip to content

Commit 6fcc204

Browse files
author
Daniel Reigada
authored
Merge pull request #38 from codacy/luis-ferreira/feature/add-subcategory-patterns
Add security subcategories to the specification
2 parents b735483 + 572e090 commit 6fcc204

File tree

1 file changed

+69
-9
lines changed

1 file changed

+69
-9
lines changed

src/main/scala/com/codacy/plugins/api/results/Pattern.scala

Lines changed: 69 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,77 @@ object Pattern {
2828

2929
case class Definition(patternId: Pattern.Id, parameters: Option[Set[Parameter.Definition]])
3030

31-
case class Specification(patternId: Pattern.Id,
32-
level: Result.Level,
33-
category: Category,
34-
parameters: Option[Set[Parameter.Specification]],
35-
languages: Option[Set[Language]] = None)
31+
trait Specification {
32+
val patternId: Pattern.Id
33+
val level: Result.Level
34+
val category: Category
35+
val subcategory: Option[Subcategory]
36+
val parameters: Option[Set[Parameter.Specification]]
37+
val languages: Option[Set[Language]]
38+
}
39+
40+
object Specification {
41+
private case class SpecificationImpl(patternId: Pattern.Id,
42+
level: Result.Level,
43+
category: Category,
44+
subcategory: Option[Subcategory],
45+
parameters: Option[Set[Parameter.Specification]],
46+
languages: Option[Set[Language]] = None)
47+
extends Specification
48+
49+
def apply(patternId: Pattern.Id,
50+
level: Result.Level,
51+
category: Category,
52+
subcategory: Option[Subcategory],
53+
parameters: Option[Set[Parameter.Specification]],
54+
languages: Option[Set[Language]] = None): Specification = {
55+
val spec = SpecificationImpl(patternId, level, category, subcategory, parameters, languages)
56+
57+
spec.subcategory match {
58+
case Some(sc) =>
59+
sc match {
60+
case Subcategory.BadDeserialization | Subcategory.BrokenAccess | Subcategory.BrokenAuth |
61+
Subcategory.Injection | Subcategory.Misconfiguration | Subcategory.NoLogging |
62+
Subcategory.SensitiveData | Subcategory.VulnerableComponent | Subcategory.XSS | Subcategory.XXE
63+
if category == Category.Security =>
64+
spec
65+
66+
case _ => throw new Exception("invalid sub category")
67+
}
68+
case None => spec
69+
}
70+
}
71+
}
72+
73+
sealed trait Category
74+
75+
object Category {
76+
case object Security extends Category
77+
case object CodeStyle extends Category
78+
case object ErrorProne extends Category
79+
case object Performance extends Category
80+
case object Compatibility extends Category
81+
case object UnusedCode extends Category
82+
case object Complexity extends Category
83+
case object BestPractice extends Category
84+
case object Comprehensibility extends Category
85+
case object Duplication extends Category
86+
case object Documentation extends Category
87+
}
3688

37-
type Category = Category.Value
89+
sealed trait Subcategory
3890

39-
object Category extends Enumeration {
40-
val Security, CodeStyle, ErrorProne, Performance, Compatibility, UnusedCode, //Deprecated
41-
Complexity, BestPractice, Comprehensibility, Duplication, Documentation = Value
91+
object Subcategory {
92+
case object Injection extends Subcategory
93+
case object BrokenAuth extends Subcategory
94+
case object SensitiveData extends Subcategory
95+
case object XXE extends Subcategory
96+
case object BrokenAccess extends Subcategory
97+
case object Misconfiguration extends Subcategory
98+
case object XSS extends Subcategory
99+
case object BadDeserialization extends Subcategory
100+
case object VulnerableComponent extends Subcategory
101+
case object NoLogging extends Subcategory
42102
}
43103

44104
}

0 commit comments

Comments
 (0)