# Информация для проверяющих ContentZavod Plugin

## 📋 Общая информация

**Название плагина:** ContentZavod  
**Версия:** 2.4.1  
**Лицензия:** GPLv2 or later  
**Автор:** Fittin  
**Сайт:** <https://contentzavod.fittin.ru>

---

## 🎯 Назначение плагина

ContentZavod - это плагин-коннектор для интеграции WordPress с внешним SaaS-сервисом ContentZavod API. Плагин позволяет владельцам WordPress-сайтов получать и отображать контент (новости, статьи) через защищённый API.

### Бизнес-модель

- Плагин **бесплатный** и распространяется под лицензией GPLv2
- Для работы требуется **API токен**, который выдаётся на сайте contentzavod.fittin.ru
- Это стандартная модель SaaS-плагинов WordPress (аналогично Jetpack, Akismet и др.)

---

## 🔐 Безопасность и конфиденциальность

### Что плагин НЕ делает

✅ **НЕ собирает персональные данные пользователей**  
✅ **НЕ отслеживает посетителей сайта**  
✅ **НЕ устанавливает cookies**  
✅ **НЕ отправляет данные на сторонние серверы без согласия**  
✅ **НЕ модифицирует базу данных WordPress** (кроме хранения API токена в wp_options)  
✅ **НЕ создаёт новые таблицы в БД**

### Что плагин делает

1. **Хранит API токен** в таблице `wp_options` (стандартный механизм WordPress)
2. **Делает HTTP запросы** к `ainews-back.fittin.ru` для получения контента (только после настройки токена администратором)
3. **Проксирует контент** - отображает полученный HTML на страницах WordPress
4. **Добавляет rewrite rules** для URL вида `/contentzavod/` и `/contentzavod/view/{slug}`
5. **Модифицирует robots.txt** - добавляет ссылку на sitemap

### Внешние запросы

Плагин делает запросы к следующим эндпоинтам:

```
https://ainews-back.fittin.ru/public/content/{api_token}/all-news-page
https://ainews-back.fittin.ru/public/content/{api_token}/view/{slug}
https://ainews-back.fittin.ru/public/content/{api_token}/sitemap.xml
```

**Важно:** Запросы выполняются **только после того, как администратор сайта:**

1. Установил плагин
2. Активировал плагин
3. Получил API токен на contentzavod.fittin.ru
4. Ввёл токен в настройках плагина

Это **opt-in модель** - никакие запросы не выполняются без явного согласия администратора.

---

## 🛡️ Защита от уязвимостей

### SQL Injection

✅ Плагин **НЕ делает прямых SQL запросов**  
✅ Использует только WordPress API: `get_option()`, `update_option()`

### XSS (Cross-Site Scripting)

✅ Все выводимые данные экранируются через:

- `esc_html()`
- `esc_attr()`
- `esc_url()`

### CSRF (Cross-Site Request Forgery)

✅ Использует WordPress nonces через:

- `settings_fields()`
- `wp_nonce_field()`

### Права доступа

✅ Проверка прав через `current_user_can('manage_options')`  
✅ Настройки доступны только администраторам

### Санитизация данных

✅ API токен санитизируется через `sanitize_text_field()`

---

## 📁 Структура файлов

```
contentzavod-proxy/
├── contentzavod-proxy.php  (37KB) - основной файл плагина
├── README.md               (7KB)  - документация
├── readme.txt              (1.4KB) - WordPress.org формат
└── INSTALLATION.txt        (2.6KB) - инструкция по установке
```

**Всего:** 4 файла, 48KB

---

## 🔧 Технические детали

### Используемые WordPress хуки

**Actions:**

- `plugins_loaded` - инициализация плагина
- `init` - добавление rewrite rules
- `template_redirect` - обработка запросов
- `parse_request` - ранняя обработка sitemap
- `admin_menu` - добавление страницы настроек
- `admin_init` - регистрация настроек
- `admin_notices` - уведомления в админке

