diff --git a/changelog_RU_EN.md b/changelog_RU_EN.md new file mode 100644 index 00000000..37e8d932 --- /dev/null +++ b/changelog_RU_EN.md @@ -0,0 +1,121 @@ +# 📌 Changelog + +--- + +## 🇬🇧 English + +### 🔐 LDAP Integration for Client Access Management +- **Scheduled sync job** reads LDAP and: + - Enables/disables clients by `client.email` (local status storage, no LDAP lookups on connect). + - *Optionally* auto-creates clients in selected inbounds if they don’t exist yet. + - *Optionally* auto-deletes clients from selected inbounds if they disappear in LDAP or access flag = `deny`. + +### ⚙️ Access Flag Evaluation +- Uses: + - `ldapFlagField` (fallback: `ldapVlessField` if empty), + - `ldapTruthyValues` (default: `true, 1, yes, on`), + - `ldapInvertFlag` (useful for `shadowInactive`). +- **Example:** + `shadowInactive=1` + `ldapTruthyValues=1` + `ldapInvertFlag=true` → client **disabled**. +- **Matching:** `ldapUserAttr` (e.g., `mail`) ↔ `client.email`. + +### 🆕 New Settings +**Panel → Settings → General → LDAP** +- **Connection:** `ldapHost`, `ldapPort`, `ldapUseTLS`, `ldapBindDN`, `ldapPassword`, `ldapBaseDN`. +- **User Search:** `ldapUserFilter`, `ldapUserAttr`. +- **Access Flag:** `ldapFlagField` (or `ldapVlessField`), `ldapTruthyValues`, `ldapInvertFlag`. +- **Scheduler:** `ldapEnable`, `ldapSyncCron` (e.g., `@every 1m`). +- **Inbound Management (multi-select):** `ldapInboundTags`. +- **Auto Actions:** `ldapAutoCreate`, `ldapAutoDelete`. +- **Defaults for Auto-Create:** + - `ldapDefaultTotalGB` + - `ldapDefaultExpiryDays` + - `ldapDefaultLimitIP` (0 = unlimited). + +👉 UI: `ldapInboundTags` options are fetched from `/panel/inbound/list`; a hint is shown if none exist. + +### 🛠️ Auto-Create Rules +- **VLESS/VMESS:** generate UUID, use `security/flow` from inbound. +- **Trojan:** generate password, email = LDAP mail. +- **Shadowsocks:** take method from inbound, generate password. +- **All protocols:** `enable` from LDAP flag, limits/expiry from defaults. + +### 🔧 Implementation +- **Sync job:** `web/job/ldap_sync_job.go` +- **LDAP client:** `util/ldap/ldap.go` (go-ldap/ldap/v3) +- **Backend:** `web/service/setting.go`, `web/entity/entity.go` +- **Frontend:** + - `web/assets/js/model/setting.js` + - `web/html/settings/panel/general.html` + - `web/html/settings.html` +- **Xray restart:** handled by scheduler when changes occur. + +### 🗄️ External MySQL Database +- Support added for **external MySQL** instead of local DB. +- Docker env supports external DB parameters. +- Panel starts as soon as DB is reachable. + +### 🔄 Upgrade Notes +- Frontend assets are version-busted (`config/version`) → **hard refresh browser** after update (`Ctrl+F5`). +- If you previously used only `vless_enabled`, you can now use any LDAP attribute via `ldapFlagField + ldapTruthyValues + ldapInvertFlag`. +- To enable auto-create, select inbounds in `ldapInboundTags` and enable `ldapAutoCreate`. + +--- + +## 🇷🇺 Русский + +### 🔐 Интеграция с LDAP для управления доступом клиентов +- **Периодическая синхронизация (cron)**: + - Включает/выключает клиентов по `client.email` (локально, без онлайн-запросов). + - *Опционально* автосоздаёт клиентов в выбранных инбаундах. + - *Опционально* автоудаляет клиентов, если их нет в LDAP или флаг запрещает доступ. + +### ⚙️ Логика проверки флага доступа +- Используется: + - `ldapFlagField` (если пусто → `ldapVlessField`), + - `ldapTruthyValues` (по умолчанию: `true,1,yes,on`), + - `ldapInvertFlag` (например, для `shadowInactive`). +- **Пример:** + `shadowInactive=1` + `ldapTruthyValues=1` + `ldapInvertFlag=true` → клиент **отключён**. +- **Сопоставление:** `ldapUserAttr` (обычно `mail`) ↔ `client.email`. + +### 🆕 Новые параметры +**Панель → Settings → General → LDAP** +- **Подключение:** `ldapHost`, `ldapPort`, `ldapUseTLS`, `ldapBindDN`, `ldapPassword`, `ldapBaseDN`. +- **Поиск пользователей:** `ldapUserFilter`, `ldapUserAttr`. +- **Флаг доступа:** `ldapFlagField` (или `ldapVlessField`), `ldapTruthyValues`, `ldapInvertFlag`. +- **Планировщик:** `ldapEnable`, `ldapSyncCron` (например, `@every 1m`). +- **Управление инбаундами:** `ldapInboundTags`. +- **Автодействия:** `ldapAutoCreate`, `ldapAutoDelete`. +- **Дефолты для автосоздания:** + - `ldapDefaultTotalGB` + - `ldapDefaultExpiryDays` + - `ldapDefaultLimitIP` (0 = безлимит). + +👉 UI: `ldapInboundTags` выбираются из `/panel/inbound/list`. Если инбаундов нет — показывается подсказка. + +### 🛠️ Правила автосоздания +- **VLESS/VMESS:** генерируется UUID, параметры `security/flow` из инбаунда. +- **Trojan:** генерируется пароль, email = mail из LDAP. +- **Shadowsocks:** берёт `method` из инбаунда, генерирует пароль. +- **Все протоколы:** статус включён/выключен по флагу, лимиты/срок из дефолтов. + +### 🔧 Реализация +- **Job:** `web/job/ldap_sync_job.go` +- **LDAP-клиент:** `util/ldap/ldap.go` (go-ldap/ldap/v3) +- **Backend:** `web/service/setting.go`, `web/entity/entity.go` +- **Frontend:** + - `web/assets/js/model/setting.js` + - `web/html/settings/panel/general.html` + - `web/html/settings.html` +- **Перезапуск Xray:** флаг на изменения → обрабатывается планировщиком. + +### 🗄️ Внешняя база MySQL +- Поддержка подключения к **внешней MySQL** вместо локальной. +- Docker-окружение принимает параметры внешней БД. +- Панель стартует при доступности БД. + +### 🔄 Замечания по обновлению +- Версия фронтенда контролируется через `config/version` → после обновления сделайте **жёсткое обновление страницы** (`Ctrl+F5`). +- Если раньше использовался только `vless_enabled`, теперь можно использовать произвольный атрибут (`ldapFlagField + ldapTruthyValues + ldapInvertFlag`). +- Для автосоздания заранее выберите инбаунды в `ldapInboundTags` и включите `ldapAutoCreate`. diff --git a/changelog_RU_EN.txt b/changelog_RU_EN.txt new file mode 100644 index 00000000..37e8d932 --- /dev/null +++ b/changelog_RU_EN.txt @@ -0,0 +1,121 @@ +# 📌 Changelog + +--- + +## 🇬🇧 English + +### 🔐 LDAP Integration for Client Access Management +- **Scheduled sync job** reads LDAP and: + - Enables/disables clients by `client.email` (local status storage, no LDAP lookups on connect). + - *Optionally* auto-creates clients in selected inbounds if they don’t exist yet. + - *Optionally* auto-deletes clients from selected inbounds if they disappear in LDAP or access flag = `deny`. + +### ⚙️ Access Flag Evaluation +- Uses: + - `ldapFlagField` (fallback: `ldapVlessField` if empty), + - `ldapTruthyValues` (default: `true, 1, yes, on`), + - `ldapInvertFlag` (useful for `shadowInactive`). +- **Example:** + `shadowInactive=1` + `ldapTruthyValues=1` + `ldapInvertFlag=true` → client **disabled**. +- **Matching:** `ldapUserAttr` (e.g., `mail`) ↔ `client.email`. + +### 🆕 New Settings +**Panel → Settings → General → LDAP** +- **Connection:** `ldapHost`, `ldapPort`, `ldapUseTLS`, `ldapBindDN`, `ldapPassword`, `ldapBaseDN`. +- **User Search:** `ldapUserFilter`, `ldapUserAttr`. +- **Access Flag:** `ldapFlagField` (or `ldapVlessField`), `ldapTruthyValues`, `ldapInvertFlag`. +- **Scheduler:** `ldapEnable`, `ldapSyncCron` (e.g., `@every 1m`). +- **Inbound Management (multi-select):** `ldapInboundTags`. +- **Auto Actions:** `ldapAutoCreate`, `ldapAutoDelete`. +- **Defaults for Auto-Create:** + - `ldapDefaultTotalGB` + - `ldapDefaultExpiryDays` + - `ldapDefaultLimitIP` (0 = unlimited). + +👉 UI: `ldapInboundTags` options are fetched from `/panel/inbound/list`; a hint is shown if none exist. + +### 🛠️ Auto-Create Rules +- **VLESS/VMESS:** generate UUID, use `security/flow` from inbound. +- **Trojan:** generate password, email = LDAP mail. +- **Shadowsocks:** take method from inbound, generate password. +- **All protocols:** `enable` from LDAP flag, limits/expiry from defaults. + +### 🔧 Implementation +- **Sync job:** `web/job/ldap_sync_job.go` +- **LDAP client:** `util/ldap/ldap.go` (go-ldap/ldap/v3) +- **Backend:** `web/service/setting.go`, `web/entity/entity.go` +- **Frontend:** + - `web/assets/js/model/setting.js` + - `web/html/settings/panel/general.html` + - `web/html/settings.html` +- **Xray restart:** handled by scheduler when changes occur. + +### 🗄️ External MySQL Database +- Support added for **external MySQL** instead of local DB. +- Docker env supports external DB parameters. +- Panel starts as soon as DB is reachable. + +### 🔄 Upgrade Notes +- Frontend assets are version-busted (`config/version`) → **hard refresh browser** after update (`Ctrl+F5`). +- If you previously used only `vless_enabled`, you can now use any LDAP attribute via `ldapFlagField + ldapTruthyValues + ldapInvertFlag`. +- To enable auto-create, select inbounds in `ldapInboundTags` and enable `ldapAutoCreate`. + +--- + +## 🇷🇺 Русский + +### 🔐 Интеграция с LDAP для управления доступом клиентов +- **Периодическая синхронизация (cron)**: + - Включает/выключает клиентов по `client.email` (локально, без онлайн-запросов). + - *Опционально* автосоздаёт клиентов в выбранных инбаундах. + - *Опционально* автоудаляет клиентов, если их нет в LDAP или флаг запрещает доступ. + +### ⚙️ Логика проверки флага доступа +- Используется: + - `ldapFlagField` (если пусто → `ldapVlessField`), + - `ldapTruthyValues` (по умолчанию: `true,1,yes,on`), + - `ldapInvertFlag` (например, для `shadowInactive`). +- **Пример:** + `shadowInactive=1` + `ldapTruthyValues=1` + `ldapInvertFlag=true` → клиент **отключён**. +- **Сопоставление:** `ldapUserAttr` (обычно `mail`) ↔ `client.email`. + +### 🆕 Новые параметры +**Панель → Settings → General → LDAP** +- **Подключение:** `ldapHost`, `ldapPort`, `ldapUseTLS`, `ldapBindDN`, `ldapPassword`, `ldapBaseDN`. +- **Поиск пользователей:** `ldapUserFilter`, `ldapUserAttr`. +- **Флаг доступа:** `ldapFlagField` (или `ldapVlessField`), `ldapTruthyValues`, `ldapInvertFlag`. +- **Планировщик:** `ldapEnable`, `ldapSyncCron` (например, `@every 1m`). +- **Управление инбаундами:** `ldapInboundTags`. +- **Автодействия:** `ldapAutoCreate`, `ldapAutoDelete`. +- **Дефолты для автосоздания:** + - `ldapDefaultTotalGB` + - `ldapDefaultExpiryDays` + - `ldapDefaultLimitIP` (0 = безлимит). + +👉 UI: `ldapInboundTags` выбираются из `/panel/inbound/list`. Если инбаундов нет — показывается подсказка. + +### 🛠️ Правила автосоздания +- **VLESS/VMESS:** генерируется UUID, параметры `security/flow` из инбаунда. +- **Trojan:** генерируется пароль, email = mail из LDAP. +- **Shadowsocks:** берёт `method` из инбаунда, генерирует пароль. +- **Все протоколы:** статус включён/выключен по флагу, лимиты/срок из дефолтов. + +### 🔧 Реализация +- **Job:** `web/job/ldap_sync_job.go` +- **LDAP-клиент:** `util/ldap/ldap.go` (go-ldap/ldap/v3) +- **Backend:** `web/service/setting.go`, `web/entity/entity.go` +- **Frontend:** + - `web/assets/js/model/setting.js` + - `web/html/settings/panel/general.html` + - `web/html/settings.html` +- **Перезапуск Xray:** флаг на изменения → обрабатывается планировщиком. + +### 🗄️ Внешняя база MySQL +- Поддержка подключения к **внешней MySQL** вместо локальной. +- Docker-окружение принимает параметры внешней БД. +- Панель стартует при доступности БД. + +### 🔄 Замечания по обновлению +- Версия фронтенда контролируется через `config/version` → после обновления сделайте **жёсткое обновление страницы** (`Ctrl+F5`). +- Если раньше использовался только `vless_enabled`, теперь можно использовать произвольный атрибут (`ldapFlagField + ldapTruthyValues + ldapInvertFlag`). +- Для автосоздания заранее выберите инбаунды в `ldapInboundTags` и включите `ldapAutoCreate`.