DNS API Powershell example

Skip to main content
Du bist hier:
Drucken

DNS API Powershell example

Vous trouverez ci-dessous des exemples d’utilisation de l’API DNS avec PowerShell.

Authentification

Utiliser la cle API (recommande)

Vous trouverez votre cle API dans votre profil client sous Compte > Profil client > Acces API. Activez l’acces API et copiez la cle API affichee.

$apiKey = "VOTRE_CLE_API_DE_WHMCS"
$headers = @{"X-API-Key"=$apiKey; "Content-Type"="application/json"}

Alternative: Basic Auth (non recommande avec caracteres speciaux dans le mot de passe)

$username = "votre-email@example.ch"
$password = "votre-mot-de-passe"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))
$headers = @{Authorization=("Basic {0}" -f $base64AuthInfo); "Content-Type"="application/json"}

Lister toutes les zones

$result = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
$result.zones | Format-Table id, name

Obtenir l’ID de zone par nom de domaine

$domain = "example.ch"
$zones = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
$zoneId = ($zones.zones | Where-Object { $_.name -eq $domain }).id

if ($zoneId) {
    Write-Host "ID de zone pour $domain est: $zoneId"
} else {
    Write-Host "Zone non trouvee!"
}

Lister les enregistrements d’une zone

$domain = "example.ch"
$zones = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
$zoneId = ($zones.zones | Where-Object { $_.name -eq $domain }).id

$result = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zone/$zoneId/records"
$result.records | Format-Table name, type, data, ttl

Ajouter un enregistrement

$domain = "example.ch"
$zones = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
$zoneId = ($zones.zones | Where-Object { $_.name -eq $domain }).id

$body = @{
    name = "test.$domain"
    type = "A"
    data = "192.168.1.1"
    ttl = 3600
} | ConvertTo-Json

$result = Invoke-RestMethod -Method Post -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zone/$zoneId/record" -Body $body
Write-Host "ID d'enregistrement: $($result.record_id)"

Mettre a jour un enregistrement

$domain = "example.ch"
$zones = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
$zoneId = ($zones.zones | Where-Object { $_.name -eq $domain }).id

$body = @{
    name = "test.$domain"
    type = "A"
    old_data = "192.168.1.1"
    data = "192.168.1.2"
    ttl = 3600
} | ConvertTo-Json

Invoke-RestMethod -Method Put -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zone/$zoneId/record" -Body $body

Supprimer un enregistrement

$domain = "example.ch"
$zones = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
$zoneId = ($zones.zones | Where-Object { $_.name -eq $domain }).id

$body = @{
    name = "test.$domain"
    type = "A"
    data = "192.168.1.2"
} | ConvertTo-Json

Invoke-RestMethod -Method Delete -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zone/$zoneId/record" -Body $body

ACME DNS-01 Challenge (Let’s Encrypt)

Propagation automatique: Pour les enregistrements _acme-challenge.*, l’API attend automatiquement que tous les serveurs DNS aient l’enregistrement. La reponse contient les details de propagation.

# Configuration - copier la cle API du profil client WHMCS
$apiKey = "VOTRE_CLE_API_DE_WHMCS"
$headers = @{"X-API-Key"=$apiKey; "Content-Type"="application/json"}
$domain = "example.ch"
$token = "votre-token-acme-ici"

# Obtenir l'ID de zone
$zones = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
$zoneId = ($zones.zones | Where-Object { $_.name -eq $domain }).id

# Ajouter le token ACME challenge
$body = @{
    name = "_acme-challenge.$domain"
    type = "TXT"
    data = "`"$token`""
    ttl = 60
} | ConvertTo-Json

$result = Invoke-RestMethod -Method Post -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zone/$zoneId/record" -Body $body

# Verifier si la propagation a reussi
if ($result.propagation.propagated) {
    Write-Host "DNS propage en $($result.propagation.time) secondes"
    Start-Sleep -Seconds 5
} else {
    Write-Host "Attention: Propagation non complete!"
}

# === Effectuer la validation ACME ici ===

# Apres validation: supprimer le token
$body = @{
    name = "_acme-challenge.$domain"
    type = "TXT"
} | ConvertTo-Json

Invoke-RestMethod -Method Delete -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zone/$zoneId/record" -Body $body

Script complet en fonction

function Set-FirestormDnsRecord {
    param(
        [string]$ApiKey,
        [string]$Domain,
        [string]$RecordName,
        [string]$RecordType,
        [string]$RecordData,
        [int]$TTL = 3600
    )

    $headers = @{"X-API-Key"=$ApiKey; "Content-Type"="application/json"}

    # Obtenir l'ID de zone
    $zones = Invoke-RestMethod -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zones"
    $zoneId = ($zones.zones | Where-Object { $_.name -eq $Domain }).id

    if (-not $zoneId) {
        throw "Zone $Domain non trouvee!"
    }

    # Ajouter l'enregistrement
    $body = @{
        name = $RecordName
        type = $RecordType
        data = $RecordData
        ttl = $TTL
    } | ConvertTo-Json

    return Invoke-RestMethod -Method Post -Headers $headers -Uri "https://api.firestorm.ch/dns/v1/zone/$zoneId/record" -Body $body
}

# Utilisation:
Set-FirestormDnsRecord -ApiKey "VOTRE_CLE_API_DE_WHMCS" -Domain "example.ch" -RecordName "test.example.ch" -RecordType "A" -RecordData "192.168.1.1"

Remarque

Avant d’utiliser l’API, vous devez activer l’acces API dans le panneau d’administration sous Compte > Profil client > Acces API. Apres l’activation, votre cle API personnelle sera affichee.

Tags:
Related Post