-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path__init__.py
More file actions
120 lines (97 loc) · 3.97 KB
/
__init__.py
File metadata and controls
120 lines (97 loc) · 3.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import logging
from typing import Optional, Union
from dataclasses import dataclass, asdict
log = logging.getLogger("socketdev")
@dataclass
class SocketBasicsConfig:
"""Data class representing Socket Basics configuration settings."""
pythonSastEnabled: bool = False
golangSastEnabled: bool = False
javascriptSastEnabled: bool = False
secretScanningEnabled: bool = False
trivyImageEnabled: bool = False
trivyDockerfileEnabled: bool = False
socketScanningEnabled: bool = False
socketScaEnabled: bool = False
additionalParameters: str = ""
def __getitem__(self, key):
return getattr(self, key)
def to_dict(self):
return asdict(self)
@classmethod
def from_dict(cls, data: dict) -> "SocketBasicsConfig":
return cls(
pythonSastEnabled=data.get("pythonSastEnabled", False),
golangSastEnabled=data.get("golangSastEnabled", False),
javascriptSastEnabled=data.get("javascriptSastEnabled", False),
secretScanningEnabled=data.get("secretScanningEnabled", False),
trivyImageEnabled=data.get("trivyImageEnabled", False),
trivyDockerfileEnabled=data.get("trivyDockerfileEnabled", False),
socketScanningEnabled=data.get("socketScanningEnabled", False),
socketScaEnabled=data.get("socketScaEnabled", False),
additionalParameters=data.get("additionalParameters", ""),
)
@dataclass
class SocketBasicsResponse:
"""Data class representing the response from Socket Basics API calls."""
success: bool
status: int
config: Optional[SocketBasicsConfig] = None
message: Optional[str] = None
def __getitem__(self, key):
return getattr(self, key)
def to_dict(self):
return asdict(self)
@classmethod
def from_dict(cls, data: dict) -> "SocketBasicsResponse":
return cls(
config=SocketBasicsConfig.from_dict(data) if data else None,
success=True,
status=200,
)
class Basics:
"""
Socket Basics API client for managing CI/CD security scanning configurations.
Socket Basics is a security scanning suite that includes:
- SAST (Static Application Security Testing) for Python, Go, and JavaScript
- Secret scanning for hardcoded credentials
- Container security for Docker images and Dockerfiles
- Socket SCA dependency scanning
"""
def __init__(self, api):
self.api = api
def get_config(
self, org_slug: str, use_types: bool = False
) -> Union[dict, SocketBasicsResponse]:
"""
Get Socket Basics configuration for an organization.
Args:
org_slug: Organization slug
use_types: Whether to return typed response objects (default: False)
Returns:
dict or SocketBasicsResponse: Configuration settings for Socket Basics
Example:
>>> basics = socketdev_client.basics
>>> config = basics.get_config("my-org")
>>> print(config["pythonSastEnabled"])
>>> # Using typed response
>>> response = basics.get_config("my-org", use_types=True)
>>> print(response.config.pythonSastEnabled)
"""
path = f"orgs/{org_slug}/settings/socket-basics"
response = self.api.do_request(path=path, method="GET")
if response.status_code == 200:
config_data = response.json()
if use_types:
return SocketBasicsResponse.from_dict(config_data)
return config_data
error_message = response.json().get("error", {}).get("message", "Unknown error")
log.error(f"Failed to get Socket Basics configuration: {response.status_code}, message: {error_message}")
if use_types:
return SocketBasicsResponse(
success=False,
status=response.status_code,
config=None,
message=error_message
)
return {}