Skip to content

Commit ead607b

Browse files
added api version
1 parent b013be6 commit ead607b

File tree

2 files changed

+105
-1
lines changed

2 files changed

+105
-1
lines changed

src/scsctl/helper/common.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def modify_and_build_docker_image(folder_path: str, package_nammes: list, bacth_
6666
return True
6767

6868

69-
def generate_final_report(sbom_package_names, pyroscope_package_names=[], falco_found_extra_packages=[]):
69+
def generate_final_report(sbom_package_names, pyroscope_package_names=[], falco_found_extra_packages=[], is_api=False):
7070
sbom_package_names = json.loads(sbom_package_names)
7171
sbom_package_names = sbom_package_names["Results"]
7272
sbom_packages = [item["Vulnerabilities"] for item in sbom_package_names if item["Class"] != "lang-pkgs"][0]
@@ -93,6 +93,10 @@ def generate_final_report(sbom_package_names, pyroscope_package_names=[], falco_
9393
headers = ["Package Names", "Vulnerability IDs", "Severities"]
9494
data = []
9595
for item in grouped_packages:
96+
if(is_api):
97+
data.append({"package_names": item, "vulnerability_ids": grouped_packages[item]["VulnerabilityID"], "severities": [f"{k} - {v}" for k, v in grouped_packages[item]["Severity"].items()]})
98+
continue
99+
96100
severity_joined = "\n".join(f"{k} - {v}" for k, v in grouped_packages[item]["Severity"].items())
97101
data.append(
98102
[
@@ -102,5 +106,9 @@ def generate_final_report(sbom_package_names, pyroscope_package_names=[], falco_
102106
]
103107
)
104108

109+
110+
if(is_api):
111+
return data
112+
105113
table = tabulate(data, headers=headers, tablefmt="grid")
106114
return table

src/scsctl/server.py

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import uvicorn
2+
from fastapi import FastAPI
3+
from pydantic import BaseModel
4+
from scsctl.helper.pyroscope import (
5+
get_pyroscope_data,
6+
save_pyroscope_data,
7+
compare_and_find_pyroscope_extra_packages,
8+
)
9+
10+
from scsctl.helper.trivy import (get_sbom_report)
11+
12+
from scsctl.helper.common import AppDetails,generate_final_report
13+
14+
from scsctl.helper.trivy import get_sbom_report, save_sbom_data
15+
16+
from scsctl.helper.falco import (
17+
parse_logs_and_get_package_paths,
18+
save_falco_data,
19+
)
20+
21+
from datetime import datetime
22+
23+
class Config(BaseModel):
24+
pyroscope_app_name: str
25+
docker_image_name: str
26+
pyroscope_url: str
27+
falco_pod_name: str = None
28+
falco_target_deployment_name: str = None
29+
docker_file_folder_path: str = None
30+
db_enabled: bool = False
31+
falco_enabled: bool = False
32+
33+
app = FastAPI()
34+
35+
36+
@app.get("/")
37+
async def root():
38+
return {"message": "Hello World"}
39+
40+
@app.post("/scan")
41+
async def scan_api(config: Config):
42+
current_datetime = datetime.now().strftime("%Y_%m_%d_%H_%M_%S")
43+
batch_id = f"scsctl_{current_datetime}"
44+
falco_found_extra_packages = []
45+
appDetails = AppDetails(
46+
pyroscope_app_name=config.pyroscope_app_name, docker_image_name=config.docker_image_name, pyroscope_url=config.pyroscope_url
47+
)
48+
scan_status = True
49+
sbom_report, sbom_status = get_sbom_report(appDetails)
50+
if sbom_status:
51+
pyroscope_data, pyroscope_status = get_pyroscope_data(appDetails)
52+
if pyroscope_status:
53+
pyroscope_found_extra_packages = compare_and_find_pyroscope_extra_packages(
54+
pyroscope_package_names=pyroscope_data,
55+
sbom_package_names=sbom_report,
56+
)
57+
if config.falco_enabled:
58+
falco_package_paths, falco_status = parse_logs_and_get_package_paths(
59+
falco_pod_name=config.falco_pod_name, target_deployment_name=config.falco_target_deployment_name
60+
)
61+
if falco_status:
62+
falco_found_extra_packages = config.compare_and_find_extra_packages_using_falco(
63+
falco_package_paths, sbom_report
64+
)
65+
final_report = generate_final_report(
66+
sbom_package_names=sbom_report,
67+
pyroscope_package_names=pyroscope_found_extra_packages,
68+
falco_found_extra_packages=falco_found_extra_packages
69+
)
70+
else:
71+
final_report = generate_final_report(
72+
sbom_package_names=sbom_report, pyroscope_package_names=pyroscope_found_extra_packages, is_api = True
73+
)
74+
if config.db_enabled:
75+
save_sbom_data(sbom_data=sbom_report, batch_id=batch_id)
76+
save_pyroscope_data(pyroscope_data=pyroscope_data, batch_id=batch_id)
77+
if config.falco_enabled:
78+
save_falco_data(falco_data=falco_found_extra_packages, batch_id=batch_id)
79+
80+
else:
81+
scan_status = False
82+
print("\nError fetching data from pyroscope... Exiting")
83+
else:
84+
scan_status = False
85+
print("\nError fetching data from sbom_report... Exiting")
86+
return {
87+
"scan_status": scan_status,
88+
"sbom_report": sbom_report,
89+
"pyroscope_data": pyroscope_data,
90+
"pyroscope_found_extra_packages": pyroscope_found_extra_packages,
91+
"falco_found_extra_packages": falco_found_extra_packages,
92+
"final_report": final_report,
93+
}
94+
95+
if __name__ == "__main__":
96+
uvicorn.run("server:app", port=5000, log_level="info", reload=True)

0 commit comments

Comments
 (0)