# 🔐 OmniSec

> **Omni Security & Intelligence Python Library**
> AI · MFT · GCS · CyberSecurity · Internet

[![Python](https://img.shields.io/badge/python-3.9%2B-blue)](https://python.org)
[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
[![Modules](https://img.shields.io/badge/modules-5-purple)](https://github.com/omnisec/omnisec)

OmniSec is a unified Python library that brings together five essential domains under one consistent API:

| Module | Description |
|--------|-------------|
| 🤖 **AI** | Text analysis, classification, summarisation, threat reporting via Claude API |
| 📦 **MFT** | Managed File Transfer over SFTP/FTPS with AES-256 encryption and audit logs |
| ☁️ **GCS** | Google Cloud Storage — upload, download, signed URLs, metadata management |
| 🔒 **Security** | Hashing, AES/RSA encryption, password analysis, IoC extraction, header scoring |
| 🌐 **Internet** | HTTP client, DNS, port scanning, SSL inspection, IP geolocation, monitoring |

---

## 📦 Installation

```bash
# Base install
pip install omnisec

# With specific extras
pip install omnisec[ai]        # Anthropic Claude support
pip install omnisec[mft]       # SFTP + AES encryption
pip install omnisec[gcs]       # Google Cloud Storage
pip install omnisec[security]  # Full cryptography suite
pip install omnisec[internet]  # HTTP + DNS support
pip install omnisec[all]       # Everything
```

---

## 🚀 Quick Start

```python
import omnisec

# ── AI Engine ──────────────────────────────────────────────────
engine = omnisec.AIEngine(api_key="your-anthropic-key")

summary = engine.summarize("Long document text...", max_sentences=3)
labels  = engine.classify("Suspicious email body", ["phishing", "spam", "legitimate"])
threat  = engine.analyze_security_log("Failed SSH from 10.0.0.5 - 50 attempts")

print(threat)
# {
#   "threat_level": "high",
#   "threat_type": "brute_force",
#   "indicators": ["10.0.0.5", "SSH port 22", "50 failed attempts"],
#   "recommendation": "Block IP 10.0.0.5 and enable fail2ban",
#   "summary": "Brute-force SSH attack detected from 10.0.0.5"
# }


# ── MFT Client ─────────────────────────────────────────────────
with omnisec.MFTClient(
    host="sftp.example.com",
    username="user",
    key_path="~/.ssh/id_rsa",
    encrypt_transfers=True,
) as mft:
    record = mft.upload("report.pdf", "/remote/reports/report.pdf")
    print(f"SHA-256: {record.sha256}")
    mft.export_audit_csv("audit.csv")


# ── GCS Client ─────────────────────────────────────────────────
gcs = omnisec.GCSClient(project="my-project", bucket="my-bucket")
gcs.upload("local/data.csv", "datasets/data.csv")
url = gcs.signed_url("datasets/data.csv", expiry_minutes=60)
objects = gcs.list_objects(prefix="datasets/")


# ── Security Toolkit ───────────────────────────────────────────
sec = omnisec.SecurityToolkit()

# Hashing
h = sec.hash("password123", "sha256")
file_hash = sec.hash_file("/var/log/syslog", "sha512")

# AES-256-GCM Encryption
key, nonce, ct = sec.aes_encrypt(b"sensitive data")
plaintext = sec.aes_decrypt(key, nonce, ct)

# String encryption
enc = sec.aes_encrypt_string("top secret message")
plain = sec.aes_decrypt_string(enc)

# Password tools
pwd = sec.generate_password(length=20, use_symbols=True)
strength = sec.check_password_strength("P@ssw0rd!")
print(strength)
# {"score": 72, "strength": "good", "feedback": ["Add uppercase letters."]}

# IoC extraction
iocs = sec.extract_iocs("Malware from 192.168.1.50 hit CVE-2023-1234 via evil.com")
print(iocs["cves"])    # ['CVE-2023-1234']
print(iocs["ipv4"])    # ['192.168.1.50']
print(iocs["domains"]) # ['evil.com']

# Security header analysis
headers = {"Strict-Transport-Security": "max-age=31536000", "X-Frame-Options": "DENY"}
analysis = sec.analyze_headers(headers)
print(f"Score: {analysis['score']}/100  Grade: {analysis['grade']}")

# PBKDF2 password hashing
h, salt = sec.pbkdf2_hash("mypassword")
assert sec.pbkdf2_verify("mypassword", h, salt)


# ── Internet Toolkit ───────────────────────────────────────────
net = omnisec.InternetToolkit(timeout=10, retries=3)

# HTTP
resp = net.get("https://api.ipify.org?format=json")
print(resp["json"]["ip"])

# Port scanning
result = net.port_scan("192.168.1.1", ports=[22, 80, 443, 3306])
for p in result["open_ports"]:
    print(f"  {p['port']}/TCP  {p['service']}")

# SSL inspection
cert = net.ssl_info("google.com")
print(f"Expires in {cert['days_remaining']} days")
print(f"Issuer: {cert['issuer'].get('organizationName')}")

# DNS
records = net.dns_resolve("example.com", "A")
hostname = net.reverse_dns("8.8.8.8")

# IP intelligence
info = net.ip_info("8.8.8.8")
print(f"{info['org']} — {info['city']}, {info['country']}")

# URL monitoring
statuses = net.monitor_urls(["https://google.com", "https://github.com"])
for s in statuses:
    status = "✅" if s["ok"] else "❌"
    print(f"{status} {s['url']}  {s['elapsed_ms']}ms")
```

---

## 🖥️ CLI Usage

```bash
# Hash a string
omnisec hash sha256 "hello world"

# Generate a secure password
omnisec password generate --length 24

# Check password strength
omnisec password check "P@ssword123!"

# Port scan
omnisec port-scan 192.168.1.1 --ports 22 80 443 3306 5432

# SSL certificate info
omnisec ssl-info google.com

# IP geolocation
omnisec ip-info 8.8.8.8

# DNS lookup
omnisec dns google.com --type MX

# URL availability check
omnisec ping https://example.com

# Extract IoCs from text
omnisec extract-iocs "Attack from 10.0.0.1 via CVE-2024-1234"
```

---

## ⚙️ Configuration

```python
from omnisec import OmniConfig

# Programmatic configuration
cfg = OmniConfig(
    ai_model="claude-sonnet-4-6",
    gcs_bucket="my-bucket",
    mft_host="sftp.example.com",
    net_timeout=15,
)
cfg.save("omnisec.json")

# Reload from file
cfg = OmniConfig.load("omnisec.json")

# Environment variables (auto-detected)
# ANTHROPIC_API_KEY, GOOGLE_CLOUD_PROJECT, OMNISEC_GCS_BUCKET,
# OMNISEC_MFT_HOST, OMNISEC_NET_TIMEOUT, etc.
```

---

## 🗂️ Project Structure

```
omnisec/
├── omnisec/
│   ├── __init__.py          # Top-level exports
│   ├── cli.py               # CLI entry point
│   ├── core/
│   │   ├── config.py        # Centralised OmniConfig
│   │   └── logger.py        # Structured colour logger
│   ├── ai/
│   │   └── __init__.py      # AIEngine (Claude API)
│   ├── mft/
│   │   └── __init__.py      # MFTClient (SFTP/FTPS + AES)
│   ├── gcs/
│   │   └── __init__.py      # GCSClient (Google Cloud Storage)
│   ├── security/
│   │   └── __init__.py      # SecurityToolkit (crypto + threat intel)
│   └── internet/
│       └── __init__.py      # InternetToolkit (HTTP + DNS + scanning)
├── tests/
│   ├── test_security.py
│   ├── test_internet.py
│   └── test_mft.py
├── examples/
│   ├── ai_demo.py
│   ├── mft_demo.py
│   ├── gcs_demo.py
│   ├── security_demo.py
│   └── internet_demo.py
├── setup.py
├── pyproject.toml
└── README.md
```

---

## 🧪 Running Tests

```bash
pip install omnisec[all] pytest
pytest tests/ -v
```

---

## 📜 License

MIT License — see [LICENSE](LICENSE) for details.

---

## 🤝 Contributing

Pull requests are welcome. For major changes, open an issue first.
Please ensure all tests pass and new features include docstrings and examples.
