Files
iiEsaywebUI/scripts/rebrand_safe_final.sh
2026-02-19 18:12:09 +00:00

461 lines
26 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# БЕЗОПАСНЫЙ финальный ребрендинг - не ломает функциональность
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
MEDIA_DIR="$PROJECT_DIR/media"
CONTAINER_NAME="open-webui"
echo "=== БЕЗОПАСНЫЙ финальный ребрендинг Open WebUI для iiEasy ==="
echo ""
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
echo "Ошибка: Контейнер ${CONTAINER_NAME} не запущен."
exit 1
fi
echo "1. Замена логотипов, splash.png и favicon..."
STATIC_DIRS=(
"/app/web/build/_app/immutable"
"/app/web/static"
"/app/web/build"
"/app/backend/static"
"/app/static"
"/app/web/public"
"/app/public"
)
for dir in "${STATIC_DIRS[@]}"; do
if docker exec "${CONTAINER_NAME}" test -d "$dir" 2>/dev/null; then
# Основной логотип
if [ -f "$MEDIA_DIR/logo.png" ]; then
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/logo.png" 2>/dev/null || true
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/splash.png" 2>/dev/null || true
# Также создаем splash-dark.png для темной темы
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/splash-dark.png" 2>/dev/null || true
fi
# Логотип для светлой темы
if [ -f "$MEDIA_DIR/logo-light.svg" ]; then
docker cp "$MEDIA_DIR/logo-light.svg" "${CONTAINER_NAME}:${dir}/logo-light.svg" 2>/dev/null || true
docker cp "$MEDIA_DIR/logo-light.svg" "${CONTAINER_NAME}:${dir}/logo.svg" 2>/dev/null || true
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/splash-light.png" 2>/dev/null || true
elif [ -f "$MEDIA_DIR/logo.png" ]; then
# Если нет SVG, используем PNG для светлой темы
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/logo-light.png" 2>/dev/null || true
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/splash-light.png" 2>/dev/null || true
fi
# Логотип для темной темы
if [ -f "$MEDIA_DIR/logo-dark.svg" ]; then
docker cp "$MEDIA_DIR/logo-dark.svg" "${CONTAINER_NAME}:${dir}/logo-dark.svg" 2>/dev/null || true
# Для splash-dark.png используем PNG версию (если есть logo-dark.png) или обычный logo.png
if [ -f "$MEDIA_DIR/logo-dark.png" ]; then
docker cp "$MEDIA_DIR/logo-dark.png" "${CONTAINER_NAME}:${dir}/splash-dark.png" 2>/dev/null || true
elif [ -f "$MEDIA_DIR/logo.png" ]; then
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/splash-dark.png" 2>/dev/null || true
fi
elif [ -f "$MEDIA_DIR/logo.png" ]; then
# Если нет темного SVG, используем PNG для темной темы
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/logo-dark.png" 2>/dev/null || true
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/splash-dark.png" 2>/dev/null || true
fi
# Favicon
if [ -f "$MEDIA_DIR/favicon.png" ]; then
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${dir}/favicon.png" 2>/dev/null || true
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${dir}/favicon.ico" 2>/dev/null || true
# Также создаем favicon-dark.png и favicon-light.png
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${dir}/favicon-dark.png" 2>/dev/null || true
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${dir}/favicon-light.png" 2>/dev/null || true
# Apple touch icon для iOS
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${dir}/apple-touch-icon.png" 2>/dev/null || true
elif [ -f "$MEDIA_DIR/logo.png" ]; then
# Если нет отдельного favicon, используем logo.png
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/favicon.png" 2>/dev/null || true
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/favicon.ico" 2>/dev/null || true
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/favicon-dark.png" 2>/dev/null || true
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/favicon-light.png" 2>/dev/null || true
# Apple touch icon для iOS
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${dir}/apple-touch-icon.png" 2>/dev/null || true
fi
fi
done
# Заменяем ВСЕ существующие favicon файлы (включая favicon.ico, favicon-dark.png, favicon-light.png, apple-touch-icon.png)
echo " Замена всех favicon файлов..."
EXISTING_FAVICONS=$(docker exec "${CONTAINER_NAME}" find /app -type f \( -name "favicon.png" -o -name "favicon.ico" -o -name "favicon.svg" -o -name "favicon-dark.png" -o -name "favicon-light.png" -o -name "apple-touch-icon.png" \) 2>/dev/null)
if [ -f "$MEDIA_DIR/favicon.png" ]; then
echo "$EXISTING_FAVICONS" | while read -r favicon_file; do
if [ -n "$favicon_file" ] && [[ ! "$favicon_file" == *"node_modules"* ]]; then
favicon_name=$(basename "$favicon_file")
echo " Замена favicon: $favicon_file"
# Для темной темы используем logo-dark если есть, иначе favicon.png
if [[ "$favicon_name" == *"dark"* ]]; then
if [ -f "$MEDIA_DIR/logo-dark.svg" ] || [ -f "$MEDIA_DIR/logo-dark.png" ]; then
# Используем logo.png для favicon-dark (так как favicon должен быть PNG)
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${favicon_file}" 2>/dev/null || true
else
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${favicon_file}" 2>/dev/null || true
fi
# Для светлой темы
elif [[ "$favicon_name" == *"light"* ]]; then
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${favicon_file}" 2>/dev/null || true
# Apple touch icon или обычный favicon
else
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${favicon_file}" 2>/dev/null || true
# Также создаем .ico версию в той же директории для обычных favicon
if [[ "$favicon_name" == "favicon.png" ]]; then
favicon_dir=$(dirname "$favicon_file")
docker cp "$MEDIA_DIR/favicon.png" "${CONTAINER_NAME}:${favicon_dir}/favicon.ico" 2>/dev/null || true
fi
fi
fi
done
elif [ -f "$MEDIA_DIR/logo.png" ]; then
# Если нет favicon.png, используем logo.png
echo "$EXISTING_FAVICONS" | while read -r favicon_file; do
if [ -n "$favicon_file" ] && [[ ! "$favicon_file" == *"node_modules"* ]]; then
favicon_name=$(basename "$favicon_file")
echo " Замена favicon: $favicon_file"
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${favicon_file}" 2>/dev/null || true
# Также создаем .ico версию для обычных favicon (не для dark/light/apple-touch-icon)
if [[ "$favicon_name" == "favicon.png" ]]; then
favicon_dir=$(dirname "$favicon_file")
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${favicon_dir}/favicon.ico" 2>/dev/null || true
fi
fi
done
fi
# Заменяем все существующие splash.png и splash-dark.png
EXISTING_SPLASH=$(docker exec "${CONTAINER_NAME}" find /app -type f \( -name "splash.png" -o -name "splash-dark.png" -o -name "splash-light.png" \) 2>/dev/null)
if [ -f "$MEDIA_DIR/logo.png" ]; then
echo "$EXISTING_SPLASH" | while read -r splash_file; do
if [ -n "$splash_file" ] && [[ ! "$splash_file" == *"node_modules"* ]]; then
splash_name=$(basename "$splash_file")
# Для темной темы используем logo-dark если есть, иначе обычный logo
if [[ "$splash_name" == *"dark"* ]]; then
if [ -f "$MEDIA_DIR/logo-dark.svg" ]; then
# Конвертируем SVG в PNG или используем logo.png
echo " Замена splash-dark.png: $splash_file"
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${splash_file}" 2>/dev/null || true
else
echo " Замена splash-dark.png: $splash_file"
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${splash_file}" 2>/dev/null || true
fi
# Для светлой темы
elif [[ "$splash_name" == *"light"* ]]; then
if [ -f "$MEDIA_DIR/logo-light.svg" ]; then
echo " Замена splash-light.png: $splash_file"
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${splash_file}" 2>/dev/null || true
else
echo " Замена splash-light.png: $splash_file"
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${splash_file}" 2>/dev/null || true
fi
# Обычный splash
else
echo " Замена splash.png: $splash_file"
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${splash_file}" 2>/dev/null || true
fi
fi
done
fi
# Заменяем все существующие logo файлы (включая logo-dark и logo-light)
EXISTING_LOGOS=$(docker exec "${CONTAINER_NAME}" find /app -type f \( -name "logo.png" -o -name "logo.svg" -o -name "logo-light.*" -o -name "logo-dark.*" \) 2>/dev/null)
if [ -f "$MEDIA_DIR/logo.png" ]; then
echo "$EXISTING_LOGOS" | while read -r logo_file; do
if [ -n "$logo_file" ] && [[ ! "$logo_file" == *"node_modules"* ]]; then
logo_name=$(basename "$logo_file")
# Для темной темы используем logo-dark если есть, иначе обычный logo
if [[ "$logo_name" == *"dark"* ]]; then
if [ -f "$MEDIA_DIR/logo-dark.svg" ]; then
docker cp "$MEDIA_DIR/logo-dark.svg" "${CONTAINER_NAME}:${logo_file}" 2>/dev/null || true
else
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${logo_file}" 2>/dev/null || true
fi
# Для светлой темы используем logo-light если есть
elif [[ "$logo_name" == *"light"* ]]; then
if [ -f "$MEDIA_DIR/logo-light.svg" ]; then
docker cp "$MEDIA_DIR/logo-light.svg" "${CONTAINER_NAME}:${logo_file}" 2>/dev/null || true
else
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${logo_file}" 2>/dev/null || true
fi
# Обычный логотип
else
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${logo_file}" 2>/dev/null || true
fi
fi
done
fi
echo "2. БЕЗОПАСНОЕ удаление '(Open WebUI)' из HTML/Svelte и Python шаблонов..."
# HTML, Svelte и Python файлы (шаблоны)
FILES=$(docker exec "${CONTAINER_NAME}" find /app -type f \
\( -name "*.html" -o -name "*.svelte" -o -name "*.py" \) \
! -path "*/node_modules/*" ! -path "*/.next/*" \
! -path "*/oauth*" ! -path "*/oidc*" ! -path "*authentik*" ! -path "*openid*" \
! -name "*test*" ! -name "*__pycache__*" \
-exec grep -lE "(Open WebUI)|\(Open WebUI\)" {} \; 2>/dev/null)
if [ -z "$FILES" ]; then
echo " Файлов с '(Open WebUI)' не найдено"
else
COUNT=$(echo "$FILES" | wc -l)
echo " Найдено файлов: $COUNT"
echo "$FILES" | while read file; do
if [ -n "$file" ]; then
# Безопасная замена только в HTML/Svelte
docker exec "${CONTAINER_NAME}" sed -i \
-e 's/(Open WebUI)//g' \
-e 's/\(Open WebUI\)//g' \
-e 's/ (Open WebUI)//g' \
-e 's/ \(Open WebUI\)//g' \
-e 's/iiEasyWeb (Open WebUI)/iiEasyWeb/g' \
-e 's/Войти в iiEasyWeb (Open WebUI)/Войти в iiEasyWeb/g' \
"$file" 2>/dev/null || true
fi
done
fi
echo "3. Замена ссылок на документацию (только в HTML/Svelte)..."
DOC_FILES=$(docker exec "${CONTAINER_NAME}" find /app/web -type f \
\( -name "*.html" -o -name "*.svelte" \) \
! -path "*/node_modules/*" ! -path "*/.next/*" \
-exec grep -lE "docs\.openwebui\.com|open-webui\.com/docs" {} \; 2>/dev/null)
if [ -z "$DOC_FILES" ]; then
echo " Файлов со ссылками не найдено"
else
echo "$DOC_FILES" | while read file; do
if [ -n "$file" ]; then
docker exec "${CONTAINER_NAME}" sed -i \
-e 's|https://docs.openwebui.com|https://note.iieasy.ru|g' \
-e 's|https://open-webui.com/docs|https://note.iieasy.ru|g' \
-e 's|docs\.openwebui\.com|note.iieasy.ru|g' \
"$file" 2>/dev/null || true
fi
done
fi
echo "4. Исправление favicon.ico, favicon.png, favicon-dark.png и apple-touch-icon.png в HTML/Svelte шаблонах..."
# Заменяем ссылки на favicon.ico, favicon.png, favicon-dark.png и apple-touch-icon.png на наш логотип
TEMPLATE_FILES=$(docker exec "${CONTAINER_NAME}" find /app/web -type f \
\( -name "*.html" -o -name "*.svelte" \) \
! -path "*/node_modules/*" ! -path "*/.next/*" \
-exec grep -lE "/static/favicon(-dark|-light)?\.(png|ico)|favicon(-dark|-light)?\.(ico|png)|apple-touch-icon\.png|rel=\"(shortcut )?icon\"|rel=\"apple-touch-icon\"" {} \; 2>/dev/null)
if [ -n "$TEMPLATE_FILES" ]; then
echo "$TEMPLATE_FILES" | while read file; do
if [ -n "$file" ]; then
# Заменяем favicon.ico, favicon.png, favicon-dark.png и apple-touch-icon.png на logo.png в ссылках
docker exec "${CONTAINER_NAME}" sed -i \
-e 's|/static/favicon-dark\.png|/static/logo.png|g' \
-e 's|/static/favicon-light\.png|/static/logo.png|g' \
-e 's|/static/favicon\.ico|/static/logo.png|g' \
-e 's|/static/favicon\.png|/static/logo.png|g' \
-e 's|/static/apple-touch-icon\.png|/static/logo.png|g' \
-e 's|src="/static/favicon-dark\.png"|src="/static/logo.png"|g' \
-e 's|src="/static/favicon\.png"|src="/static/logo.png"|g' \
-e 's|src="/static/apple-touch-icon\.png"|src="/static/logo.png"|g' \
-e 's|href="[^"]*favicon-dark\.png"|href="/static/logo.png"|g' \
-e 's|href="[^"]*favicon\.ico"|href="/static/logo.png"|g' \
-e 's|href="[^"]*favicon\.png"|href="/static/logo.png"|g' \
-e 's|href="[^"]*apple-touch-icon\.png"|href="/static/logo.png"|g' \
-e 's|href="https://odo\.iieasy\.ru/static/favicon\.ico"|href="/static/logo.png"|g' \
"$file" 2>/dev/null || true
fi
done
fi
echo "4.1. Исправление splash-dark.png, favicon-dark.png и логотипов в окне авторизации..."
# Ищем файлы, где используется splash-dark.png, favicon-dark.png или логотип в окне авторизации
AUTH_FILES=$(docker exec "${CONTAINER_NAME}" find /app/web -type f \
\( -name "*.html" -o -name "*.svelte" \) \
! -path "*/node_modules/*" ! -path "*/.next/*" \
-exec grep -lE "splash-dark|splash-dark\.png|favicon-dark\.png|auth.*logo|login.*logo|dark.*splash|dark.*favicon" {} \; 2>/dev/null)
if [ -n "$AUTH_FILES" ]; then
echo "$AUTH_FILES" | while read file; do
if [ -n "$file" ]; then
echo " Исправление логотипа в окне авторизации: $file"
# Заменяем splash-dark.png и favicon-dark.png на наш логотип
docker exec "${CONTAINER_NAME}" sed -i \
-e 's|/static/splash-dark\.png|/static/logo.png|g' \
-e 's|/static/favicon-dark\.png|/static/logo.png|g' \
-e 's|splash-dark\.png|logo.png|g' \
-e 's|favicon-dark\.png|logo.png|g' \
-e 's|src="/static/favicon-dark\.png"|src="/static/logo.png"|g' \
-e 's|src="[^"]*splash-dark[^"]*"|src="/static/logo.png"|g' \
-e 's|src="[^"]*favicon-dark[^"]*"|src="/static/logo.png"|g' \
"$file" 2>/dev/null || true
fi
done
fi
echo "5. Исправление API endpoint для изображения профиля модели..."
# Ищем и заменяем API endpoint для изображения профиля модели
API_FILES=$(docker exec "${CONTAINER_NAME}" find /app -type f \
\( -name "*.html" -o -name "*.svelte" -o -name "*.js" -o -name "*.ts" -o -name "*.py" \) \
! -path "*/node_modules/*" ! -path "*/.next/*" \
! -path "*/oauth*" ! -path "*/oidc*" ! -path "*authentik*" ! -path "*openid*" \
-exec grep -l "model/profile/image\|models.*profile.*image" {} \; 2>/dev/null)
if [ -n "$API_FILES" ]; then
echo "$API_FILES" | while read file; do
if [ -n "$file" ]; then
echo " Исправление API endpoint в: $file"
# Заменяем API endpoint на статический логотип
docker exec "${CONTAINER_NAME}" sed -i 's|/api/v1/models/model/profile/image|/static/logo.png|g' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i 's|api/v1/models/model/profile/image|static/logo.png|g' "$file" 2>/dev/null || true
fi
done
fi
# Также ищем в Python коде, который генерирует этот endpoint
PYTHON_API=$(docker exec "${CONTAINER_NAME}" find /app/backend -type f -name "*.py" \
! -path "*/oauth*" ! -path "*/oidc*" ! -path "*authentik*" ! -path "*openid*" \
-exec grep -l "profile.*image\|model.*profile\|def.*profile" {} \; 2>/dev/null)
if [ -n "$PYTHON_API" ]; then
echo "$PYTHON_API" | while read file; do
if [ -n "$file" ]; then
# Ищем функции, которые возвращают изображение профиля и заменяем на статический логотип
echo " Проверка Python API в: $file"
# Это нужно делать более аккуратно - просто заменим возвращаемый путь
docker exec "${CONTAINER_NAME}" sed -i 's|/static/favicon.png|/static/logo.png|g' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i 's|favicon.png|logo.png|g' "$file" 2>/dev/null || true
fi
done
fi
echo "6. Удаление проверки обновлений и ссылок на GitHub (только Svelte файлы)..."
# Ищем ТОЛЬКО в исходных Svelte файлах - не трогаем скомпилированные JS
UPDATE_FILES=$(docker exec "${CONTAINER_NAME}" find /app/web -type f -name "*.svelte" \
! -path "*/node_modules/*" ! -path "*/.next/*" \
-exec grep -lE "Проверить обновления|Check for updates|github.com/open-webui/releases|последняя|latest" {} \; 2>/dev/null)
if [ -z "$UPDATE_FILES" ]; then
echo " Файлов с проверкой обновлений не найдено"
else
COUNT=$(echo "$UPDATE_FILES" | wc -l)
echo " Найдено Svelte файлов: $COUNT"
echo "$UPDATE_FILES" | while read file; do
if [ -n "$file" ]; then
echo " Удаление проверки обновлений из: $file"
# Удаляем кнопку "Проверить обновления"
docker exec "${CONTAINER_NAME}" sed -i '/Проверить обновления/d' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i '/Check for updates/d' "$file" 2>/dev/null || true
# Удаляем ссылку на GitHub releases с текстом "(последняя)"
docker exec "${CONTAINER_NAME}" sed -i 's|<a[^>]*href="https://github.com/open-webui/open-webui/releases/tag/[^"]*"[^>]*>(последняя)</a>||g' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i 's|(последняя)||g' "$file" 2>/dev/null || true
# Удаляем "Посмотреть, что нового"
docker exec "${CONTAINER_NAME}" sed -i '/Посмотреть, что нового/d' "$file" 2>/dev/null || true
fi
done
fi
echo "7. Удаление социальных сетей, GitHub и блока 'Помощь' (только Svelte файлы)..."
# Ищем ТОЛЬКО в исходных Svelte файлах
SOCIAL_FILES=$(docker exec "${CONTAINER_NAME}" find /app/web -type f -name "*.svelte" \
! -path "*/node_modules/*" ! -path "*/.next/*" \
-exec grep -lE "discord|twitter|x\.com|Github Repo|github.com/open-webui|Помощь|Help|обратитесь за поддержкой" {} \; 2>/dev/null)
if [ -z "$SOCIAL_FILES" ]; then
echo " Файлов с соцсетями не найдено"
else
COUNT=$(echo "$SOCIAL_FILES" | wc -l)
echo " Найдено Svelte файлов: $COUNT"
echo "$SOCIAL_FILES" | while read file; do
if [ -n "$file" ]; then
echo " Удаление соцсетей из: $file"
# Удаляем ссылки на Discord
docker exec "${CONTAINER_NAME}" sed -i 's|<a[^>]*href="https://discord.gg/[^"]*"[^>]*>.*</a>||g' "$file" 2>/dev/null || true
# Удаляем ссылки на Twitter/X
docker exec "${CONTAINER_NAME}" sed -i 's|<a[^>]*href="https://twitter.com/[^"]*"[^>]*>.*</a>||g' "$file" 2>/dev/null || true
# Удаляем ссылки на GitHub repo
docker exec "${CONTAINER_NAME}" sed -i 's|<a[^>]*href="https://github.com/open-webui/open-webui"[^>]*>.*</a>||g' "$file" 2>/dev/null || true
# Удаляем badges (img.shields.io)
docker exec "${CONTAINER_NAME}" sed -i 's|<img[^>]*shields.io[^>]*>||g' "$file" 2>/dev/null || true
# Удаляем текст блока "Помощь"
docker exec "${CONTAINER_NAME}" sed -i '/Узнайте, как использовать/d' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i '/обратитесь за поддержкой/d' "$file" 2>/dev/null || true
fi
done
fi
echo "8. Удаление блока 'Лицензия' полностью (только Svelte файлы)..."
# Ищем ТОЛЬКО в исходных Svelte файлах
LICENSE_FILES=$(docker exec "${CONTAINER_NAME}" find /app/web -type f -name "*.svelte" \
! -path "*/node_modules/*" ! -path "*/.next/*" \
-exec grep -lE "Лицензия|License|лицензионный тарифный план|Перейдите на лицензионный" {} \; 2>/dev/null)
if [ -z "$LICENSE_FILES" ]; then
echo " Файлов с лицензией не найдено"
else
COUNT=$(echo "$LICENSE_FILES" | wc -l)
echo " Найдено Svelte файлов: $COUNT"
echo "$LICENSE_FILES" | while read file; do
if [ -n "$file" ]; then
echo " Удаление блока лицензии из: $file"
# Удаляем только текст блока лицензии
docker exec "${CONTAINER_NAME}" sed -i '/Перейдите на лицензионный/d' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i '/расширенные возможности/d' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i '/настраиваемую тематику/d' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i '/фирменный стиль/d' "$file" 2>/dev/null || true
docker exec "${CONTAINER_NAME}" sed -i '/специальную поддержку/d' "$file" 2>/dev/null || true
fi
done
fi
echo "9. Добавление надписи 'Основано на Open WebUI' внизу настроек..."
# Ищем файлы настроек для добавления надписи
# Это сложнее сделать автоматически, поэтому просто отмечаем файлы
SETTINGS_FILES=$(docker exec "${CONTAINER_NAME}" find /app/web -type f -name "*.svelte" \
! -path "*/node_modules/*" ! -path "*/.next/*" \
-exec grep -l "Settings\|Настройки\|General\|Общее" {} \; 2>/dev/null | head -3)
if [ -n "$SETTINGS_FILES" ]; then
echo " Найдены файлы настроек (надпись нужно добавить вручную):"
echo "$SETTINGS_FILES" | while read file; do
if [ -n "$file" ]; then
echo " - $file"
fi
done
echo ""
echo " Добавьте в конец блока настроек перед закрывающим тегом:"
echo " <div class='text-xs text-gray-400 dark:text-gray-500 mt-4 text-center'>"
echo " Основано на <span class='text-gray-500'>Open WebUI</span>"
echo " </div>"
fi
echo ""
echo "10. Перезапуск контейнера..."
docker restart "${CONTAINER_NAME}" >/dev/null 2>&1 || {
echo "Предупреждение: Перезапустите вручную: docker restart ${CONTAINER_NAME}"
}
echo ""
echo "=== БЕЗОПАСНЫЙ ребрендинг завершен! ==="
echo ""
echo "Проверьте:"
echo " 1. Откройте https://odo.iieasy.ru"
echo " 2. splash.png должен быть заменен на ваш логотип"
echo " 3. Проверка обновлений и ссылки на GitHub должны быть удалены"
echo " 4. Социальные сети и блок лицензии должны быть удалены"
echo " 5. Очистите кеш браузера (Ctrl+Shift+Delete)"
echo ""
echo "Примечание: Надпись 'Основано на Open WebUI' нужно добавить вручную"
echo "в файлах настроек (см. вывод выше) или через Admin Panel"