prismor 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
prismor/__init__.py ADDED
@@ -0,0 +1,6 @@
1
+ """Prismor CLI - Security scanning tool for GitHub repositories."""
2
+
3
+ __version__ = "0.1.0"
4
+ __author__ = "Prismor"
5
+ __description__ = "A CLI tool for scanning GitHub repositories for vulnerabilities, secrets, and generating SBOMs"
6
+
prismor/api.py ADDED
@@ -0,0 +1,118 @@
1
+ """API client for Prismor security scanning service."""
2
+
3
+ import os
4
+ import requests
5
+ from typing import Optional, Dict, Any
6
+
7
+
8
+ class PrismorAPIError(Exception):
9
+ """Custom exception for Prismor API errors."""
10
+ pass
11
+
12
+
13
+ class PrismorClient:
14
+ """Client for interacting with Prismor API."""
15
+
16
+ def __init__(self, api_key: Optional[str] = None):
17
+ """Initialize the Prismor API client.
18
+
19
+ Args:
20
+ api_key: Prismor API key. If not provided, will look for PRISMOR_API_KEY env var.
21
+ """
22
+ self.api_key = api_key or os.environ.get("PRISMOR_API_KEY")
23
+ if not self.api_key:
24
+ raise PrismorAPIError(
25
+ "PRISMOR_API_KEY environment variable is not set. "
26
+ "Please set it with: export PRISMOR_API_KEY=your_api_key"
27
+ )
28
+
29
+ self.base_url = "https://api.prismor.dev"
30
+ self.headers = {
31
+ "Authorization": f"Bearer {self.api_key}",
32
+ "Content-Type": "application/json"
33
+ }
34
+
35
+ def normalize_repo_url(self, repo: str) -> str:
36
+ """Normalize repository input to a full GitHub URL.
37
+
38
+ Args:
39
+ repo: Repository in format 'username/repo' or full GitHub URL
40
+
41
+ Returns:
42
+ Full GitHub repository URL
43
+ """
44
+ if repo.startswith("http://") or repo.startswith("https://"):
45
+ return repo
46
+
47
+ # Assume it's in username/repo format
48
+ if "/" in repo:
49
+ return f"https://github.com/{repo}"
50
+
51
+ raise PrismorAPIError(
52
+ f"Invalid repository format: {repo}. "
53
+ "Please use 'username/repo' or full GitHub URL"
54
+ )
55
+
56
+ def scan(
57
+ self,
58
+ repo: str,
59
+ vex: bool = False,
60
+ sbom: bool = False,
61
+ detect_secret: bool = False,
62
+ fullscan: bool = False
63
+ ) -> Dict[str, Any]:
64
+ """Perform security scan on a GitHub repository.
65
+
66
+ Args:
67
+ repo: Repository URL or username/repo format
68
+ vex: Enable vulnerability scanning
69
+ sbom: Enable SBOM generation
70
+ detect_secret: Enable secret detection
71
+ fullscan: Enable all scan types
72
+
73
+ Returns:
74
+ Dictionary containing scan results
75
+ """
76
+ repo_url = self.normalize_repo_url(repo)
77
+
78
+ # Prepare request payload
79
+ payload = {
80
+ "repo_url": repo_url,
81
+ "vex": vex or fullscan,
82
+ "sbom": sbom or fullscan,
83
+ "detect_secret": detect_secret or fullscan,
84
+ "fullscan": fullscan
85
+ }
86
+
87
+ try:
88
+ response = requests.post(
89
+ f"{self.base_url}/scan",
90
+ json=payload,
91
+ headers=self.headers,
92
+ timeout=300 # 5 minute timeout
93
+ )
94
+
95
+ if response.status_code == 401:
96
+ raise PrismorAPIError("Invalid API key. Please check your PRISMOR_API_KEY.")
97
+
98
+ if response.status_code == 404:
99
+ raise PrismorAPIError("API endpoint not found. Please check the API URL.")
100
+
101
+ if response.status_code >= 400:
102
+ error_msg = response.json().get("error", "Unknown error")
103
+ raise PrismorAPIError(f"API error: {error_msg}")
104
+
105
+ response.raise_for_status()
106
+ return response.json()
107
+
108
+ except requests.exceptions.Timeout:
109
+ raise PrismorAPIError(
110
+ "Request timed out. The repository scan is taking longer than expected."
111
+ )
112
+ except requests.exceptions.ConnectionError:
113
+ raise PrismorAPIError(
114
+ "Failed to connect to Prismor API. Please check your internet connection."
115
+ )
116
+ except requests.exceptions.RequestException as e:
117
+ raise PrismorAPIError(f"Request failed: {str(e)}")
118
+
prismor/cli.py ADDED
@@ -0,0 +1,210 @@
1
+ """Command-line interface for Prismor security scanning tool."""
2
+
3
+ import sys
4
+ import json
5
+ import click
6
+ from typing import Optional
7
+ from .api import PrismorClient, PrismorAPIError
8
+
9
+
10
+ def print_success(message: str):
11
+ """Print success message in green."""
12
+ click.secho(f"✓ {message}", fg="green")
13
+
14
+
15
+ def print_error(message: str):
16
+ """Print error message in red."""
17
+ click.secho(f"✗ {message}", fg="red", err=True)
18
+
19
+
20
+ def print_info(message: str):
21
+ """Print info message in blue."""
22
+ click.secho(f"ℹ {message}", fg="blue")
23
+
24
+
25
+ def print_warning(message: str):
26
+ """Print warning message in yellow."""
27
+ click.secho(f"⚠ {message}", fg="yellow")
28
+
29
+
30
+ def format_scan_results(results: dict, scan_type: str):
31
+ """Format and display scan results."""
32
+ click.echo("\n" + "=" * 60)
33
+ click.secho(f" Scan Results - {scan_type}", fg="cyan", bold=True)
34
+ click.echo("=" * 60 + "\n")
35
+
36
+ # Display repository information
37
+ if "repository" in results:
38
+ click.secho("Repository:", fg="yellow", bold=True)
39
+ click.echo(f" {results['repository']}\n")
40
+
41
+ # Display scan status
42
+ if "status" in results:
43
+ status_color = "green" if results["status"] == "success" else "red"
44
+ click.secho(f"Status: ", fg="yellow", bold=True, nl=False)
45
+ click.secho(results["status"], fg=status_color)
46
+ click.echo()
47
+
48
+ # Display scan results based on type
49
+ if "scan_results" in results:
50
+ scan_data = results["scan_results"]
51
+
52
+ # Vulnerability scan results
53
+ if "vulnerabilities" in scan_data or "Results" in scan_data:
54
+ click.secho("Vulnerabilities Found:", fg="yellow", bold=True)
55
+ vuln_data = scan_data.get("vulnerabilities", scan_data.get("Results", []))
56
+ if isinstance(vuln_data, list):
57
+ click.echo(f" Total: {len(vuln_data)}")
58
+ else:
59
+ click.echo(f" Data available in detailed output")
60
+ click.echo()
61
+
62
+ # Secret scan results
63
+ if "secrets" in scan_data or "findings_summary" in scan_data:
64
+ click.secho("Secrets Detected:", fg="yellow", bold=True)
65
+ secrets = scan_data.get("secrets", scan_data.get("findings_summary", {}))
66
+ if isinstance(secrets, dict):
67
+ for key, value in secrets.items():
68
+ click.echo(f" {key}: {value}")
69
+ else:
70
+ click.echo(f" {len(secrets) if isinstance(secrets, list) else 'Data available'}")
71
+ click.echo()
72
+
73
+ # SBOM results
74
+ if "sbom" in scan_data or "artifacts" in scan_data:
75
+ click.secho("SBOM Generated:", fg="yellow", bold=True)
76
+ sbom_data = scan_data.get("sbom", scan_data.get("artifacts", []))
77
+ if isinstance(sbom_data, list):
78
+ click.echo(f" Total artifacts: {len(sbom_data)}")
79
+ else:
80
+ click.echo(f" SBOM data available")
81
+ click.echo()
82
+
83
+ # Display result URLs if available
84
+ if "public_url" in results:
85
+ click.secho("Results URL:", fg="yellow", bold=True)
86
+ click.echo(f" {results['public_url']}\n")
87
+
88
+ if "presigned_url" in results:
89
+ click.secho("Download URL:", fg="yellow", bold=True)
90
+ click.echo(f" {results['presigned_url']}\n")
91
+
92
+ click.echo("=" * 60 + "\n")
93
+
94
+
95
+ @click.group(invoke_without_command=True)
96
+ @click.option(
97
+ "--scan",
98
+ type=str,
99
+ help="Repository to scan (username/repo or full GitHub URL)"
100
+ )
101
+ @click.option("--vex", is_flag=True, help="Perform vulnerability scanning")
102
+ @click.option("--sbom", is_flag=True, help="Generate Software Bill of Materials")
103
+ @click.option("--detect-secret", is_flag=True, help="Detect secrets in repository")
104
+ @click.option("--fullscan", is_flag=True, help="Perform all scan types")
105
+ @click.option("--json", "output_json", is_flag=True, help="Output results in JSON format")
106
+ @click.version_option(version="0.1.0", prog_name="prismor")
107
+ @click.pass_context
108
+ def cli(ctx, scan: Optional[str], vex: bool, sbom: bool, detect_secret: bool,
109
+ fullscan: bool, output_json: bool):
110
+ """Prismor CLI - Security scanning tool for GitHub repositories.
111
+
112
+ Examples:
113
+ prismor --scan username/repo --vex
114
+ prismor --scan username/repo --fullscan
115
+ prismor --scan https://github.com/username/repo --detect-secret
116
+ """
117
+ # If no command and no scan option, show help
118
+ if ctx.invoked_subcommand is None and not scan:
119
+ click.echo(ctx.get_help())
120
+ return
121
+
122
+ # If scan option is provided, perform the scan
123
+ if scan:
124
+ # Check if at least one scan type is selected
125
+ if not any([vex, sbom, detect_secret, fullscan]):
126
+ print_error("Please specify at least one scan type: --vex, --sbom, --detect-secret, or --fullscan")
127
+ sys.exit(1)
128
+
129
+ try:
130
+ # Initialize API client
131
+ print_info(f"Initializing Prismor scan for: {scan}")
132
+ client = PrismorClient()
133
+
134
+ # Determine scan type for display
135
+ scan_types = []
136
+ if fullscan:
137
+ scan_types.append("Full Scan (VEX + SBOM + Secret Detection)")
138
+ else:
139
+ if vex:
140
+ scan_types.append("VEX")
141
+ if sbom:
142
+ scan_types.append("SBOM")
143
+ if detect_secret:
144
+ scan_types.append("Secret Detection")
145
+
146
+ print_info(f"Scan type: {', '.join(scan_types)}")
147
+ print_info("Starting scan... (this may take a few minutes)")
148
+
149
+ # Perform scan
150
+ results = client.scan(
151
+ repo=scan,
152
+ vex=vex,
153
+ sbom=sbom,
154
+ detect_secret=detect_secret,
155
+ fullscan=fullscan
156
+ )
157
+
158
+ # Output results
159
+ if output_json:
160
+ click.echo(json.dumps(results, indent=2))
161
+ else:
162
+ print_success("Scan completed successfully!")
163
+ format_scan_results(results, ', '.join(scan_types))
164
+
165
+ except PrismorAPIError as e:
166
+ print_error(str(e))
167
+ sys.exit(1)
168
+ except Exception as e:
169
+ print_error(f"Unexpected error: {str(e)}")
170
+ sys.exit(1)
171
+
172
+
173
+ @cli.command()
174
+ def version():
175
+ """Display the version of Prismor CLI."""
176
+ click.echo("Prismor CLI v0.1.0")
177
+
178
+
179
+ @cli.command()
180
+ def config():
181
+ """Display current configuration."""
182
+ import os
183
+
184
+ click.echo("\n" + "=" * 60)
185
+ click.secho(" Prismor CLI Configuration", fg="cyan", bold=True)
186
+ click.echo("=" * 60 + "\n")
187
+
188
+ # Check API key
189
+ api_key = os.environ.get("PRISMOR_API_KEY")
190
+ if api_key:
191
+ # Show only first and last 4 characters
192
+ masked_key = f"{api_key[:4]}...{api_key[-4:]}" if len(api_key) > 8 else "***"
193
+ print_success(f"PRISMOR_API_KEY: {masked_key}")
194
+ else:
195
+ print_error("PRISMOR_API_KEY: Not set")
196
+ click.echo("\nTo set your API key, run:")
197
+ click.echo(" export PRISMOR_API_KEY=your_api_key")
198
+
199
+ click.echo("\nAPI Endpoint: https://api.prismor.dev")
200
+ click.echo("=" * 60 + "\n")
201
+
202
+
203
+ def main():
204
+ """Entry point for the CLI."""
205
+ cli()
206
+
207
+
208
+ if __name__ == "__main__":
209
+ main()
210
+
@@ -0,0 +1,371 @@
1
+ Metadata-Version: 2.4
2
+ Name: prismor
3
+ Version: 0.1.0
4
+ Summary: A CLI tool for scanning GitHub repositories for vulnerabilities, secrets, and generating SBOMs
5
+ Home-page: https://github.com/PrismorSec/prismor-cli
6
+ Author: Prismor
7
+ Author-email: support@prismor.dev
8
+ Project-URL: Bug Reports, https://github.com/PrismorSec/prismor-cli/issues
9
+ Project-URL: Source, https://github.com/PrismorSec/prismor-cli
10
+ Project-URL: Documentation, https://docs.prismor.dev
11
+ Project-URL: Homepage, https://prismor.dev
12
+ Keywords: security scanning vulnerability sbom secrets github
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Topic :: Security
16
+ Classifier: Topic :: Software Development :: Quality Assurance
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.7
20
+ Classifier: Programming Language :: Python :: 3.8
21
+ Classifier: Programming Language :: Python :: 3.9
22
+ Classifier: Programming Language :: Python :: 3.10
23
+ Classifier: Programming Language :: Python :: 3.11
24
+ Classifier: Programming Language :: Python :: 3.12
25
+ Requires-Python: >=3.7
26
+ Description-Content-Type: text/markdown
27
+ License-File: LICENSE
28
+ Requires-Dist: click>=8.0.0
29
+ Requires-Dist: requests>=2.25.0
30
+ Dynamic: author
31
+ Dynamic: author-email
32
+ Dynamic: classifier
33
+ Dynamic: description
34
+ Dynamic: description-content-type
35
+ Dynamic: home-page
36
+ Dynamic: keywords
37
+ Dynamic: license-file
38
+ Dynamic: project-url
39
+ Dynamic: requires-dist
40
+ Dynamic: requires-python
41
+ Dynamic: summary
42
+
43
+ # Prismor CLI
44
+
45
+ A powerful command-line tool for scanning GitHub repositories for security vulnerabilities, secrets, and generating Software Bill of Materials (SBOM).
46
+
47
+ **Get started at [https://prismor.dev](https://prismor.dev)** - Sign up for free to get your API key and access full dashboarding and analysis features!
48
+
49
+ ## Features
50
+
51
+ - 🔍 **Vulnerability Scanning (VEX)** - Detect security vulnerabilities in your codebase
52
+ - 🔐 **Secret Detection** - Find exposed secrets, API keys, and credentials
53
+ - 📦 **SBOM Generation** - Generate comprehensive Software Bill of Materials
54
+ - ⚡ **Full Scan** - Run all security checks in one command
55
+ - 🎨 **Beautiful CLI Output** - Colorful, easy-to-read results
56
+ - 🔗 **Flexible Repository Input** - Support for `username/repo` or full GitHub URLs
57
+
58
+ ## Quick Start
59
+
60
+ 1. **Sign up** at [https://prismor.dev](https://prismor.dev)
61
+ 2. **Generate your API Key** from the dashboard
62
+ 3. **Install** the CLI: `pip install prismor`
63
+ 4. **Set your API key**: `export PRISMOR_API_KEY=your_api_key`
64
+ 5. **Run your first scan**: `prismor --scan username/repo --fullscan`
65
+
66
+ For the complete analysis with dashboards and reports, visit [Prismor.dev](https://prismor.dev) after running scans!
67
+
68
+ ## Installation
69
+
70
+ Install Prismor CLI via pip:
71
+
72
+ ```bash
73
+ pip install prismor
74
+ ```
75
+
76
+ ## Prerequisites
77
+
78
+ ### Getting Your API Key
79
+
80
+ Before using Prismor CLI, you need to get your API key from [Prismor.dev](https://prismor.dev):
81
+
82
+ 1. Visit [https://prismor.dev](https://prismor.dev)
83
+ 2. **Sign up** for a free account
84
+ 3. Navigate to your dashboard
85
+ 4. **Generate an API Key**
86
+ 5. Copy your API key
87
+
88
+ ### Setting Up Your API Key
89
+
90
+ Once you have your API key, set it as an environment variable:
91
+
92
+ ```bash
93
+ export PRISMOR_API_KEY=your_api_key_here
94
+ ```
95
+
96
+ To make this permanent, add it to your shell configuration file (`~/.bashrc`, `~/.zshrc`, etc.):
97
+
98
+ ```bash
99
+ echo 'export PRISMOR_API_KEY=your_api_key_here' >> ~/.zshrc
100
+ source ~/.zshrc
101
+ ```
102
+
103
+ ### Private Repositories
104
+
105
+ To scan **private repositories**, you need to integrate your GitHub account:
106
+
107
+ 1. Go to [Prismor.dev](https://prismor.dev)
108
+ 2. Navigate to **Settings** or **Integrations**
109
+ 3. **Connect your GitHub account**
110
+ 4. Authorize Prismor to access your private repositories
111
+
112
+ This allows Prismor to securely access and scan your private repositories.
113
+
114
+ ## Usage
115
+
116
+ ### Basic Syntax
117
+
118
+ ```bash
119
+ prismor --scan <repository> [scan-type]
120
+ ```
121
+
122
+ ### Repository Format
123
+
124
+ You can specify repositories in two ways:
125
+
126
+ 1. **Username/Repository format:**
127
+ ```bash
128
+ prismor --scan Ar9av/trychai-web-revamped --fullscan
129
+ ```
130
+
131
+ 2. **Full GitHub URL:**
132
+ ```bash
133
+ prismor --scan https://github.com/Ar9av/trychai-web-revamped --fullscan
134
+ ```
135
+
136
+ ### Scan Types
137
+
138
+ #### 1. Vulnerability Scanning (VEX)
139
+
140
+ Scan for security vulnerabilities in your dependencies and code:
141
+
142
+ ```bash
143
+ prismor --scan myrepository --vex
144
+ ```
145
+
146
+ #### 2. Secret Detection
147
+
148
+ Detect exposed secrets, API keys, passwords, and other sensitive information:
149
+
150
+ ```bash
151
+ prismor --scan myrepository --detect-secret
152
+ ```
153
+
154
+ #### 3. SBOM Generation
155
+
156
+ Generate a Software Bill of Materials for your repository:
157
+
158
+ ```bash
159
+ prismor --scan myrepository --sbom
160
+ ```
161
+
162
+ #### 4. Full Scan
163
+
164
+ Run all security checks (VEX + Secret Detection + SBOM):
165
+
166
+ ```bash
167
+ prismor --scan myrepository --fullscan
168
+ ```
169
+
170
+ ### Multiple Scan Types
171
+
172
+ You can combine multiple scan types:
173
+
174
+ ```bash
175
+ prismor --scan myrepository --vex --detect-secret
176
+ ```
177
+
178
+ ### JSON Output
179
+
180
+ Get results in JSON format for automation and integration:
181
+
182
+ ```bash
183
+ prismor --scan myrepository --fullscan --json
184
+ ```
185
+
186
+ ## Examples
187
+
188
+ ### Example 1: Quick Vulnerability Scan
189
+
190
+ ```bash
191
+ prismor --scan facebook/react --vex
192
+ ```
193
+
194
+ ### Example 2: Comprehensive Security Audit
195
+
196
+ ```bash
197
+ prismor --scan https://github.com/microsoft/vscode --fullscan
198
+ ```
199
+
200
+ ### Example 3: Secret Detection Only
201
+
202
+ ```bash
203
+ prismor --scan openai/gpt-3 --detect-secret
204
+ ```
205
+
206
+ ### Example 4: SBOM Generation with JSON Output
207
+
208
+ ```bash
209
+ prismor --scan kubernetes/kubernetes --sbom --json > sbom-results.json
210
+ ```
211
+
212
+ ## Additional Commands
213
+
214
+ ### Check Configuration
215
+
216
+ View your current Prismor CLI configuration:
217
+
218
+ ```bash
219
+ prismor config
220
+ ```
221
+
222
+ ### Version Information
223
+
224
+ Display the version of Prismor CLI:
225
+
226
+ ```bash
227
+ prismor version
228
+ ```
229
+
230
+ Or:
231
+
232
+ ```bash
233
+ prismor --version
234
+ ```
235
+
236
+ ### Help
237
+
238
+ Get help and see all available options:
239
+
240
+ ```bash
241
+ prismor --help
242
+ ```
243
+
244
+ ## Output
245
+
246
+ Prismor CLI provides clear, colorful output with:
247
+
248
+ - ✓ Success indicators
249
+ - ✗ Error messages
250
+ - ℹ Information updates
251
+ - ⚠ Warnings
252
+ - Detailed scan results including:
253
+ - Repository information
254
+ - Vulnerability counts
255
+ - Secret detection findings
256
+ - SBOM artifact counts
257
+ - Download links for detailed reports
258
+
259
+ ## Full Analysis & Dashboarding
260
+
261
+ For comprehensive analysis and visualization of your scan results, visit the **[Prismor Dashboard](https://prismor.dev)**:
262
+
263
+ ### Features Available on Prismor.dev:
264
+ - 📊 **Interactive Dashboards** - Visualize security trends and metrics
265
+ - 📈 **Historical Analysis** - Track vulnerabilities over time
266
+ - 🎯 **Detailed Reports** - In-depth analysis of all findings
267
+ - 🔔 **Alerts & Notifications** - Get notified of critical issues
268
+ - 👥 **Team Collaboration** - Share reports with your team
269
+ - 🔄 **CI/CD Integration** - Automate scans in your pipeline
270
+ - 📁 **Repository Management** - Manage multiple repositories in one place
271
+
272
+ ### Accessing Full Reports:
273
+
274
+ After running a scan with the CLI, you can:
275
+
276
+ 1. Visit [https://prismor.dev](https://prismor.dev)
277
+ 2. Log into your dashboard
278
+ 3. View all your scan results with rich visualizations
279
+ 4. Export reports in various formats
280
+ 5. Set up automated scanning schedules
281
+
282
+ The CLI provides quick results in your terminal, while the web dashboard offers comprehensive analysis and long-term security monitoring.
283
+
284
+ ## API Information
285
+
286
+ Prismor CLI communicates with the Prismor API at `https://api.prismor.dev`. The CLI handles:
287
+
288
+ - Authentication via API key
289
+ - Request formatting
290
+ - Error handling
291
+ - Response parsing
292
+ - Result presentation
293
+
294
+ ## Troubleshooting
295
+
296
+ ### API Key Not Set
297
+
298
+ If you see an error about `PRISMOR_API_KEY` not being set:
299
+
300
+ ```bash
301
+ export PRISMOR_API_KEY=your_api_key_here
302
+ ```
303
+
304
+ ### Invalid Repository Format
305
+
306
+ Ensure your repository is in one of these formats:
307
+ - `username/repository`
308
+ - `https://github.com/username/repository`
309
+
310
+ ### Connection Issues
311
+
312
+ If you experience connection issues:
313
+ 1. Check your internet connection
314
+ 2. Verify the API endpoint is accessible
315
+ 3. Ensure your API key is valid
316
+
317
+ ## Development
318
+
319
+ ### Local Installation
320
+
321
+ For development, clone the repository and install in editable mode:
322
+
323
+ ```bash
324
+ git clone https://github.com/PrismorSec/prismor-cli.git
325
+ cd prismor-cli
326
+ pip install -e .
327
+ ```
328
+
329
+ ### Project Structure
330
+
331
+ ```
332
+ prismor-cli/
333
+ ├── prismor/
334
+ │ ├── __init__.py # Package initialization
335
+ │ ├── cli.py # CLI interface and commands
336
+ │ └── api.py # API client and communication
337
+ ├── setup.py # Package configuration
338
+ ├── requirements.txt # Dependencies
339
+ └── README.md # Documentation
340
+ ```
341
+
342
+ ## Requirements
343
+
344
+ - Python 3.7 or higher
345
+ - `click` >= 8.0.0
346
+ - `requests` >= 2.25.0
347
+
348
+ ## License
349
+
350
+ MIT License - See LICENSE file for details
351
+
352
+ ## Support
353
+
354
+ - **Website**: [https://prismor.dev](https://prismor.dev)
355
+ - **Dashboard**: [https://prismor.dev](https://prismor.dev) (Sign up for full features)
356
+ - **Documentation**: [https://docs.prismor.dev](https://docs.prismor.dev)
357
+ - **Issues**: [https://github.com/PrismorSec/prismor-cli/issues](https://github.com/prismor/prismor-cli/issues)
358
+
359
+ ### Need Help?
360
+
361
+ 1. Visit [Prismor.dev](https://prismor.dev) for full documentation and support
362
+ 2. Check the dashboard for detailed scan results and analysis
363
+ 3. Join our community for questions and discussions
364
+
365
+ ## Contributing
366
+
367
+ Contributions are welcome! Please feel free to submit a Pull Request.
368
+
369
+ ---
370
+
371
+ Made with ❤️ by Prismor
@@ -0,0 +1,9 @@
1
+ prismor/__init__.py,sha256=d_7a1UaXHGT7kAzI5fERetpR2vEj349becGSTKatQU0,230
2
+ prismor/api.py,sha256=jnbxgzDJjYLGxC5viT18xVjcmbupFecvlb-ph8J0yik,3938
3
+ prismor/cli.py,sha256=zjRJH9li_0_2CNquI4Y14alGpmiq1d-P_rZBTp4bS6I,7310
4
+ prismor-0.1.0.dist-info/licenses/LICENSE,sha256=qWFF8Eh6gpZOq_3effdd6hfeMN2WN9ZG4vOyFk2MyhU,1065
5
+ prismor-0.1.0.dist-info/METADATA,sha256=2boiqdtLo65Do3pxw_P7wWmU-FjVv95S43b3xfNT7Ps,9394
6
+ prismor-0.1.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
7
+ prismor-0.1.0.dist-info/entry_points.txt,sha256=Uiu0HW04eq2Gb6sQC9o-LqMKMyW1SKwkojxrkFeVfqg,45
8
+ prismor-0.1.0.dist-info/top_level.txt,sha256=nlJGoJ3fQXRL27RXQ5LJU2LX1kl1VSgKXyKjcSR28lw,8
9
+ prismor-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ prismor = prismor.cli:main
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Prismor
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
@@ -0,0 +1 @@
1
+ prismor