Добавлены функции для тестирования доступа к API reg.ru и обработки ошибок. Обновлены сообщения об ошибках с рекомендациями по устранению неполадок. Увеличен таймаут для запросов к API.
This commit is contained in:
170
docs/en/API_TROUBLESHOOTING_EN.md
Normal file
170
docs/en/API_TROUBLESHOOTING_EN.md
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
# 🔧 reg.ru API Troubleshooting Guide
|
||||||
|
|
||||||
|
## ❌ Issue: "Access to API from this IP denied"
|
||||||
|
|
||||||
|
This error occurs when reg.ru API is blocked for your IP address due to security settings.
|
||||||
|
|
||||||
|
### 🔍 Diagnostics
|
||||||
|
|
||||||
|
First, determine your current IP address:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Method 1: Using script's built-in function
|
||||||
|
sudo letsencrypt-regru --test-api
|
||||||
|
|
||||||
|
# Method 2: Using curl
|
||||||
|
curl -s https://ipinfo.io/ip
|
||||||
|
|
||||||
|
# Method 3: Using website
|
||||||
|
# Open https://whatismyipaddress.com/
|
||||||
|
```
|
||||||
|
|
||||||
|
### ✅ Solution
|
||||||
|
|
||||||
|
#### Method 1: Add IP to whitelist (recommended)
|
||||||
|
|
||||||
|
1. **Login to reg.ru control panel**
|
||||||
|
- Open https://www.reg.ru/
|
||||||
|
- Login to your account
|
||||||
|
|
||||||
|
2. **Navigate to API settings**
|
||||||
|
- Menu → "Settings" (Настройки)
|
||||||
|
- Section "Security" (Безопасность)
|
||||||
|
- Subsection "API"
|
||||||
|
|
||||||
|
3. **Configure IP access**
|
||||||
|
- Find "IP Restrictions" section
|
||||||
|
- Click "Add IP address"
|
||||||
|
- Enter your current IP address
|
||||||
|
- Save settings
|
||||||
|
|
||||||
|
4. **Test settings**
|
||||||
|
```bash
|
||||||
|
sudo letsencrypt-regru --test-api
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Method 2: Disable IP restrictions (less secure)
|
||||||
|
|
||||||
|
⚠️ **WARNING**: This reduces your account security!
|
||||||
|
|
||||||
|
1. In reg.ru API settings find "IP Restrictions"
|
||||||
|
2. Disable "Allow access only from specified IPs" option
|
||||||
|
3. Save settings
|
||||||
|
|
||||||
|
### 🔒 Security Recommendations
|
||||||
|
|
||||||
|
1. **Use static IP**
|
||||||
|
- If you have dynamic IP, consider purchasing static IP
|
||||||
|
- Or regularly update allowed IP list
|
||||||
|
|
||||||
|
2. **Limit API access**
|
||||||
|
- Add only necessary IP addresses
|
||||||
|
- Regularly review and clean up the list
|
||||||
|
|
||||||
|
3. **Use strong passwords**
|
||||||
|
- Complex password for reg.ru account
|
||||||
|
- Two-factor authentication if available
|
||||||
|
|
||||||
|
## ❌ Issue: "Invalid username or password"
|
||||||
|
|
||||||
|
### ✅ Solution
|
||||||
|
|
||||||
|
1. **Check credentials**
|
||||||
|
```bash
|
||||||
|
sudo nano /etc/letsencrypt-regru/config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Make sure you have correct:
|
||||||
|
- `regru_username` - reg.ru login
|
||||||
|
- `regru_password` - reg.ru password
|
||||||
|
|
||||||
|
2. **Check file permissions**
|
||||||
|
```bash
|
||||||
|
sudo chmod 600 /etc/letsencrypt-regru/config.json
|
||||||
|
sudo chown root:root /etc/letsencrypt-regru/config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Test connection**
|
||||||
|
```bash
|
||||||
|
sudo letsencrypt-regru --test-api
|
||||||
|
```
|
||||||
|
|
||||||
|
## ❌ Issue: Connection timeout
|
||||||
|
|
||||||
|
### ✅ Solution
|
||||||
|
|
||||||
|
1. **Check internet connection**
|
||||||
|
```bash
|
||||||
|
ping -c 4 api.reg.ru
|
||||||
|
curl -I https://api.reg.ru/api/regru2
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Check firewall**
|
||||||
|
```bash
|
||||||
|
# Temporarily disable firewall for testing
|
||||||
|
sudo ufw status
|
||||||
|
sudo iptables -L
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Check proxy settings**
|
||||||
|
- Ensure `HTTP_PROXY`, `HTTPS_PROXY` environment variables don't interfere
|
||||||
|
|
||||||
|
## 🧪 API Testing
|
||||||
|
|
||||||
|
Always test API before use:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Full API test
|
||||||
|
sudo letsencrypt-regru --test-api
|
||||||
|
|
||||||
|
# Test with verbose output
|
||||||
|
sudo letsencrypt-regru --test-api -v
|
||||||
|
|
||||||
|
# Check configuration
|
||||||
|
sudo letsencrypt-regru --check
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📞 Getting Help
|
||||||
|
|
||||||
|
### reg.ru Technical Support
|
||||||
|
|
||||||
|
- **Email**: support@reg.ru
|
||||||
|
- **Phone**: 8 (495) 580-11-11
|
||||||
|
- **Online chat**: on reg.ru website
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
- **reg.ru API**: https://www.reg.ru/support/api
|
||||||
|
- **Usage examples**: https://www.reg.ru/support/api/examples
|
||||||
|
- **API FAQ**: https://www.reg.ru/support/api/faq
|
||||||
|
|
||||||
|
### Diagnostic Logs
|
||||||
|
|
||||||
|
Always include logs when contacting support:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Enable verbose logs
|
||||||
|
sudo letsencrypt-regru --test-api -v
|
||||||
|
|
||||||
|
# View recent logs
|
||||||
|
sudo tail -n 50 /var/log/letsencrypt-regru/letsencrypt_regru.log
|
||||||
|
|
||||||
|
# Certbot logs
|
||||||
|
sudo tail -n 50 /var/log/letsencrypt/letsencrypt.log
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔄 Alternative DNS Providers
|
||||||
|
|
||||||
|
If reg.ru API issues are critical, consider alternatives:
|
||||||
|
|
||||||
|
1. **Cloudflare** - excellent API, free DNS
|
||||||
|
2. **Route53** (AWS) - powerful but paid
|
||||||
|
3. **DigitalOcean DNS** - simple and reliable
|
||||||
|
4. **Google Cloud DNS** - GCP integration
|
||||||
|
|
||||||
|
These require script modification or other certbot plugins.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Last Updated**: October 29, 2025
|
||||||
|
**Document Version**: 1.0
|
||||||
170
docs/ru/API_TROUBLESHOOTING.md
Normal file
170
docs/ru/API_TROUBLESHOOTING.md
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
# 🔧 Решение проблем с API reg.ru
|
||||||
|
|
||||||
|
## ❌ Проблема: "Access to API from this IP denied"
|
||||||
|
|
||||||
|
Эта ошибка возникает, когда API reg.ru заблокирован для вашего IP адреса из соображений безопасности.
|
||||||
|
|
||||||
|
### 🔍 Диагностика
|
||||||
|
|
||||||
|
Сначала определите ваш текущий IP адрес:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Способ 1: Через встроенную функцию скрипта
|
||||||
|
sudo letsencrypt-regru --test-api
|
||||||
|
|
||||||
|
# Способ 2: Через curl
|
||||||
|
curl -s https://ipinfo.io/ip
|
||||||
|
|
||||||
|
# Способ 3: Через веб-сайт
|
||||||
|
# Откройте https://whatismyipaddress.com/
|
||||||
|
```
|
||||||
|
|
||||||
|
### ✅ Решение
|
||||||
|
|
||||||
|
#### Метод 1: Добавить IP в белый список (рекомендуется)
|
||||||
|
|
||||||
|
1. **Войдите в личный кабинет reg.ru**
|
||||||
|
- Откройте https://www.reg.ru/
|
||||||
|
- Войдите в личный кабинет
|
||||||
|
|
||||||
|
2. **Перейдите в настройки API**
|
||||||
|
- Меню → "Настройки"
|
||||||
|
- Раздел "Безопасность"
|
||||||
|
- Подраздел "API"
|
||||||
|
|
||||||
|
3. **Настройте доступ по IP**
|
||||||
|
- Найдите раздел "Ограничения по IP"
|
||||||
|
- Нажмите "Добавить IP адрес"
|
||||||
|
- Введите ваш текущий IP адрес
|
||||||
|
- Сохраните настройки
|
||||||
|
|
||||||
|
4. **Проверьте настройки**
|
||||||
|
```bash
|
||||||
|
sudo letsencrypt-regru --test-api
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Метод 2: Отключить ограничения по IP (менее безопасно)
|
||||||
|
|
||||||
|
⚠️ **ВНИМАНИЕ**: Это снижает безопасность вашего аккаунта!
|
||||||
|
|
||||||
|
1. В настройках API reg.ru найдите "Ограничения по IP"
|
||||||
|
2. Отключите опцию "Разрешить доступ только с указанных IP"
|
||||||
|
3. Сохраните настройки
|
||||||
|
|
||||||
|
### 🔒 Рекомендации по безопасности
|
||||||
|
|
||||||
|
1. **Используйте статический IP**
|
||||||
|
- Если у вас динамический IP, рассмотрите покупку статического
|
||||||
|
- Или регулярно обновляйте список разрешенных IP
|
||||||
|
|
||||||
|
2. **Ограничьте доступ к API**
|
||||||
|
- Добавляйте только необходимые IP адреса
|
||||||
|
- Регулярно проверяйте и очищайте список
|
||||||
|
|
||||||
|
3. **Используйте сильные пароли**
|
||||||
|
- Сложный пароль для аккаунта reg.ru
|
||||||
|
- Двухфакторная аутентификация если доступна
|
||||||
|
|
||||||
|
## ❌ Проблема: "Invalid username or password"
|
||||||
|
|
||||||
|
### ✅ Решение
|
||||||
|
|
||||||
|
1. **Проверьте учетные данные**
|
||||||
|
```bash
|
||||||
|
sudo nano /etc/letsencrypt-regru/config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Убедитесь что указаны правильные:
|
||||||
|
- `regru_username` - логин от reg.ru
|
||||||
|
- `regru_password` - пароль от reg.ru
|
||||||
|
|
||||||
|
2. **Проверьте права на файл**
|
||||||
|
```bash
|
||||||
|
sudo chmod 600 /etc/letsencrypt-regru/config.json
|
||||||
|
sudo chown root:root /etc/letsencrypt-regru/config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Протестируйте подключение**
|
||||||
|
```bash
|
||||||
|
sudo letsencrypt-regru --test-api
|
||||||
|
```
|
||||||
|
|
||||||
|
## ❌ Проблема: Таймаут подключения
|
||||||
|
|
||||||
|
### ✅ Решение
|
||||||
|
|
||||||
|
1. **Проверьте интернет соединение**
|
||||||
|
```bash
|
||||||
|
ping -c 4 api.reg.ru
|
||||||
|
curl -I https://api.reg.ru/api/regru2
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Проверьте брандмауэр**
|
||||||
|
```bash
|
||||||
|
# Временно отключите firewall для теста
|
||||||
|
sudo ufw status
|
||||||
|
sudo iptables -L
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Проверьте прокси настройки**
|
||||||
|
- Убедитесь что переменные окружения `HTTP_PROXY`, `HTTPS_PROXY` не мешают
|
||||||
|
|
||||||
|
## 🧪 Тестирование API
|
||||||
|
|
||||||
|
Всегда тестируйте API перед использованием:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Полный тест API
|
||||||
|
sudo letsencrypt-regru --test-api
|
||||||
|
|
||||||
|
# Тест с подробным выводом
|
||||||
|
sudo letsencrypt-regru --test-api -v
|
||||||
|
|
||||||
|
# Проверка конфигурации
|
||||||
|
sudo letsencrypt-regru --check
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📞 Получение помощи
|
||||||
|
|
||||||
|
### Техподдержка reg.ru
|
||||||
|
|
||||||
|
- **Email**: support@reg.ru
|
||||||
|
- **Телефон**: 8 (495) 580-11-11
|
||||||
|
- **Онлайн чат**: на сайте reg.ru
|
||||||
|
|
||||||
|
### Документация
|
||||||
|
|
||||||
|
- **API reg.ru**: https://www.reg.ru/support/api
|
||||||
|
- **Примеры использования**: https://www.reg.ru/support/api/examples
|
||||||
|
- **FAQ по API**: https://www.reg.ru/support/api/faq
|
||||||
|
|
||||||
|
### Логи для диагностики
|
||||||
|
|
||||||
|
Всегда включайте логи при обращении в поддержку:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Включить подробные логи
|
||||||
|
sudo letsencrypt-regru --test-api -v
|
||||||
|
|
||||||
|
# Посмотреть последние логи
|
||||||
|
sudo tail -n 50 /var/log/letsencrypt-regru/letsencrypt_regru.log
|
||||||
|
|
||||||
|
# Логи certbot
|
||||||
|
sudo tail -n 50 /var/log/letsencrypt/letsencrypt.log
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔄 Альтернативные DNS провайдеры
|
||||||
|
|
||||||
|
Если проблемы с reg.ru API критичны, рассмотрите альтернативы:
|
||||||
|
|
||||||
|
1. **Cloudflare** - отличный API, бесплатный DNS
|
||||||
|
2. **Route53** (AWS) - мощный, но платный
|
||||||
|
3. **DigitalOcean DNS** - простой и надежный
|
||||||
|
4. **Google Cloud DNS** - интеграция с GCP
|
||||||
|
|
||||||
|
Для них потребуется модификация скрипта или использование других плагинов certbot.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Дата обновления**: 29.10.2025
|
||||||
|
**Версия документа**: 1.0
|
||||||
@@ -182,7 +182,7 @@ class RegRuAPI:
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
self.logger.debug(f"Отправка запроса к API: {method}")
|
self.logger.debug(f"Отправка запроса к API: {method}")
|
||||||
response = self.session.post(url, data=params)
|
response = self.session.post(url, data=params, timeout=30)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
|
|
||||||
result = response.json()
|
result = response.json()
|
||||||
@@ -192,9 +192,45 @@ class RegRuAPI:
|
|||||||
return result
|
return result
|
||||||
else:
|
else:
|
||||||
error_msg = result.get("error_text", "Неизвестная ошибка")
|
error_msg = result.get("error_text", "Неизвестная ошибка")
|
||||||
self.logger.error(f"Ошибка API: {error_msg}")
|
error_code = result.get("error_code", "unknown")
|
||||||
|
|
||||||
|
# Обработка специфических ошибок
|
||||||
|
if "Access to API from this IP denied" in error_msg or error_code == "IP_DENIED":
|
||||||
|
self.logger.error("=" * 80)
|
||||||
|
self.logger.error("🚫 ОШИБКА ДОСТУПА К API REG.RU")
|
||||||
|
self.logger.error("=" * 80)
|
||||||
|
self.logger.error("❌ Доступ к API заблокирован для текущего IP адреса")
|
||||||
|
self.logger.error("")
|
||||||
|
self.logger.error("🔧 РЕШЕНИЕ ПРОБЛЕМЫ:")
|
||||||
|
self.logger.error("1. Войдите в личный кабинет reg.ru")
|
||||||
|
self.logger.error("2. Перейдите в 'Настройки' → 'Безопасность' → 'API'")
|
||||||
|
self.logger.error("3. Добавьте текущий IP адрес в список разрешенных")
|
||||||
|
self.logger.error("4. Или отключите ограничение по IP (менее безопасно)")
|
||||||
|
self.logger.error("")
|
||||||
|
self.logger.error("🌐 Текущий IP можно узнать командой:")
|
||||||
|
self.logger.error(" curl -s https://ipinfo.io/ip")
|
||||||
|
self.logger.error(" или на сайте: https://whatismyipaddress.com/")
|
||||||
|
self.logger.error("")
|
||||||
|
self.logger.error("📚 Документация API: https://www.reg.ru/support/api")
|
||||||
|
self.logger.error("=" * 80)
|
||||||
|
elif "Invalid username or password" in error_msg:
|
||||||
|
self.logger.error("=" * 80)
|
||||||
|
self.logger.error("🔐 ОШИБКА АУТЕНТИФИКАЦИИ")
|
||||||
|
self.logger.error("=" * 80)
|
||||||
|
self.logger.error("❌ Неверные учетные данные")
|
||||||
|
self.logger.error("🔧 Проверьте username и password в конфигурации")
|
||||||
|
self.logger.error("=" * 80)
|
||||||
|
else:
|
||||||
|
self.logger.error(f"Ошибка API reg.ru: {error_msg} (код: {error_code})")
|
||||||
|
|
||||||
raise Exception(f"API Error: {error_msg}")
|
raise Exception(f"API Error: {error_msg}")
|
||||||
|
|
||||||
|
except requests.exceptions.Timeout:
|
||||||
|
self.logger.error("Таймаут при обращении к API reg.ru (30 сек)")
|
||||||
|
raise
|
||||||
|
except requests.exceptions.ConnectionError:
|
||||||
|
self.logger.error("Ошибка соединения с API reg.ru. Проверьте интернет подключение")
|
||||||
|
raise
|
||||||
except requests.exceptions.RequestException as e:
|
except requests.exceptions.RequestException as e:
|
||||||
self.logger.error(f"Ошибка HTTP запроса: {e}")
|
self.logger.error(f"Ошибка HTTP запроса: {e}")
|
||||||
raise
|
raise
|
||||||
@@ -254,6 +290,55 @@ class RegRuAPI:
|
|||||||
self.logger.error(f"Не удалось добавить TXT запись: {e}")
|
self.logger.error(f"Не удалось добавить TXT запись: {e}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def get_current_ip(self) -> str:
|
||||||
|
"""
|
||||||
|
Получение текущего публичного IP адреса
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
IP адрес или 'Неизвестно'
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
response = requests.get("https://ipinfo.io/ip", timeout=10)
|
||||||
|
if response.status_code == 200:
|
||||||
|
return response.text.strip()
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
response = requests.get("https://api.ipify.org", timeout=10)
|
||||||
|
if response.status_code == 200:
|
||||||
|
return response.text.strip()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
return "Неизвестно"
|
||||||
|
|
||||||
|
def test_api_access(self) -> bool:
|
||||||
|
"""
|
||||||
|
Проверка доступности API reg.ru
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True если API доступен
|
||||||
|
"""
|
||||||
|
# Получаем текущий IP
|
||||||
|
current_ip = self.get_current_ip()
|
||||||
|
self.logger.info(f"Текущий IP адрес: {current_ip}")
|
||||||
|
self.logger.info("Проверка доступности API reg.ru...")
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Простой запрос для проверки доступа
|
||||||
|
params = {}
|
||||||
|
result = self._make_request("user/get_balance", params)
|
||||||
|
|
||||||
|
if result and result.get("result") == "success":
|
||||||
|
balance = result.get("answer", {}).get("prepay", "Неизвестно")
|
||||||
|
self.logger.info(f"✅ API reg.ru доступен. Баланс: {balance} руб.")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
self.logger.error("❌ API reg.ru недоступен")
|
||||||
|
return False
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
self.logger.error(f"❌ Не удалось подключиться к API reg.ru: {e}")
|
||||||
|
return False
|
||||||
|
|
||||||
def remove_txt_record(self, domain: str, subdomain: str, txt_value: str) -> bool:
|
def remove_txt_record(self, domain: str, subdomain: str, txt_value: str) -> bool:
|
||||||
"""
|
"""
|
||||||
Удаление TXT записи
|
Удаление TXT записи
|
||||||
@@ -268,34 +353,38 @@ class RegRuAPI:
|
|||||||
"""
|
"""
|
||||||
self.logger.info(f"Удаление TXT записи: {subdomain}.{domain}")
|
self.logger.info(f"Удаление TXT записи: {subdomain}.{domain}")
|
||||||
|
|
||||||
# Сначала получаем список всех записей
|
|
||||||
records = self.get_zone_records(domain)
|
|
||||||
|
|
||||||
# Ищем нужную TXT запись
|
|
||||||
record_id = None
|
|
||||||
for record in records:
|
|
||||||
if (record.get("rectype") == "TXT" and
|
|
||||||
record.get("subdomain") == subdomain and
|
|
||||||
record.get("text") == txt_value):
|
|
||||||
record_id = record.get("id")
|
|
||||||
break
|
|
||||||
|
|
||||||
if not record_id:
|
|
||||||
self.logger.warning("TXT запись для удаления не найдена")
|
|
||||||
return False
|
|
||||||
|
|
||||||
params = {
|
|
||||||
"domain": domain,
|
|
||||||
"record_id": record_id
|
|
||||||
}
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
# Сначала получаем список всех записей
|
||||||
|
records = self.get_zone_records(domain)
|
||||||
|
|
||||||
|
# Ищем нужную TXT запись
|
||||||
|
record_id = None
|
||||||
|
for record in records:
|
||||||
|
if (record.get("rectype") == "TXT" and
|
||||||
|
record.get("subdomain") == subdomain and
|
||||||
|
record.get("text") == txt_value):
|
||||||
|
record_id = record.get("id")
|
||||||
|
break
|
||||||
|
|
||||||
|
if not record_id:
|
||||||
|
self.logger.warning("TXT запись для удаления не найдена")
|
||||||
|
# Не считаем это критической ошибкой
|
||||||
|
return True
|
||||||
|
|
||||||
|
params = {
|
||||||
|
"domain": domain,
|
||||||
|
"record_id": record_id
|
||||||
|
}
|
||||||
|
|
||||||
self._make_request("zone/remove_record", params)
|
self._make_request("zone/remove_record", params)
|
||||||
self.logger.info("TXT запись успешно удалена")
|
self.logger.info("TXT запись успешно удалена")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.error(f"Не удалось удалить TXT запись: {e}")
|
self.logger.error(f"Не удалось удалить TXT запись: {e}")
|
||||||
return False
|
# Для cleanup hook не критично, если не удалось удалить
|
||||||
|
self.logger.warning("Продолжаем выполнение, несмотря на ошибку удаления")
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
@@ -1219,6 +1308,11 @@ def main():
|
|||||||
help="Создать самоподписанный тестовый сертификат (для разработки и тестирования)",
|
help="Создать самоподписанный тестовый сертификат (для разработки и тестирования)",
|
||||||
action="store_true"
|
action="store_true"
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--test-api",
|
||||||
|
help="Протестировать подключение к API reg.ru",
|
||||||
|
action="store_true"
|
||||||
|
)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
@@ -1233,6 +1327,41 @@ def main():
|
|||||||
# Настройка логирования
|
# Настройка логирования
|
||||||
logger = setup_logging(config["log_file"], args.verbose)
|
logger = setup_logging(config["log_file"], args.verbose)
|
||||||
|
|
||||||
|
# Тестирование API
|
||||||
|
if args.test_api:
|
||||||
|
logger.info("=" * 80)
|
||||||
|
logger.info("ТЕСТИРОВАНИЕ ПОДКЛЮЧЕНИЯ К API REG.RU")
|
||||||
|
logger.info("=" * 80)
|
||||||
|
|
||||||
|
api = RegRuAPI(config["regru_username"], config["regru_password"], logger)
|
||||||
|
|
||||||
|
# Тест подключения
|
||||||
|
if api.test_api_access():
|
||||||
|
logger.info("")
|
||||||
|
logger.info("=" * 80)
|
||||||
|
logger.info("🧪 ДОПОЛНИТЕЛЬНЫЕ ТЕСТЫ")
|
||||||
|
logger.info("=" * 80)
|
||||||
|
|
||||||
|
# Тест получения DNS записей
|
||||||
|
try:
|
||||||
|
records = api.get_zone_records(config["domain"])
|
||||||
|
logger.info(f"✅ Получение DNS записей: успешно ({len(records)} записей)")
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"❌ Получение DNS записей: ошибка - {e}")
|
||||||
|
|
||||||
|
logger.info("")
|
||||||
|
logger.info("=" * 80)
|
||||||
|
logger.info("✅ ВСЕ ТЕСТЫ ЗАВЕРШЕНЫ")
|
||||||
|
logger.info("=" * 80)
|
||||||
|
logger.info("API reg.ru готов к использованию!")
|
||||||
|
return 0
|
||||||
|
else:
|
||||||
|
logger.error("=" * 80)
|
||||||
|
logger.error("❌ ТЕСТЫ НЕ ПРОЙДЕНЫ")
|
||||||
|
logger.error("=" * 80)
|
||||||
|
logger.error("Исправьте проблемы с API перед использованием скрипта")
|
||||||
|
return 1
|
||||||
|
|
||||||
# Генерация тестового сертификата
|
# Генерация тестового сертификата
|
||||||
if args.test_cert:
|
if args.test_cert:
|
||||||
logger.info("=" * 80)
|
logger.info("=" * 80)
|
||||||
@@ -1343,6 +1472,17 @@ def main():
|
|||||||
logger.info("СКРИПТ УПРАВЛЕНИЯ SSL СЕРТИФИКАТАМИ LET'S ENCRYPT")
|
logger.info("СКРИПТ УПРАВЛЕНИЯ SSL СЕРТИФИКАТАМИ LET'S ENCRYPT")
|
||||||
logger.info("=" * 60)
|
logger.info("=" * 60)
|
||||||
|
|
||||||
|
# Проверка доступности API reg.ru (кроме режимов только проверки)
|
||||||
|
if not args.check:
|
||||||
|
if not api.test_api_access():
|
||||||
|
logger.error("=" * 80)
|
||||||
|
logger.error("❌ КРИТИЧЕСКАЯ ОШИБКА: API reg.ru недоступен")
|
||||||
|
logger.error("=" * 80)
|
||||||
|
logger.error("Скрипт не может продолжить работу без доступа к API")
|
||||||
|
logger.error("Исправьте проблему и запустите скрипт заново")
|
||||||
|
return 1
|
||||||
|
logger.info("")
|
||||||
|
|
||||||
# Выполнение действий
|
# Выполнение действий
|
||||||
if args.check:
|
if args.check:
|
||||||
# Только проверка срока действия
|
# Только проверка срока действия
|
||||||
|
|||||||
Reference in New Issue
Block a user