Skip to content

Commit b6b401a

Browse files
authored
Update Customizations and Bundling Creation (#31)
* Update customizations.py * Finish the Customizations work * Fix bug with cmd exec cwd * Update examples with new pack structure
1 parent a6b6323 commit b6b401a

File tree

9 files changed

+55
-50
lines changed

9 files changed

+55
-50
lines changed

codeqlsummarize/exporters/customizations.py

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from codeqlsummarize.models import CodeQLDatabase, GitHub
77
from codeqlsummarize.generator import QUERIES
8+
from codeqlsummarize.utils import findCodeQLCli
89

910
logger = logging.getLogger("codeqlsummarize.exporters")
1011

@@ -19,7 +20,7 @@
1920
"""
2021

2122
CODEQL_CUSTOMIZATION = """\
22-
private class {name}{type}Custom extends {models} {{
23+
private class {name}{type}Custom extends {models}Csv {{
2324
override predicate row(string row) {{
2425
row = [
2526
{rows}
@@ -33,7 +34,7 @@ def saveQLL(
3334
database: CodeQLDatabase, output_customizations: str, github: GitHub, **kargs
3435
):
3536
padding = " " * 6
36-
owner = github.owner.replace("-", "_")
37+
owner = github.owner.replace("-", "_").lower()
3738

3839
models = {}
3940
# initially populate data
@@ -47,7 +48,7 @@ def saveQLL(
4748
if len(summary.rows) == 0:
4849
models[sname] = f"// No {sname} found\n"
4950
continue
50-
for mad in summary.rows:
51+
for mad in sorted(summary.rows):
5152
rows += f'{padding}"{mad}"'
5253

5354
if len(summary.rows) > counter:
@@ -118,35 +119,37 @@ def exportCustomizations(
118119
def exportBundle(database: CodeQLDatabase, output: str, github: GitHub, **kargs):
119120
logger.debug(f"Output directory :: {output}")
120121

121-
owner = github.owner.replace("-", "_")
122+
owner = github.owner.replace("-", "_").lower()
122123

123124
if not github or not github.owner:
124125
raise Exception("Failed to export Bundle: No owner / repo name set")
125126

127+
codeql_pack_path = f"{database.language}-summarize"
128+
codeql_pack_name = f"{owner}/{codeql_pack_path}"
129+
126130
# Create root for language
127-
root = os.path.join(output, database.language, owner)
128-
os.makedirs(root, exist_ok=True)
129-
logger.debug(f"Root for language :: {root}")
130-
131-
# Create language files
132-
codeql_lang_lock = os.path.join(root, "codeql-pack.lock.yml")
133-
if not os.path.exists(codeql_lang_lock):
134-
logger.debug(f"Creating Language Lock file :: {codeql_lang_lock}")
135-
with open(codeql_lang_lock, "w") as handle:
136-
handle.write(CODEQL_LOCK.format(language=database.language))
137-
138-
codeql_lang_pack = os.path.join(root, "qlpack.yml")
139-
if not os.path.exists(codeql_lang_pack):
140-
logger.debug(f"Creating Language Pack file :: {codeql_lang_pack}")
141-
with open(codeql_lang_pack, "w") as handle:
142-
handle.write(
143-
CODEQL_PACK.format(
144-
owner=owner, version="0.1.0", language=database.language
145-
)
146-
)
131+
root = os.path.join(output, codeql_pack_path)
132+
133+
codeql = findCodeQLCli()
134+
135+
if not os.path.exists(root) and codeql:
136+
logger.info("Generating CodeQL Summarize Pack")
137+
codeql("pack", "init", "--version=0.0.1", "--extractor", database.language, codeql_pack_path, cwd=output)
138+
139+
if not os.path.exists(os.path.join(root, "qlpack.yml")):
140+
raise Exception("Pack wasn't found")
141+
142+
# Create README
143+
readme = os.path.join(root, "README.md")
144+
if not os.path.exists(readme):
145+
with open(readme, "w") as handle:
146+
handle.write("# CodeQL Summarize Pack\n")
147+
148+
logger.debug(f"Root Pack Path :: {root}")
147149

148150
# Create language subfolder (if needed)
149-
sub = os.path.join(root, owner, database.language)
151+
sub = os.path.join(root, owner, codeql_pack_path.replace("-", "_"))
152+
logger.debug(f"Checking sub pack path exists: {sub}")
150153
os.makedirs(sub, exist_ok=True)
151154

152155
name = database.display_name(owner=owner) + "Generated"
@@ -157,13 +160,20 @@ def exportBundle(database: CodeQLDatabase, output: str, github: GitHub, **kargs)
157160
# Dynamically update Customizations.qll
158161
customizations_path = os.path.join(sub, "Customizations.qll")
159162
customizations_data = ""
160-
for custom in os.listdir(sub):
163+
164+
codeql_files = os.listdir(sub)
165+
if not codeql_files:
166+
logger.error(f"This is a major issue and please report in the GitHub issues")
167+
raise Exception("Something is really wrong here...")
168+
169+
for custom in codeql_files:
161170
if custom == "Customizations.qll":
162171
continue
163172

164173
custom = custom.replace(".qll", "")
165174

166-
impt = f" private import {owner}.{database.language}.{custom}\n"
175+
impt = f" private import {owner}.{database.language}_summarize.{custom}\n"
176+
167177
customizations_data += impt
168178

169179
with open(customizations_path, "w") as handle:

codeqlsummarize/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
@dataclass
1818
class Summaries:
19-
rows: List[str]
19+
rows: List[str] = field(default_factory=list)
2020

2121

2222
@dataclass

examples/java-summarize/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# CodeQL Summarize Pack
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// This file is Automatically Generated based on the files in-side this relative
2+
// directory. This makes it easier to automate this process.
3+
import java
4+
5+
module geekmasherorg {
6+
private import geekmasherorg.java_summarize.EsapiEsapiJavaLegacyGenerated
7+
8+
}

examples/java/advanced_security/advanced_security/java/EsapiEsapiJavaLegacyGenerated.qll renamed to examples/java-summarize/geekmasherorg/java_summarize/EsapiEsapiJavaLegacyGenerated.qll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import java
22
private import semmle.code.java.dataflow.ExternalFlow
33

4-
private class EsapiEsapiJavaLegacySinkModelCustom extends SinkModel {
4+
private class EsapiEsapiJavaLegacySinkModelCustom extends SinkModelCsv {
55
override predicate row(string row) {
66
row = [
77
"org.owasp.esapi.codecs;Base64;true;decodeFileToFile;(String,String);;Argument[1];create-file;generated",
@@ -27,7 +27,7 @@ private class EsapiEsapiJavaLegacySinkModelCustom extends SinkModel {
2727
}
2828
}
2929

30-
private class EsapiEsapiJavaLegacySourceModelCustom extends SourceModel {
30+
private class EsapiEsapiJavaLegacySourceModelCustom extends SourceModelCsv {
3131
override predicate row(string row) {
3232
row = [
3333
"org.owasp.esapi.filters;SecurityWrapperRequest;true;getParameter;(String,boolean);;ReturnValue;remote;generated",
@@ -43,7 +43,7 @@ private class EsapiEsapiJavaLegacySourceModelCustom extends SourceModel {
4343
}
4444
}
4545

46-
private class EsapiEsapiJavaLegacySummaryModelCustom extends SummaryModel {
46+
private class EsapiEsapiJavaLegacySummaryModelCustom extends SummaryModelCsv {
4747
override predicate row(string row) {
4848
row = [
4949
"java.util;Properties;true;getProperty;(String);;Argument[-1];ReturnValue;taint;generated",

examples/java-summarize/qlpack.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
library: false
3+
name: java-summarize
4+
version: 0.0.1
5+
extractor: java

examples/java/advanced_security/advanced_security/java/Customizations.qll

Lines changed: 0 additions & 7 deletions
This file was deleted.

examples/java/advanced_security/codeql-pack.lock.yml

Lines changed: 0 additions & 6 deletions
This file was deleted.

examples/java/advanced_security/qlpack.yml

Lines changed: 0 additions & 6 deletions
This file was deleted.

0 commit comments

Comments
 (0)