#!/bin/sh # Factory Tools - List available SecuBox tools # CGI endpoint for SecuBox Factory echo "Content-Type: application/json" echo "Access-Control-Allow-Origin: *" echo "Access-Control-Allow-Methods: GET, OPTIONS" echo "" # Handle CORS preflight if [ "$REQUEST_METHOD" = "OPTIONS" ]; then exit 0 fi # Define available tools # Each tool has: id, name, description, category, dangerous flag cat << 'EOF' { "tools": [ { "id": "snapshot", "name": "Create Snapshot", "description": "Create signed Merkle snapshot of current configuration", "category": "security", "icon": "camera", "dangerous": false }, { "id": "verify", "name": "Verify Snapshot", "description": "Verify cryptographic signature of current snapshot", "category": "security", "icon": "shield-check", "dangerous": false }, { "id": "gossip", "name": "Gossip Sync", "description": "Synchronize snapshots with peer nodes via gossip protocol", "category": "mesh", "icon": "refresh", "dangerous": false }, { "id": "discover", "name": "Discover Peers", "description": "Scan network for SecuBox peers via mDNS", "category": "mesh", "icon": "search", "dangerous": false }, { "id": "services", "name": "List Services", "description": "Get status of all local services", "category": "monitoring", "icon": "server", "dangerous": false }, { "id": "validate", "name": "Validate Modules", "description": "Run module validation checks", "category": "maintenance", "icon": "check-circle", "dangerous": false }, { "id": "repair", "name": "Auto-Repair", "description": "Attempt automatic repair of common issues", "category": "maintenance", "icon": "wrench", "dangerous": true }, { "id": "backup", "name": "Create Backup", "description": "Create configuration backup", "category": "backup", "icon": "download", "dangerous": false }, { "id": "pending", "name": "Pending Operations", "description": "Show queued offline operations", "category": "queue", "icon": "clock", "dangerous": false }, { "id": "replay", "name": "Replay Pending", "description": "Execute queued offline operations", "category": "queue", "icon": "play", "dangerous": true }, { "id": "fingerprint", "name": "Node Fingerprint", "description": "Show this node's cryptographic fingerprint", "category": "security", "icon": "fingerprint", "dangerous": false }, { "id": "merkle", "name": "Merkle Root", "description": "Calculate current Merkle root of configurations", "category": "security", "icon": "hash", "dangerous": false }, { "id": "catalog-sync", "name": "Sync Catalog", "description": "Sync service catalog with mesh peers and merge registries", "category": "catalog", "icon": "book", "dangerous": false }, { "id": "catalog-list", "name": "List Catalogs", "description": "Show local and peer catalog files", "category": "catalog", "icon": "list", "dangerous": false }, { "id": "catalog-generate", "name": "Generate Catalog", "description": "Regenerate local service catalog from HAProxy vhosts", "category": "catalog", "icon": "refresh", "dangerous": false }, { "id": "dns-status", "name": "DNS Federation Status", "description": "Show mesh DNS federation status and entries", "category": "dns", "icon": "globe", "dangerous": false }, { "id": "dns-enable", "name": "Enable DNS Federation", "description": "Enable automatic DNS entries for mesh peers (.mesh.local)", "category": "dns", "icon": "toggle-on", "dangerous": false }, { "id": "dns-disable", "name": "Disable DNS Federation", "description": "Disable mesh DNS federation", "category": "dns", "icon": "toggle-off", "dangerous": false }, { "id": "dns-update", "name": "Update DNS Entries", "description": "Refresh DNS entries from current peer list", "category": "dns", "icon": "refresh", "dangerous": false } ], "categories": [ {"id": "security", "name": "Security", "order": 1}, {"id": "mesh", "name": "Mesh Network", "order": 2}, {"id": "dns", "name": "DNS Federation", "order": 3}, {"id": "catalog", "name": "Catalog", "order": 4}, {"id": "monitoring", "name": "Monitoring", "order": 5}, {"id": "maintenance", "name": "Maintenance", "order": 6}, {"id": "backup", "name": "Backup", "order": 7}, {"id": "queue", "name": "Queue", "order": 8} ] } EOF