Skip to content

Commit 55488b3

Browse files
authored
Merge pull request #131 from advanced-security/v2_8
V2.8.0
2 parents 23d2d72 + e88b122 commit 55488b3

18 files changed

+468
-111
lines changed

.release.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: "policy-as-code"
2-
version: "2.7.4"
2+
version: "2.8.0"
33

44
locations:
55
- name: "Update Docs"

Pipfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ verify_ssl = true
66
[packages]
77
pyyaml = "*"
88
semantic-version = "*"
9-
ghastoolkit = "==0.12.7"
9+
ghastoolkit = "==0.13.1"
1010

1111
[dev-packages]
1212
sphinx = "*"

Pipfile.lock

+19-19
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ Here is how you can quickly setup policy-as-code.
4545
```yaml
4646
# Policy as Code
4747
- name: Advance Security Policy as Code
48-
uses: advanced-security/policy-as-code@v2.7.4
48+
uses: advanced-security/policy-as-code@v2.8.0
4949
```
5050
5151
> [!WARNING]
@@ -61,15 +61,15 @@ The Policy as Code project is a self-contained Python based CLI tool.
6161
**Bash / Zsh:**
6262

6363
```bash
64-
git clone --branch "v2.7.4" https://github.com/advanced-security/policy-as-code.git && cd ./policy-as-code
64+
git clone --branch "v2.8.0" https://github.com/advanced-security/policy-as-code.git && cd ./policy-as-code
6565
6666
./policy-as-code --help
6767
```
6868

6969
**Powershell:**
7070

7171
```Powershell
72-
git clone --branch "v2.7.4" https://github.com/advanced-security/policy-as-code.git
72+
git clone --branch "v2.8.0" https://github.com/advanced-security/policy-as-code.git
7373
cd policy-as-code
7474
7575
.\policy-as-code.ps1 --help
@@ -128,7 +128,7 @@ Here is an example of using a simple yet cross-organization using Policy as Code
128128
```yaml
129129
# Compliance
130130
- name: Advance Security Policy as Code
131-
uses: advanced-security/policy-as-code@v2.7.4
131+
uses: advanced-security/policy-as-code@v2.8.0
132132
with:
133133
# The owner/repo of where the policy is stored
134134
policy: GeekMasher/security-queries

ghascompliance/__main__.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import argparse
33
import logging
44

5-
from ghastoolkit.octokit.github import GitHub
5+
from ghastoolkit import GitHub, GHASToolkitAuthenticationError
66

77
from ghascompliance.__version__ import __name__ as tool_name, __banner__, __url__
88
from ghascompliance.consts import SEVERITIES
@@ -203,6 +203,15 @@
203203
if not getattr(arguments, f"disable_{check[0]}"):
204204
errors += check[1]()
205205

206+
except GHASToolkitAuthenticationError as err:
207+
Octokit.error("Authentication Error")
208+
Octokit.error(str(err))
209+
210+
errors += 1
211+
# Add to summary
212+
Summary.addLine(f"{Summary.__ICONS__['cross']} :: Authentication Error")
213+
Summary.addLine(Summary.formatItalics(str(err)))
214+
206215
except Exception as err:
207216
Octokit.error("Unknown Exception was hit, please repo this to " + __url__)
208217
Octokit.error(str(err))

ghascompliance/__version__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/usr/bin/env python
2-
__version__ = "2.7.4"
2+
__version__ = "2.8.0"
33

44
__title__ = "GitHub Advanced Security Policy as Code"
55
__name__ = "ghascompliance"

vendor/ghastoolkit/__init__.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
__name__ = "ghastoolkit"
44
__title__ = "GHAS Toolkit"
55

6-
__version__ = "0.12.7"
6+
__version__ = "0.13.1"
77

88
__description__ = "GitHub Advanced Security Python Toolkit"
99
__summary__ = """\
@@ -27,6 +27,8 @@
2727
"""
2828

2929

30+
from ghastoolkit.errors import *
31+
3032
# Octokit
3133
from ghastoolkit.octokit.github import GitHub
3234
from ghastoolkit.octokit.repository import Repository

vendor/ghastoolkit/errors.py

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# GHASToolkit Errors
2+
3+
4+
from typing import List, Optional
5+
6+
7+
class GHASToolkitError(Exception):
8+
"""Base class for GHASToolkit errors."""
9+
10+
def __init__(
11+
self,
12+
message: Optional[str] = None,
13+
docs: Optional[str] = None,
14+
permissions: Optional[List[str]] = [],
15+
status: Optional[int] = None,
16+
) -> None:
17+
self.message = message
18+
self.docs = docs
19+
self.permissions = permissions
20+
self.status = status
21+
22+
super().__init__(message)
23+
24+
def __str__(self) -> str:
25+
msg = ""
26+
27+
if hasattr(self, "message"):
28+
msg = self.message
29+
else:
30+
msg = "An error occurred"
31+
32+
if status := self.status:
33+
msg += f" (status code: {status})"
34+
35+
if permissions := self.permissions:
36+
msg += "\n\nPermissions Required:"
37+
for perm in permissions:
38+
msg += f"\n- {perm}"
39+
if docs := self.docs:
40+
msg += f"\n\nFor more information, see: {docs}"
41+
42+
return msg
43+
44+
45+
class GHASToolkitTypeError(GHASToolkitError):
46+
"""Raised when an invalid type is passed."""
47+
48+
49+
class GHASToolkitAuthenticationError(GHASToolkitError):
50+
"""Raised when an authentication error occurs."""

