#!/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 "✓ Удаление ВСЕХ упоминаний '(Open WebUI)'" echo "✓ Замена ссылок на документацию на note.iieasy.ru" 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" "/app/backend/static" ) 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 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_LOGOS=$(docker exec "${CONTAINER_NAME}" find /app -type f \( -name "logo.png" -o -name "logo.svg" \) 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 docker cp "$MEDIA_DIR/logo.png" "${CONTAINER_NAME}:${logo_file}" 2>/dev/null || true fi done fi echo "2. АГРЕССИВНОЕ удаление '(Open WebUI)' из ВСЕХ файлов..." # Ищем ВО ВСЕХ файлах, включая бинарные (может быть в строковых константах) docker exec "${CONTAINER_NAME}" find /app -type f \ ! -path "*/node_modules/*" ! -path "*/.next/*" \ ! -path "*/oauth*" ! -path "*/oidc*" ! -path "*authentik*" ! -path "*openid*" \ ! -name "*.pyc" ! -name "*.pyo" ! -name "*.so" \ 2>/dev/null | while read file; do # Проверяем, это текстовый файл if docker exec "${CONTAINER_NAME}" file "$file" 2>/dev/null | grep -q "text\|JSON\|ASCII"; then if docker exec "${CONTAINER_NAME}" grep -qE "(Open WebUI)|\(Open WebUI\)|iiEasyWeb.*Open.*WebUI" "$file" 2>/dev/null; then echo " Удаление из: $file" # Все возможные варианты docker exec "${CONTAINER_NAME}" sed -i 's/(Open WebUI)//g' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i 's/\(Open WebUI\)//g' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i 's/ (Open WebUI)//g' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i 's/ \(Open WebUI\)//g' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i 's/iiEasyWeb (Open WebUI)/iiEasyWeb/g' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i 's/iiEasyWeb \(Open WebUI\)/iiEasyWeb/g' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i 's/iiEasyWeb(Open WebUI)/iiEasyWeb/g' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i "s/'(Open WebUI)'//g" "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i 's/"(Open WebUI)"//g' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i 's/`(Open WebUI)`//g' "$file" 2>/dev/null || true # Удаляем если в составе строки docker exec "${CONTAINER_NAME}" sed -i 's/Войти в iiEasyWeb (Open WebUI)/Войти в iiEasyWeb/g' "$file" 2>/dev/null || true fi fi done echo "3. Замена ссылок на документацию на note.iieasy.ru..." # Заменяем ссылки на документацию docker exec "${CONTAINER_NAME}" find /app -type f \ ! -path "*/node_modules/*" ! -path "*/.next/*" \ ! -path "*/oauth*" ! -path "*/oidc*" ! -path "*authentik*" ! -path "*openid*" \ 2>/dev/null | while read file; do if docker exec "${CONTAINER_NAME}" file "$file" 2>/dev/null | grep -q "text\|JSON\|ASCII"; then if docker exec "${CONTAINER_NAME}" grep -qE "docs\.openwebui\.com|open-webui\.com/docs|github\.com/open-webui/docs" "$file" 2>/dev/null; then echo " Замена ссылок на документацию в: $file" docker exec "${CONTAINER_NAME}" sed -i 's|https://docs.openwebui.com|https://note.iieasy.ru|g' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i 's|https://open-webui.com/docs|https://note.iieasy.ru|g' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i 's|https://github.com/open-webui/docs|https://note.iieasy.ru|g' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i 's|docs\.openwebui\.com|note.iieasy.ru|g' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i 's|open-webui\.com/docs|note.iieasy.ru|g' "$file" 2>/dev/null || true fi fi done echo "4. Замена 'Open WebUI' на 'iiEasyWeb' в тексте..." docker exec "${CONTAINER_NAME}" find /app/web -type f \ ! -path "*/node_modules/*" ! -path "*/.next/*" \ 2>/dev/null | while read file; do if docker exec "${CONTAINER_NAME}" file "$file" 2>/dev/null | grep -q "text\|JSON\|ASCII"; then if docker exec "${CONTAINER_NAME}" grep -q "Open WebUI" "$file" 2>/dev/null; then docker exec "${CONTAINER_NAME}" sed -i 's/Open WebUI/iiEasyWeb/g' "$file" 2>/dev/null || true fi fi done echo "5. Проверка базы данных..." # Пытаемся найти и исправить в базе данных DB_PATH="/app/backend/data/webui.db" if docker exec "${CONTAINER_NAME}" test -f "$DB_PATH" 2>/dev/null; then echo " Найдена база данных, проверяем..." if docker exec "${CONTAINER_NAME}" command -v sqlite3 >/dev/null 2>&1; then # Ищем таблицы с текстовыми полями TABLES=$(docker exec "${CONTAINER_NAME}" sqlite3 "$DB_PATH" "SELECT name FROM sqlite_master WHERE type='table';" 2>/dev/null) echo "$TABLES" | while read table; do if [ -n "$table" ]; then # Пытаемся найти и заменить в текстовых полях docker exec "${CONTAINER_NAME}" sqlite3 "$DB_PATH" "UPDATE $table SET value = REPLACE(value, '(Open WebUI)', '') WHERE value LIKE '%(Open WebUI)%';" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sqlite3 "$DB_PATH" "UPDATE $table SET value = REPLACE(value, 'Open WebUI', 'iiEasyWeb') WHERE value LIKE '%Open WebUI%';" 2>/dev/null || true fi done fi fi echo "6. Удаление социальных сетей, GitHub и лицензии из футера..." # Удаляем Discord docker exec "${CONTAINER_NAME}" find /app -type f \ ! -path "*/node_modules/*" ! -path "*/.next/*" \ ! -path "*/oauth*" ! -path "*/oidc*" ! -path "*authentik*" ! -path "*openid*" \ 2>/dev/null | while read file; do if docker exec "${CONTAINER_NAME}" file "$file" 2>/dev/null | grep -q "text\|JSON\|ASCII"; then if docker exec "${CONTAINER_NAME}" grep -qE "discord\.gg|discord\.com|Discord" "$file" 2>/dev/null; then docker exec "${CONTAINER_NAME}" sed -i '/discord\.gg/d' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i '/discord\.com/d' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i '/Discord/d' "$file" 2>/dev/null || true fi fi done # Удаляем Twitter/X docker exec "${CONTAINER_NAME}" find /app -type f \ ! -path "*/node_modules/*" ! -path "*/.next/*" \ ! -path "*/oauth*" ! -path "*/oidc*" ! -path "*authentik*" ! -path "*openid*" \ 2>/dev/null | while read file; do if docker exec "${CONTAINER_NAME}" file "$file" 2>/dev/null | grep -q "text\|JSON\|ASCII"; then if docker exec "${CONTAINER_NAME}" grep -qE "twitter\.com|x\.com|X \(formerly Twitter\)|Twitter|Follow" "$file" 2>/dev/null; then docker exec "${CONTAINER_NAME}" sed -i '/twitter\.com/d' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i '/x\.com/d' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i '/X (formerly Twitter)/d' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i '/Twitter/d' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i '/Follow/d' "$file" 2>/dev/null || true fi fi done # Удаляем GitHub Repo docker exec "${CONTAINER_NAME}" find /app -type f \ ! -path "*/node_modules/*" ! -path "*/.next/*" \ ! -path "*/oauth*" ! -path "*/oidc*" ! -path "*authentik*" ! -path "*openid*" \ 2>/dev/null | while read file; do if docker exec "${CONTAINER_NAME}" file "$file" 2>/dev/null | grep -q "text\|JSON\|ASCII"; then if docker exec "${CONTAINER_NAME}" grep -qE "Github Repo|GitHub Repo" "$file" 2>/dev/null; then docker exec "${CONTAINER_NAME}" sed -i '/Github Repo/d' "$file" 2>/dev/null || true docker exec "${CONTAINER_NAME}" sed -i '/GitHub Repo/d' "$file" 2>/dev/null || true fi fi done # Удаляем лицензию docker exec "${CONTAINER_NAME}" find /app -type f \ ! -path "*/node_modules/*" ! -path "*/.next/*" \ ! -path "*/oauth*" ! -path "*/oidc*" ! -path "*authentik*" ! -path "*openid*" \ 2>/dev/null | while read file; do if docker exec "${CONTAINER_NAME}" file "$file" 2>/dev/null | grep -q "text\|JSON\|ASCII"; then if docker exec "${CONTAINER_NAME}" grep -qE "лицензионный тарифный план|Перейдите на лицензионный|Лицензия" "$file" 2>/dev/null; then 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 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 fi done 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. Должно быть 'Войти в iiEasyWeb' (без '(Open WebUI)')" echo " 3. Ссылки на документацию должны вести на note.iieasy.ru" echo "" echo "ВАЖНО: Очистите кеш браузера (Ctrl+Shift+Delete)" echo "" echo "Если '(Open WebUI)' все еще видно, проверьте через Admin Panel:" echo " Settings → Appearance → Site Title"