186 lines
8.6 KiB
Bash
186 lines
8.6 KiB
Bash
|
|
#!/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 "⚠ Удаляет только конкретные HTML блоки, не трогает код"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
|
|||
|
|
echo "Ошибка: Контейнер ${CONTAINER_NAME} не запущен."
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "1. Замена логотипов..."
|
|||
|
|
|
|||
|
|
STATIC_DIRS=(
|
|||
|
|
"/app/web/build/_app/immutable"
|
|||
|
|
"/app/web/static"
|
|||
|
|
"/app/web/build"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
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
|
|||
|
|
fi
|
|||
|
|
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
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
# Заменяем существующие файлы
|
|||
|
|
EXISTING_SPLASH=$(docker exec "${CONTAINER_NAME}" find /app -type f -name "splash.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
|
|||
|
|
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${splash_file}" 2>/dev/null || true
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
EXISTING_FAVICONS=$(docker exec "${CONTAINER_NAME}" find /app -type f -name "favicon.png" 2>/dev/null)
|
|||
|
|
if [ -f "$MEDIA_DIR/logo.png" ]; then
|
|||
|
|
echo "$EXISTING_FAVICONS" | while read -r favicon_file; do
|
|||
|
|
if [ -n "$favicon_file" ] && [[ ! "$favicon_file" == *"node_modules"* ]]; then
|
|||
|
|
docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${favicon_file}" 2>/dev/null || true
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "2. Удаление '(Open WebUI)' из HTML/Svelte..."
|
|||
|
|
|
|||
|
|
FILES=$(docker exec "${CONTAINER_NAME}" find /app/web -type f \
|
|||
|
|
\( -name "*.html" -o -name "*.svelte" \) \
|
|||
|
|
! -path "*/node_modules/*" ! -path "*/.next/*" \
|
|||
|
|
-exec grep -lE "(Open WebUI)|\(Open WebUI\)" {} \; 2>/dev/null)
|
|||
|
|
|
|||
|
|
if [ -n "$FILES" ]; then
|
|||
|
|
echo "$FILES" | while read file; do
|
|||
|
|
if [ -n "$file" ]; then
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i \
|
|||
|
|
-e 's/(Open WebUI)//g' \
|
|||
|
|
-e 's/\(Open WebUI\)//g' \
|
|||
|
|
-e 's/ (Open WebUI)//g' \
|
|||
|
|
-e 's/Войти в iiEasyWeb (Open WebUI)/Войти в iiEasyWeb/g' \
|
|||
|
|
"$file" 2>/dev/null || true
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "3. Замена ссылок на документацию..."
|
|||
|
|
|
|||
|
|
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" {} \; 2>/dev/null)
|
|||
|
|
|
|||
|
|
if [ -n "$DOC_FILES" ]; then
|
|||
|
|
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|docs\.openwebui\.com|note.iieasy.ru|g' \
|
|||
|
|
"$file" 2>/dev/null || true
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "4. Исправление favicon.png на logo.png..."
|
|||
|
|
|
|||
|
|
TEMPLATE_FILES=$(docker exec "${CONTAINER_NAME}" find /app/web -type f \
|
|||
|
|
\( -name "*.html" -o -name "*.svelte" \) \
|
|||
|
|
! -path "*/node_modules/*" ! -path "*/.next/*" \
|
|||
|
|
-exec grep -l "/static/favicon.png" {} \; 2>/dev/null)
|
|||
|
|
|
|||
|
|
if [ -n "$TEMPLATE_FILES" ]; then
|
|||
|
|
echo "$TEMPLATE_FILES" | while read file; do
|
|||
|
|
if [ -n "$file" ]; then
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i 's|/static/favicon.png|/static/logo.png|g' "$file" 2>/dev/null || true
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo "5. Исправление API endpoint для изображения профиля модели..."
|
|||
|
|
|
|||
|
|
API_FILES=$(docker exec "${CONTAINER_NAME}" find /app/web -type f \
|
|||
|
|
\( -name "*.html" -o -name "*.svelte" \) \
|
|||
|
|
! -path "*/node_modules/*" ! -path "*/.next/*" \
|
|||
|
|
-exec grep -l "model/profile/image" {} \; 2>/dev/null)
|
|||
|
|
|
|||
|
|
if [ -n "$API_FILES" ]; then
|
|||
|
|
echo "$API_FILES" | while read file; do
|
|||
|
|
if [ -n "$file" ]; then
|
|||
|
|
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
|
|||
|
|
|
|||
|
|
echo "6. Удаление конкретных HTML блоков (безопасно)..."
|
|||
|
|
|
|||
|
|
# Ищем только Svelte файлы настроек
|
|||
|
|
SETTINGS_FILES=$(docker exec "${CONTAINER_NAME}" find /app/web -type f -name "*.svelte" \
|
|||
|
|
! -path "*/node_modules/*" ! -path "*/.next/*" \
|
|||
|
|
-exec grep -l "Проверить обновления\|Помощь\|Лицензия\|Version\|Help\|License" {} \; 2>/dev/null)
|
|||
|
|
|
|||
|
|
if [ -n "$SETTINGS_FILES" ]; then
|
|||
|
|
echo "$SETTINGS_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
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i 's|<a[^>]*github.com/open-webui/releases[^>]*>.*последняя.*</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
|
|||
|
|
|
|||
|
|
# Удаляем весь блок "Помощь" - ищем по заголовку и удаляем до следующего блока
|
|||
|
|
# Более безопасно - удаляем только содержимое блока
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/Узнайте, как использовать/d' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i '/обратитесь за поддержкой/d' "$file" 2>/dev/null || true
|
|||
|
|
|
|||
|
|
# Удаляем badges соцсетей - ищем по shields.io
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i 's|<a[^>]*discord.gg[^>]*>.*</a>||g' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i 's|<a[^>]*twitter.com[^>]*>.*</a>||g' "$file" 2>/dev/null || true
|
|||
|
|
docker exec "${CONTAINER_NAME}" sed -i 's|<a[^>]*github.com/open-webui[^>]*>.*</a>||g' "$file" 2>/dev/null || true
|
|||
|
|
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 ""
|
|||
|
|
echo "7. Перезапуск контейнера..."
|
|||
|
|
|
|||
|
|
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. Очистите кеш браузера (Ctrl+Shift+Delete)"
|
|||
|
|
echo ""
|
|||
|
|
echo "Примечание: Если блоки все еще видны, они могут быть в скомпилированных JS файлах."
|
|||
|
|
echo "В этом случае нужно найти исходные Svelte файлы и удалить блоки там."
|