vendor/ghastoolkit/octokit/advisories.py

+29-8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"""GitHub Security Advisories API."""
22

33
from typing import Dict, Optional
4+
from ghastoolkit.errors import GHASToolkitError, GHASToolkitTypeError
45
from ghastoolkit.octokit.github import GitHub, Repository
56
from ghastoolkit.octokit.octokit import RestRequest
67
from ghastoolkit.supplychain.advisories import Advisories, Advisory, AdvisoryAffect
@@ -20,7 +21,10 @@ def __init__(self, repository: Optional[Repository] = None) -> None:
2021
self.rest = RestRequest(self.repository)
2122

2223
def getAdvisories(self) -> Advisories:
23-
"""Get list of security advisories from a repository."""
24+
"""Get list of security advisories from a repository.
25+
26+
https://docs.github.com/en/rest/security-advisories/repository-advisories#list-repository-security-advisories
27+
"""
2428
results = self.rest.get(
2529
"/repos/{owner}/{repo}/security-advisories", authenticated=True
2630
)
@@ -29,24 +33,38 @@ def getAdvisories(self) -> Advisories:
2933
for advisory in results:
3034
advisories.append(self.loadAdvisoryData(advisory))
3135
return advisories
32-
raise Exception(f"Error getting advisories from repository")
36+
37+
raise GHASToolkitTypeError(
38+
f"Error getting advisories from repository",
39+
docs="https://docs.github.com/en/rest/security-advisories/repository-advisories#list-repository-security-advisories",
40+
)
3341

3442
def getAdvisory(self, ghsa_id: str) -> Advisory:
35-
"""Get advisory by ghsa id."""
43+
"""Get advisory by ghsa id.
44+
45+
https://docs.github.com/en/rest/security-advisories/repository-advisories#get-a-repository-security-advisory
46+
"""
3647
result = self.rest.get(
3748
"/repos/{owner}/{repo}/security-advisories/{ghsa_id}",
3849
{"ghsa_id": ghsa_id},
3950
authenticated=True,
4051
)
4152
if isinstance(result, dict):
4253
return self.loadAdvisoryData(result)
43-
raise Exception(f"Error getting advisory by id")
54+
55+
raise GHASToolkitTypeError(
56+
f"Error getting advisory by id",
57+
docs="https://docs.github.com/en/rest/security-advisories/repository-advisories#get-a-repository-security-advisory",
58+
)
4459

4560
def createAdvisory(
4661
self, advisory: Advisory, repository: Optional[Repository] = None
4762
):
48-
"""Create a GitHub Security Advisories for a repository."""
49-
raise Exception("Unsupported feature")
63+
"""Create a GitHub Security Advisories for a repository.
64+
65+
https://docs.github.com/en/rest/security-advisories/repository-advisories#create-a-repository-security-advisory
66+
"""
67+
raise GHASToolkitError("Unsupported feature")
5068

5169
def createPrivateAdvisory(
5270
self, advisory: Advisory, repository: Optional[Repository] = None
@@ -57,8 +75,11 @@ def createPrivateAdvisory(
5775
def updateAdvisory(
5876
self, advisory: Advisory, repository: Optional[Repository] = None
5977
):
60-
"""Update GitHub Security Advisory."""
61-
raise Exception("Unsupported feature")
78+
"""Update GitHub Security Advisory.
79+
80+
https://docs.github.com/en/rest/security-advisories/repository-advisories#update-a-repository-security-advisory
81+
"""
82+
raise GHASToolkitError("Unsupported feature")
6283

6384
def loadAdvisoryData(self, data: Dict) -> Advisory:
6485
"""Load Advisory from API data."""

vendor/ghastoolkit/octokit/clearlydefined.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from typing import Any, Optional
33
from requests import Session
44

5+
from ghastoolkit.errors import GHASToolkitError
56
from ghastoolkit.supplychain.dependencies import Dependency
67

78

@@ -41,7 +42,7 @@ def createCurationUrl(self, dependency: Dependency) -> Optional[str]:
4142

4243
def getCurations(self, dependency: Dependency) -> dict[str, Any]:
4344
if not dependency.manager:
44-
raise Exception(f"Dependency manager / type must be set")
45+
raise GHASToolkitError(f"Dependency manager / type must be set")
4546

4647
url = self.createCurationUrl(dependency)
4748
if not url:

0 commit comments

Comments
 (0)