# DynDNS - Scripturi de Actualizare Automată pentru Windows

Acest director conține scripturi exemplu pentru actualizarea automată a înregistrărilor DynDNS pe sistemele Windows.

## 📁 Conținut

- **dyndns-update-windows.ps1** - Script PowerShell (recomandat)
- **dyndns-update-windows.bat** - Script BAT simplu (alternativă)

## 🚀 Instalare Rapidă

### Opțiunea 1: PowerShell (Recomandat)

1. **Download scriptul** din pagina de management DynDNS sau copiază `dyndns-update-windows.ps1`
2. **Editează** scriptul și setează:
   - `$TOKEN` - token-ul tău DynDNS
   - `$HOSTNAME` - hostname-ul complet (ex: dyn.example.com)
   - `$API_URL` - URL-ul API-ului (dacă este diferit)

3. **Testează** scriptul manual:
   ```powershell
   powershell -ExecutionPolicy Bypass -File "C:\Path\To\dyndns-update.ps1"
   ```

4. **Configurează Task Scheduler**:
   - Deschide Task Scheduler: `Win+R` → `taskschd.msc`
   - **Create Task** (nu "Create Basic Task")
   - **General** tab:
     - Name: `DynDNS Update`
     - Description: `Actualizează automat IP-ul pentru DynDNS`
     - Run whether user is logged on or not: ✓
   - **Triggers** tab → **New**:
     - Begin the task: `On a schedule`
     - Settings: `Daily`
     - Advanced settings:
       - ✓ Repeat task every: `5 minutes`
       - for a duration of: `Indefinitely`
     - ✓ Enabled
   - **Actions** tab → **New**:
     - Action: `Start a program`
     - Program/script: `powershell.exe`
     - Arguments: `-ExecutionPolicy Bypass -WindowStyle Hidden -File "C:\Path\To\dyndns-update.ps1"`
   - **Conditions** tab:
     - ☐ Start the task only if the computer is on AC power
     - ☐ Stop if the computer switches to battery power
   - **Settings** tab:
     - ✓ Allow task to be run on demand
     - ✓ Run task as soon as possible after a scheduled start is missed
     - If the task fails, restart every: `1 minute` (attempts: 3)
   - **OK** → Introdu parola utilizatorului Windows

### Opțiunea 2: BAT Script (Simplu)

1. **Download** scriptul BAT sau copiază `dyndns-update-windows.bat`
2. **Editează** și setează valorile:
   ```batch
   set TOKEN=your_token_here
   set HOSTNAME=dyn.example.com
   set API_URL=http://your-panel.com/api/dyndns/update
   ```

3. **Testează** dublu-click pe fișier

4. **Configurează Task Scheduler**:
   - Similar cu PowerShell, dar la **Actions**:
     - Program/script: `C:\Path\To\dyndns-update.bat`
     - Arguments: (gol)

## 📋 Verificare Funcționare

### PowerShell
Vezi log-ul în:
```
%TEMP%\dyndns-update.log
```
Sau în PowerShell:
```powershell
Get-Content $env:TEMP\dyndns-update.log -Tail 20
```

### BAT Script
Vezi log-ul în:
```
%TEMP%\dyndns-update.log
```

## 🔧 Troubleshooting

### PowerShell: "cannot be loaded because running scripts is disabled"
**Soluție**: Rulează PowerShell ca Administrator și execută:
```powershell
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
```
Sau folosește mereu argumentul `-ExecutionPolicy Bypass`.

### Curl nu este recunoscut (Windows vechi)
**Verificare**: Deschide CMD și rulează `curl --version`
- Windows 10 (1803+) și Windows 11: curl este inclus
- Windows 7/8/Server 2016: instalează curl sau folosește PowerShell

**Soluție**: Descarcă curl de la https://curl.se/windows/ și adaugă în PATH.

### Task Scheduler nu rulează scriptul
**Verificări**:
1. Task-ul este Enabled? (click dreapta → Enable)
2. Path-ul către script este corect?
3. Verifică "Last Run Result" în Task Scheduler:
   - `0x0` = Success
   - `0x1` = General error
   - `0x41301` = Task is currently running
4. Vezi History tab pentru detalii

**Soluție**: Rulează task-ul manual (click dreapta → Run) și verifică log-ul.

### IP-ul nu se actualizează
**Verificări**:
1. Token-ul este corect?
2. Hostname-ul este scris corect?
3. URL-ul API este accesibil?
4. Verifică log-ul pentru mesaje de eroare

**Test manual**:
```powershell
# PowerShell
$response = Invoke-RestMethod -Uri "http://your-api.com/api/dyndns/update?token=YOUR_TOKEN&hostname=your.hostname.com"
$response | ConvertTo-Json
```

## 📊 Exemple de Răspunsuri API

### Success - IP actualizat
```json
{
  "success": true,
  "updated": true,
  "message": "IP actualizat cu succes",
  "new_ip": "203.0.113.45",
  "old_ip": "203.0.113.44",
  "hostname": "dyn.example.com"
}
```

### Success - IP neschimbat
```json
{
  "success": true,
  "updated": false,
  "message": "IP-ul nu s-a schimbat",
  "current_ip": "203.0.113.45",
  "hostname": "dyn.example.com"
}
```

### Error - Token invalid
```json
{
  "success": false,
  "message": "Token invalid sau hostname incorect"
}
```

## 🔐 Securitate

- **NU** partaja token-ul DynDNS cu nimeni
- **NU** commit scriptul cu token-ul în Git/repository public
- Token-ul este salvat în plaintext în script - protejează fișierul (permissions)
- Pentru securitate maximă, folosește HTTPS pentru API_URL

## 📚 Documentație Suplimentară

- **PanelDNS Documentation**: http://your-panel.com/docs
- **Task Scheduler Guide**: https://docs.microsoft.com/en-us/windows/win32/taskschd/
- **PowerShell Basics**: https://docs.microsoft.com/en-us/powershell/

## ✨ Features

### PowerShell Script
- ✅ Logging colorat în consolă
- ✅ Logging persistent în fișier
- ✅ Detecție automată a IP-ului public (opțional)
- ✅ Error handling complet
- ✅ Mesaje detaliate de debug

### BAT Script
- ✅ Simplu și ușor de înțeles
- ✅ Compatibil cu Windows vechi
- ✅ Logging în fișier
- ✅ Verificare status răspuns

## 📞 Suport

Pentru probleme sau întrebări:
- Verifică log-urile din `%TEMP%\dyndns-update.log`
- Contactează administratorul PanelDNS
- Verifică documentația online

## 📝 Changelog

### v1.0 (21.11.2025)
- Versiune inițială
- Suport pentru PowerShell și BAT
- Documentație completă
