1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.hack23.sonar.cloudformation;
21
22 import org.sonar.api.server.profile.BuiltInQualityProfilesDefinition;
23 import org.sonar.api.server.rule.RulesDefinition.Repository;
24 import org.sonar.api.server.rule.RulesDefinition.Rule;
25
26
27
28
29 public final class CloudformationQualityProfile implements BuiltInQualityProfilesDefinition {
30
31
32
33 private static final String CLOUDFORMATION_RULES = "Cloudformation(cfn-nag,checkov) Rules";
34
35
36 private static final String TERRAFORM_RULES = "Terraform(checkov) Rules";
37
38
39 private static final String SERVERLESS = "serverless";
40
41
42 private static final String CLOUDFORMATION = "cloudformation";
43
44
45 private final CloudformationRulesDefinition cloudformationRulesDefinition;
46
47
48
49
50
51
52 public CloudformationQualityProfile(final CloudformationRulesDefinition cloudformationRulesDefinition) {
53 super();
54 this.cloudformationRulesDefinition = cloudformationRulesDefinition;
55 }
56
57
58
59
60
61
62 @Override
63 public void define(final Context context) {
64
65 createCloudformationQualityProfile(context, "cloudformation");
66 createTerraformQualityProfile(context, "terraform");
67 }
68
69
70
71
72
73
74
75
76 private void createTerraformQualityProfile(final Context context, final String language) {
77 final NewBuiltInQualityProfile iacProfile = context.createBuiltInQualityProfile(TERRAFORM_RULES, language);
78 for (final Repository repository : cloudformationRulesDefinition.getContext().repositories()) {
79 if (repository.key().contains("cloudformation-plugin-terraform")) {
80 for (final Rule rule : repository.rules()) {
81 if (rule.tags().contains(CLOUDFORMATION) || rule.tags().contains(SERVERLESS) || rule.tags().contains("terraform")) {
82 iacProfile.activateRule(repository.key(), rule.key());
83 }
84 }
85 }
86 }
87 iacProfile.done();
88 }
89
90
91
92
93
94
95
96 private void createCloudformationQualityProfile(final Context context, final String language) {
97 final NewBuiltInQualityProfile cloudFormationprofile = context
98 .createBuiltInQualityProfile(CLOUDFORMATION_RULES, language);
99 for (final Repository repository : cloudformationRulesDefinition.getContext().repositories()) {
100 if (repository.key().contains("cloudformation-plugin-cfn")) {
101 for (final Rule rule : repository.rules()) {
102 if (rule.tags().contains(CLOUDFORMATION) || rule.tags().contains(SERVERLESS) || rule.tags().contains("cfn-nag")) {
103 cloudFormationprofile.activateRule(repository.key(), rule.key());
104 }
105 }
106 }
107 }
108 cloudFormationprofile.done();
109 }
110 }