Skip to main content

Core data models and validation for wish

Project description

wish-models

Core data models package for the wish penetration testing support system.

Overview

wish-models provides type-safe data models based on Pydantic v2 for managing the entire penetration testing engagement state and tracking relationships.

Key Features

  • Type-safe data models: Powerful validation with Pydantic v2
  • Relationship management: Bidirectional tracking between Finding ↔ CollectedData
  • Comprehensive validation: Specialized validation for IPs, ports, CVEs, etc.
  • Automatic statistics calculation: Dynamic aggregation of active hosts, open services, etc.
  • Session management: Lightweight metadata management

Installation

# Install dependencies in development environment
uv sync --dev

# Install as package (future release)
pip install wish-models

Quick Start

Basic Usage Example

from wish_models import EngagementState, Target, Host, Service, Finding, CollectedData, SessionMetadata

# Create session information
session = SessionMetadata(engagement_name="Example Pentest")

# Initialize engagement state
engagement = EngagementState(name="Example Engagement", session_metadata=session)

# Add target
target = Target(scope="192.168.1.0/24", scope_type="cidr", name="Internal Network")
engagement.add_target(target)

# Discover host
host = Host(
    ip_address="192.168.1.100",
    status="up",
    discovered_by="nmap"
)
engagement.hosts[host.id] = host

# Discover service
service = Service(
    host_id=host.id,
    port=80,
    protocol="tcp",
    state="open",
    service_name="http",
    discovered_by="nmap"
)
host.add_service(service)

# Register finding
finding = Finding(
    title="Unpatched Web Server",
    description="Apache 2.2.x with known vulnerabilities",
    category="vulnerability",
    severity="high",
    target_type="service",
    host_id=host.id,
    service_id=service.id,
    discovered_by="nikto"
)
finding.add_cve("CVE-2021-44228")  # Log4j vulnerability
engagement.findings[finding.id] = finding

# Manage collected data
credentials = CollectedData(
    type="credentials",
    content="admin:password123",
    username="admin",
    source_host_id=host.id,
    source_service_id=service.id,
    source_finding_id=finding.id,
    discovered_by="hydra",
    working=True
)
engagement.collected_data[credentials.id] = credentials

# Establish relationships
finding.link_collected_data(credentials.id)
credentials.add_derived_finding(finding.id)

# Get statistics
active_hosts = engagement.get_active_hosts()
open_services = engagement.get_open_services()
working_creds = engagement.get_working_credentials()

print(f"Active hosts: {len(active_hosts)}")
print(f"Open services: {len(open_services)}")
print(f"Working credentials: {len(working_creds)}")

Validation Example

from wish_models.validation import (
    validate_ip_address,
    validate_port,
    validate_cve_id,
    ValidationError
)

# IP address validation
ip_result = validate_ip_address("192.168.1.1")
if ip_result.is_valid:
    print(f"Valid IP: {ip_result.data}")
else:
    print(f"Invalid IP: {ip_result.errors}")

# Port number validation
try:
    port_result = validate_port(80)
    valid_port = port_result.raise_if_invalid()
    print(f"Valid port: {valid_port}")
except ValidationError as e:
    print(f"Port validation failed: {e}")

# CVE ID validation
cve_result = validate_cve_id("CVE-2021-44228")
print(f"CVE validation: {cve_result.is_valid}")

Data Model Details

Main Models

Model Description Key Fields
EngagementState Overall engagement state targets, hosts, findings, collected_data
Target Pentest target definition scope, scope_type, in_scope
Host Discovered host information ip_address, status, services
Service Service on host port, protocol, state, service_name
Finding Vulnerability/discovery title, category, severity, cve_ids
CollectedData Collected important data type, content, is_sensitive, working
SessionMetadata Session management info current_mode, command_history

Validation Features

  • Network: IP, CIDR, MAC, port numbers
  • Security: CVE ID, URL format
  • Data integrity: Confidence scores, datetime constraints
  • Relationships: Cross-model reference integrity checks

Development Guide

Running Tests

# Run all tests
uv run pytest

# Run tests with coverage
uv run pytest --cov=src --cov-report=html

# Run specific test file
uv run pytest tests/test_models_core.py

# Run with verbose output
uv run pytest -v

Code Quality Checks

# Run linting
uv run ruff check src/ tests/

# Format code
uv run ruff format src/ tests/

# Type checking (mypy)
uv run mypy src/

Project Structure

packages/wish-models/
├── src/wish_models/
│   ├── __init__.py          # Package exports
│   ├── engagement.py        # EngagementState, Target
│   ├── host.py             # Host, Service  
│   ├── finding.py          # Finding
│   ├── data.py             # CollectedData
│   ├── session.py          # SessionMetadata
│   └── validation.py       # Validation functions
├── tests/
│   ├── test_models_core.py      # Individual model tests
│   ├── test_engagement_state.py # EngagementState tests
│   ├── test_relationships.py    # Relationship tests
│   ├── test_validation.py       # Validation class tests
│   └── test_validation_functions.py # Validation function tests
├── docs/
│   ├── implementation.md        # Implementation specification
│   └── design-decisions.md     # Design decision records
└── README.md

Contributing Guide

  1. Fork: Fork the repository
  2. Create branch: git checkout -b feature/your-feature
  3. Implement: Add features or fixes
  4. Test: Ensure all tests pass
  5. Quality check: Run lint and format
  6. Pull request: Create PR to main repository

Testing Guidelines

  • Unit tests: Test individual model functionality
  • Validation tests: Test both valid and invalid values
  • Relationship tests: Test interactions between models
  • Boundary tests: Focus on validation boundary values

API Reference

For detailed API specifications, please refer to the following documents:

Performance

Test Results

  • Test count: 113 tests
  • Success rate: 100%
  • Coverage: 94%
  • Warnings: 0

Optimization Points

  • Fast validation with Pydantic v2
  • Reduced computational cost through lazy evaluation
  • Automatic duplicate data elimination
  • Memory-efficient ID-based references

License

This project is published under [appropriate license].

Related Packages

  • wish-core: State management and event processing
  • wish-ai: AI-driven inference engine
  • wish-tools: Pentest tool integration
  • wish-knowledge: Knowledge base management
  • wish-c2: C2 server integration
  • wish-cli: Command line interface

Support

If you have issues or questions, you can get support through:

  • Issues: Bug reports and feature requests
  • Discussions: General questions and discussions
  • Documentation: Review implementation specifications and design records

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wish_models-0.7.0.tar.gz (20.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wish_models-0.7.0-py3-none-any.whl (14.2 kB view details)

Uploaded Python 3

File details

Details for the file wish_models-0.7.0.tar.gz.

File metadata

  • Download URL: wish_models-0.7.0.tar.gz
  • Upload date:
  • Size: 20.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.11

File hashes

Hashes for wish_models-0.7.0.tar.gz
Algorithm Hash digest
SHA256 4b4baa09aba97e7653011a17508e922370b6e91b0db964f7fefe4d4b296db7f1
MD5 c42e3dce8544ece1690010139eff48c8
BLAKE2b-256 1128d31d5ddb031d07f428ac986e7e3550e748cc66b88380bfabd986bcc66432

See more details on using hashes here.

File details

Details for the file wish_models-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: wish_models-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 14.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.11

File hashes

Hashes for wish_models-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1aced376ad77adf41cf07f82a0e038ecc236a825670e868bf087382c6b372e7a
MD5 831def018e21b089d1077bfb8e1a087e
BLAKE2b-256 5a848e8f4344e4e955004a8f95ec25d8040659dd13aea1ebfbfaa906915eac44

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page