**Filters:**

- `query_vars` - добавление переменных запроса
- `robots_txt` - модификация robots.txt
- `plugin_action_links_{basename}` - ссылка "Настройки"

### WordPress API функции

**Безопасность:**

- `current_user_can()`
- `esc_html()`, `esc_attr()`, `esc_url()`
- `sanitize_text_field()`
- `wp_nonce_field()`

**Настройки:**

- `get_option()`, `update_option()`
- `register_setting()`
- `add_settings_section()`
- `add_settings_field()`

**HTTP запросы:**

- `wp_remote_get()` - безопасный способ HTTP запросов
- `wp_remote_retrieve_body()`
- `wp_remote_retrieve_response_code()`
- `is_wp_error()`

**URL Rewriting:**

- `add_rewrite_rule()`
- `flush_rewrite_rules()`
- `get_query_var()`

---

## 🧪 Тестирование

### Тестовый сайт

Плагин протестирован на реальном WordPress сайте:

- URL: <https://lifeexpert.top>
- WordPress версия: 6.4+
- PHP версия: 8.0+

### Тестовые URL

- Главная: <https://lifeexpert.top/contentzavod/>
- Статья: <https://lifeexpert.top/contentzavod/view/dizayn-vannoy-komnaty-7-glavnyh-trendov-i-vybor-santehniki-dlya-sovremennogo-interera>
- Sitemap: <https://lifeexpert.top/contentzavod-sitemap.xml>

### Совместимость

Протестировано с:

- ✅ WordPress 5.0 - 6.4
- ✅ PHP 7.4 - 8.2
- ✅ Yoast SEO
- ✅ All in One SEO Pack
- ✅ WP Super Cache
- ✅ W3 Total Cache
- ✅ LiteSpeed Cache

---

## 📝 Для получения тестового API токена

Если проверяющему нужен тестовый API токен для проверки функциональности:

1. Посетите: <https://contentzavod.fittin.ru>
2. Или используйте тестовый токен: `test-token-for-review-only`
3. Или свяжитесь с нами: <support@fittin.ru>

**Примечание:** Без API токена плагин будет показывать информативное сообщение об ошибке с инструкцией по настройке, но не будет вызывать ошибок PHP или WordPress.

---

## 🔍 Проверка кода

### Стандарты кодирования

Код следует WordPress Coding Standards:

- Правильное именование функций и переменных
- Документация PHPDoc для всех методов
- Правильная структура классов
- Использование WordPress API вместо прямых запросов

### Нет вредоносного кода

✅ Нет `eval()`  
✅ Нет `base64_decode()`  
✅ Нет `exec()`, `system()`, `shell_exec()`  
✅ Нет скрытых iframe  
✅ Нет обфусцированного кода

### Производительность

- Кэширование контента (30 минут)
- Минимальное количество запросов к БД
- Оптимизированные rewrite rules
- Ранний выход из функций при ненужных запросах

---

## 📞 Контакты

**Email:** <support@fittin.ru>  
**Сайт:** <https://contentzavod.fittin.ru>  
**Документация:** <https://contentzavod.fittin.ru/docs>

Мы готовы ответить на любые вопросы проверяющих и внести необходимые изменения для соответствия требованиям WordPress.org.

---

## ✅ Чеклист соответствия WordPress.org

- [x] Лицензия GPLv2 or later
- [x] Нет проприетарного кода
- [x] Нет сбора персональных данных без согласия
- [x] Использование WordPress API
- [x] Санитизация и экранирование данных
- [x] Проверка прав доступа
- [x] Документация на английском (readme.txt)
- [x] Корректный заголовок плагина
- [x] Нет прямых SQL запросов
- [x] Нет вредоносного кода
- [x] Opt-in модель для внешних запросов
- [x] Информация о внешних сервисах в readme.txt

---

**Спасибо за проверку!**

Мы стремимся создавать качественные плагины для сообщества WordPress и готовы к конструктивной обратной связи.
