#!/usr/bin/env python3
import subprocess
import re
import tempfile

# Step 1: Get CSRF token
print("=== Step 1: Getting CSRF token ===")
subprocess.call(["curl", "-s", "-c", "/tmp/jenkins_cookie.txt", "-u", "admin:FzxAdmin@2026", "http://localhost:8080/crumbIssuer/api/xml", "-o", "/dev/null"])

p = subprocess.Popen(
    ["curl", "-s", "-b", "/tmp/jenkins_cookie.txt", "-u", "admin:FzxAdmin@2026", "http://localhost:8080/crumbIssuer/api/xml"],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE
)
xml_content, _ = p.communicate()
xml_content = xml_content.decode('utf-8')

match = re.search(r'<crumb>([^<]+)</crumb>', xml_content)
if match:
    crumb = match.group(1)
    print(f"Got crumb: {crumb}")
else:
    print("Failed to get CSRF token")
    exit(1)

# Step 2: Delete existing credential
print("\n=== Step 2: Deleting existing credential ===")
p = subprocess.Popen([
    "curl", "-s", "-b", "/tmp/jenkins_cookie.txt", "-u", "admin:FzxAdmin@2026",
    "-H", "Jenkins-Crumb:" + crumb,
    "-X", "POST",
    "http://localhost:8080/credentials/store/system/domain/_/credential/registry-cred/doDelete"
], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
_, _ = p.communicate()
print(f"Delete status: {p.returncode}")

# Step 3: Create new credential with correct password
print("\n=== Step 3: Creating new credential ===")
p = subprocess.Popen([
    "curl", "-s", "-b", "/tmp/jenkins_cookie.txt", "-u", "admin:FzxAdmin@2026",
    "-H", "Jenkins-Crumb:" + crumb,
    "-H", "Content-Type: application/x-www-form-urlencoded",
    "-X", "POST",
    "http://localhost:8080/credentials/store/system/domain/_/createCredentials",
    "--data", "credentials=STANDARD_USERNAME_PASSWORD&username=admin&password=Registry@Fzx2026&description=Private%20registry%20credentials%20for%20image%20push&id=registry-cred"
], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
_, _ = p.communicate()
print(f"Create status: {p.returncode}")

if p.returncode == 0:
    print("\n✅ Credential updated successfully!")
else:
    print("\n❌ Failed to update credential")
