Очистка проекта от устаревшей документации и исправление логики миграции базы данных

Удалены устаревшие файлы документации (CHANGES.md, COMMANDS.md, DEBUG.md, OFFLINE_FIX.md, QUICK_START.md, README_RU.md), конфигурационные файлы .cursor и скрипты установки/запуска (install.sh, start.sh). Исправлена логика миграции в backend/server.js: теперь is_public_profile обновляется только для пользователей с NULL значением, а не для всех пользователей с 0, что предотвращает нежелательное изменение явно установленных значений.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Fovway 2025-11-14 21:32:18 +07:00
parent 3346fae87d
commit 12c0870c8f
14 changed files with 159 additions and 986 deletions

View File

@ -1,5 +0,0 @@
---
alwaysApply: true
---
не забывай использовать MCP сервера

View File

@ -1,5 +0,0 @@
---
alwaysApply: true
---
Never try to start the server yourself. If it is required, then ask me to do it!

View File

@ -1,5 +0,0 @@
{
"setup-worktree": [
"npm install"
]
}

View File

@ -1,157 +0,0 @@
# Список изменений - NoteJS React
## Структура проекта
Проект реорганизован для независимой работы фронтенда и бэкенда:
### ✅ Backend (Node.js + Express)
**Расположение:** `backend/`
**Что сделано:**
- ✅ Скопирован `server.js` из корня проекта
- ✅ Скопированы `package.json` и `package-lock.json`
- ✅ Изменён порт с `3000` на `3001` (чтобы не конфликтовать со старым приложением)
- ✅ Установлены все зависимости (`npm install`)
- ✅ Созданы папки:
- `database/` - для SQLite баз данных
- `public/uploads/` - для загруженных файлов
- ✅ Создан `.gitignore` для исключения ненужных файлов
- ✅ Создан `README.md` с инструкциями
**Запуск:**
```bash
cd backend
npm start
```
**Адрес:** http://localhost:3001
---
### ✅ Frontend (React + TypeScript)
**Расположение:** `src/`
**Что сделано:**
- ✅ Обновлён `vite.config.ts`:
- Порт изменён на `5173` (стандартный для Vite)
- Настроен proxy для API запросов к бэкенду (`http://localhost:3001`)
- Добавлены proxy правила для `/api`, `/uploads`, `/logout`
- ✅ Обновлён `package.json`:
- Добавлен скрипт `server` для запуска бэкенда
- Добавлен скрипт `dev:all` для одновременного запуска фронтенда и бэкенда
- Добавлен скрипт `start` как алиас для `dev:all`
- Установлен пакет `concurrently` для параллельного запуска
**Запуск только фронтенда:**
```bash
npm run dev
```
**Адрес:** http://localhost:5173
---
## 🚀 Запуск всего приложения
### Вариант 1: Одна команда (рекомендуется)
```bash
npm start
```
Это запустит фронтенд и бэкенд одновременно.
### Вариант 2: Раздельный запуск
**Терминал 1 (Backend):**
```bash
cd backend
npm start
```
**Терминал 2 (Frontend):**
```bash
npm run dev
```
---
## 📋 Установка зависимостей
### Первый раз:
```bash
# Фронтенд
npm install
# Бэкенд
cd backend
npm install
cd ..
```
---
## 🔧 Конфигурация
### Backend (.env)
Создайте файл `backend/.env`:
```env
PORT=3001
SESSION_SECRET=your-secret-key-here
NODE_ENV=development
ENCRYPTION_KEY=your-encryption-key-min-32-chars
```
**Важно:** `ENCRYPTION_KEY` используется для шифрования заметок в базе данных. Используйте надежный случайный ключ минимум 32 символа!
---
## 📍 Порты
- **Frontend (dev):** http://localhost:5173
- **Backend (новый):** http://localhost:3001
- **Старое приложение:** http://localhost:3000 (если запущено)
---
## ✨ Преимущества новой структуры
1. **Независимость:** Фронтенд и бэкенд могут разрабатываться и деплоиться независимо
2. **Современный стек:** Vite для быстрой разработки фронтенда
3. **Hot Reload:** Автоматическая перезагрузка при изменениях
4. **TypeScript:** Типизация на фронтенде
5. **Proxy:** Нет проблем с CORS в разработке
6. **Раздельные зависимости:** Чистое разделение фронтенд/бэкенд зависимостей
---
## 📖 Документация
- [QUICK_START.md](QUICK_START.md) - Быстрый старт
- [README_RU.md](README_RU.md) - Полная документация на русском
- [backend/README.md](backend/README.md) - Документация бэкенда
- [DEBUG.md](DEBUG.md) - Отладка и решение проблем
---
## 🔄 Совместимость со старым приложением
Старое приложение (порт 3000) и новое (порты 5173 + 3001) могут работать одновременно.
**База данных:** Оба приложения используют разные базы данных:
- Старое: `/database/notes.db`
- Новое: `/backend/database/notes.db`
Если нужно использовать общую базу, можно скопировать файлы из `/database/` в `/backend/database/`.

View File

@ -1,192 +0,0 @@
# Команды NoteJS React
## 🔧 Установка
```bash
# Автоматическая установка всех зависимостей
./install.sh
# Или вручную:
npm install # Фронтенд
cd backend && npm install # Бэкенд
```
## 🚀 Запуск
```bash
# Запуск всего приложения (рекомендуется)
./start.sh
# или
npm start
# или
npm run dev:all
# Только фронтенд
npm run dev
# Только бэкенд
npm run server
# или
cd backend && npm start
```
## 🏗️ Сборка
```bash
# Production сборка
npm run build
# Предпросмотр production сборки
npm run preview
```
## 🧹 Разработка
```bash
# Проверка кода (линтинг)
npm run lint
```
## 📂 Структура команд
### Package.json (корень)
- `npm run dev` - Запуск Vite dev сервера (фронтенд)
- `npm run build` - Сборка production версии
- `npm run preview` - Предпросмотр production сборки
- `npm run lint` - Проверка кода
- `npm run server` - Запуск бэкенда
- `npm run dev:all` - Запуск фронтенда и бэкенда одновременно
- `npm start` - Алиас для `dev:all`
### Backend/package.json
- `npm start` - Запуск сервера
- `npm run dev` - Запуск с nodemon (auto-reload)
## 🌐 Адреса
После запуска приложение доступно по адресам:
- **Frontend (dev):** http://localhost:5173
- **Backend API:** http://localhost:3001
- **Старая версия:** http://localhost:3000 (если запущена)
## 🔑 Переменные окружения
### Backend (.env)
Создайте файл `backend/.env`:
```env
PORT=3001
SESSION_SECRET=ваш-секретный-ключ
NODE_ENV=development
```
## 📝 Примеры использования
### Первый запуск
```bash
# 1. Клонирование репозитория
git clone <repo-url>
cd notejs-react
# 2. Установка зависимостей
./install.sh
# 3. Настройка бэкенда (создать .env)
nano backend/.env
# 4. Запуск
./start.sh
```
### Разработка
```bash
# Терминал 1: Backend с auto-reload
cd backend
npm run dev
# Терминал 2: Frontend с hot-reload
npm run dev
```
### Production
```bash
# 1. Сборка фронтенда
npm run build
# 2. Запуск бэкенда
cd backend
NODE_ENV=production npm start
```
## 🐛 Отладка
```bash
# Проверка портов
lsof -i :3001 # Backend
lsof -i :5173 # Frontend
# Логи бэкенда
cd backend
npm start
# Логи фронтенда
npm run dev
```
## 🔄 Работа с базой данных
```bash
# Просмотр базы данных (SQLite)
sqlite3 backend/database/notes.db
# Создание резервной копии
cp backend/database/notes.db backend/database/notes.db.backup
# Восстановление
cp backend/database/notes.db.backup backend/database/notes.db
```
## 📦 Обновление зависимостей
```bash
# Проверка устаревших пакетов (фронтенд)
npm outdated
# Обновление (фронтенд)
npm update
# Проверка устаревших пакетов (бэкенд)
cd backend
npm outdated
npm update
```
## 🧪 Тестирование
```bash
# В будущем здесь будут команды для тестов
# npm test
```
## 📋 Git
```bash
# Статус
git status
# Добавить изменения
git add .
# Коммит
git commit -m "Описание изменений"
# Отправка
git push
```

View File

@ -1,70 +0,0 @@
# Инструкция по отладке подключения к backend
## Проблема: "Ошибка соединения с сервером"
### Шаг 1: Проверьте, запущен ли backend сервер
```bash
# В корне проекта NoteJS
cd /home/fovway/git/NoteJS
npm start
# или
node server.js
```
Backend должен быть запущен на порту 3000. Проверьте:
- В консоли должно быть: "Сервер запущен на порту 3000"
- В браузере: http://localhost:3000 должен открываться
### Шаг 2: Проверьте консоль браузера
Откройте DevTools (F12) и посмотрите в консоль:
- Если видите "API Request: POST /api/login" - запрос отправляется
- Если видите "Network error - server might be down or proxy not working" - backend не отвечает
- Если видите ошибку CORS - проблема с настройками сервера
### Шаг 3: Проверьте прокси Vite
Vite dev server (порт 3001) должен проксировать запросы на `/api` на `http://localhost:3000`.
Убедитесь что в `vite.config.ts`:
```typescript
proxy: {
"/api": {
target: "http://localhost:3000",
changeOrigin: true,
secure: false,
ws: true,
},
}
```
### Шаг 4: Проверьте сетевые запросы
В DevTools > Network:
- Запрос должен быть на `http://localhost:3001/api/login` (не 3000!)
- Статус должен быть 200 или 400/401 (не ошибка сети)
### Шаг 5: Проверьте сессии
Backend использует cookies для сессий. Убедитесь что:
- `withCredentials: true` в axios клиенте
- Backend настроен для работы с cookies
### Типичные ошибки:
1. **"Сервер не отвечает"** - backend не запущен
2. **CORS ошибка** - проверьте настройки CORS в server.js
3. **404 Not Found** - неправильный URL или прокси не работает
4. **Network Error** - backend не доступен или прокси не настроен
### Быстрое решение:
1. Убедитесь что backend запущен: `cd /home/fovway/git/NoteJS && npm start`
2. Перезапустите Vite dev server: `cd notejs-react && npm run dev`
3. Откройте браузер и проверьте консоль для деталей ошибки

View File

@ -1,131 +0,0 @@
# Исправление проблемы с оффлайн режимом
## Проблема
При обновлении страницы в оффлайн режиме попеременно показывается сообщение "нет подключения к интернету" и нормальное отображение приложения.
## Причина
Service Worker использовал стратегию, которая пыталась обратиться к сети перед использованием кэша, что приводило к показу страницы ошибки браузера при отсутствии подключения.
## Решение
Внесены изменения в `vite.config.ts` для обеспечения стабильной работы в оффлайн режиме:
### 1. Стратегия CacheFirst для навигационных запросов
Теперь при обновлении страницы Service Worker **сразу** загружает кэшированную версию без попыток обращения к сети:
```typescript
{
urlPattern: ({ request }) => request.mode === 'navigate',
handler: "CacheFirst",
options: {
cacheName: "pages-cache",
expiration: {
maxEntries: 10,
maxAgeSeconds: 7 * 24 * 60 * 60, // 7 days
},
cacheableResponse: {
statuses: [0, 200],
},
},
}
```
### 2. Дополнительное кэширование HTML файлов
Добавлено специальное правило для всех HTML файлов:
```typescript
{
urlPattern: /\.html$/,
handler: "CacheFirst",
options: {
cacheName: "html-cache",
expiration: {
maxEntries: 10,
maxAgeSeconds: 7 * 24 * 60 * 60,
},
cacheableResponse: {
statuses: [0, 200],
},
},
}
```
### 3. Автоматическое обновление Service Worker
Изменен тип регистрации с `"prompt"` на `"autoUpdate"` для обеспечения автоматического обновления SW без запроса пользователя:
```typescript
registerType: "autoUpdate"
```
### 4. Отключение Navigation Preload
Добавлена настройка `navigationPreload: false` для предотвращения попыток загрузки из сети при навигации.
## Как применить изменения
### 1. Пересборка проекта
```bash
npm run build
```
### 2. Копирование файлов на сервер
После успешной сборки скопируйте содержимое папки `dist/` в `backend/public/`:
```bash
# Windows PowerShell
Remove-Item -Recurse -Force backend/public/*
Copy-Item -Recurse dist/* backend/public/
# Linux/Mac
rm -rf backend/public/*
cp -r dist/* backend/public/
```
### 3. Запуск сервера
Запустите сервер (или попросите это сделать):
```bash
cd backend
npm start
```
### 4. Проверка работы
1. Откройте приложение в браузере
2. Дождитесь полной загрузки приложения
3. Откройте DevTools → Application → Service Workers
4. Убедитесь, что новый Service Worker активирован
5. Переключите браузер в оффлайн режим (DevTools → Network → Offline)
6. Обновите страницу несколько раз - приложение должно загружаться из кэша каждый раз
### 5. Очистка старого кэша (если необходимо)
Если проблема все еще возникает, попробуйте:
1. DevTools → Application → Clear storage → Clear site data
2. Закройте и откройте браузер заново
3. Перейдите на сайт снова - новый SW установится и закэширует все ресурсы
4. Проверьте работу в оффлайн режиме
## Технические детали
### Стратегии кэширования
**CacheFirst (Cache First, Network Fallback)**
- Сначала проверяется кэш
- Если ресурс найден в кэше, он возвращается немедленно
- Если ресурса нет в кэше, делается запрос к сети
- Идеально для статических ресурсов и оффлайн работы
**NetworkFirst** (используется для API)
- Сначала пытается загрузить из сети
- Если сеть недоступна или таймаут, возвращается кэшированная версия
- Идеально для данных, которые должны быть актуальными
### Настройки Service Worker
- `skipWaiting: true` - новый SW активируется немедленно
- `clientsClaim: true` - новый SW берет контроль над всеми открытыми страницами
- `cleanupOutdatedCaches: true` - автоматическая очистка устаревших кэшей
## Ожидаемый результат
После применения изменений приложение будет:
- ✅ Всегда загружаться из кэша в оффлайн режиме
- ✅ Не показывать страницу "нет подключения к интернету"
- ✅ Работать стабильно при любом количестве обновлений страницы
- ✅ Автоматически обновлять Service Worker без запроса пользователя

View File

@ -1,144 +0,0 @@
# Быстрый старт NoteJS React
## 🚀 Первый запуск
### 1. Установка всех зависимостей
```bash
# Установка зависимостей фронтенда
npm install
# Установка зависимостей бэкенда
cd backend && npm install && cd ..
```
### 2. Запуск приложения
```bash
# Запуск фронтенда и бэкенда одновременно
npm start
```
Приложение будет доступно по адресу: **http://localhost:5173**
⚠️ **ВАЖНО:** Открывайте именно **http://localhost:5173** (Frontend), а НЕ http://localhost:3001 (Backend API)
## 🏗️ Архитектура
Приложение разделено на два независимых сервера:
1. **Frontend (React + Vite)** - порт 5173
- Отображает интерфейс пользователя
- Обрабатывает роутинг
- Проксирует API запросы к бэкенду
2. **Backend (Node.js + Express)** - порт 3001
- Предоставляет REST API
- Работает с базой данных
- Обрабатывает аутентификацию
- Хранит файлы и изображения
**Как это работает:**
- Вы открываете http://localhost:5173
- Frontend отображает интерфейс
- При запросе данных Frontend обращается к Backend API
- Backend обрабатывает запрос и возвращает данные
## 📋 Полезные команды
### Запуск
```bash
# Запуск всего приложения (фронтенд + бэкенд)
npm start
# или
npm run dev:all
# Запуск только фронтенда
npm run dev
# Запуск только бэкенда
npm run server
# или
cd backend && npm start
```
### Сборка
```bash
# Production сборка фронтенда
npm run build
# Предпросмотр production сборки
npm run preview
```
### Разработка
```bash
# Проверка кода (линтинг)
npm run lint
```
## 🔧 Первоначальная настройка
### 1. Настройка бэкенда
Создайте файл `backend/.env`:
```env
PORT=3001
SESSION_SECRET=замените-на-свой-секретный-ключ
NODE_ENV=development
ENCRYPTION_KEY=замените-на-свой-ключ-минимум-32-символа
```
**Важно:** `ENCRYPTION_KEY` используется для шифрования заметок в базе данных. Используйте надежный случайный ключ минимум 32 символа!
### 2. Первый пользователь
1. Откройте http://localhost:5173
2. Перейдите на страницу регистрации
3. Создайте учетную запись
### 3. Настройка AI (опционально)
1. Войдите в приложение
2. Перейдите в "Настройки"
3. Вкладка "AI настройки"
4. Введите:
- API ключ
- Base URL (например: `https://api.openai.com/v1/`)
- Модель (например: `gpt-3.5-turbo`)
5. Включите "Включить AI функционал"
## 📍 Адреса
- **Фронтенд (dev)**: http://localhost:5173
- **Бэкенд API**: http://localhost:3001
- **Старая версия**: http://localhost:3000 (если запущена)
## ❓ Проблемы
### Порт уже занят
Если порт 3001 или 5173 занят:
1. Измените порт в `backend/.env` (для бэкенда)
2. Измените порт в `vite.config.ts` (для фронтенда)
### База данных не создается
Проверьте, что папка `backend/database/` существует и доступна для записи.
### Не загружаются файлы
Проверьте, что папка `backend/public/uploads/` существует и доступна для записи.
## 📖 Документация
Полная документация в файле [README_RU.md](README_RU.md)
Backend документация: [backend/README.md](backend/README.md)

View File

@ -1,204 +0,0 @@
# NoteJS React - Приложение для заметок
Современное PWA приложение для ведения заметок с поддержкой Markdown, изображений, файлов и AI.
## Структура проекта
```
notejs-react/
├── backend/ # Backend сервер (Node.js + Express)
│ ├── database/ # SQLite базы данных
│ ├── public/ # Статические файлы и загрузки
│ ├── server.js # Основной файл сервера
│ └── package.json # Зависимости бэкенда
├── src/ # Frontend исходники (React + TypeScript)
│ ├── api/ # API клиенты
│ ├── components/ # React компоненты
│ ├── hooks/ # Кастомные хуки
│ ├── pages/ # Страницы приложения
│ ├── store/ # Redux store
│ ├── styles/ # CSS стили
│ ├── types/ # TypeScript типы
│ └── utils/ # Утилиты
├── public/ # Публичные файлы (иконки, манифест)
└── package.json # Зависимости фронтенда
```
## Установка
### 1. Установка зависимостей фронтенда
```bash
npm install
```
### 2. Установка зависимостей бэкенда
```bash
cd backend
npm install
cd ..
```
## Запуск
### Вариант 1: Запуск всего приложения (рекомендуется)
```bash
npm start
```
или
```bash
npm run dev:all
```
Это запустит:
- **Frontend** на `http://localhost:5173`
- **Backend** на `http://localhost:3001`
### Вариант 2: Раздельный запуск
**Frontend:**
```bash
npm run dev
```
**Backend (в отдельном терминале):**
```bash
npm run server
```
или
```bash
cd backend
npm start
```
## Функционал
### ✨ Основные возможности
- 📝 Создание и редактирование заметок с Markdown
- 🖼️ Загрузка изображений к заметкам
- 📎 Прикрепление файлов (PDF, DOC, XLS, ZIP и др.)
- 📌 Закрепление важных заметок
- 📦 Архивация заметок
- 🔍 Поиск по заметкам и тегам
- 📅 Календарь заметок
- 🏷️ Система тегов
- 🌓 Светлая/тёмная тема
- 🎨 Настройка цветовой схемы
- 👤 Профили пользователей с аватарами
### 🤖 AI функционал
- Улучшение текста заметок
- Исправление ошибок
- Генерация контента
- Настройка собственного OpenAI-совместимого API
### 📱 PWA
- Установка как приложение
- Работа офлайн (Service Worker)
- Push-уведомления (опционально)
- Адаптивный дизайн для всех устройств
### Markdown поддержка
- Заголовки (H1-H5)
- **Жирный** и _курсив_
- Списки (маркированные и нумерованные)
- ~~Зачеркнутый текст~~
- [Ссылки](https://example.com)
- `Код` и блоки кода
- Todo списки с чекбоксами
- ||Спойлеры||
- Внешние ссылки
## Технологии
### Frontend
- React 18
- TypeScript
- Redux Toolkit
- React Router
- Vite
- Axios
- Marked (Markdown)
- Iconify
### Backend
- Node.js
- Express
- SQLite3
- Bcrypt
- Multer
- Express Session
- Helmet
## Разработка
### Сборка production версии
```bash
npm run build
```
Собранные файлы будут в папке `dist/`.
### Проверка типов
```bash
npm run lint
```
## Конфигурация
### Backend (.env)
Создайте файл `backend/.env`:
```env
PORT=3001
SESSION_SECRET=your-secret-key-here
NODE_ENV=development
ENCRYPTION_KEY=your-encryption-key-min-32-chars
```
**Важно:**
- `ENCRYPTION_KEY` - ключ для шифрования заметок в базе данных (минимум 32 символа)
- В продакшене ОБЯЗАТЕЛЬНО используйте надежный случайный ключ
- Не используйте дефолтный ключ в продакшене!
### AI настройки
Настройки AI выполняются через интерфейс приложения в разделе "Настройки".
Требуется:
- OpenAI API Key (или ключ совместимого API)
- Base URL (например, `https://api.openai.com/v1/`)
- Модель (например, `gpt-3.5-turbo`)
## Порты
- **Frontend (dev)**: `http://localhost:5173`
- **Backend**: `http://localhost:3001`
- **Старое приложение**: `http://localhost:3000` (если запущено)
## Лицензия
ISC
## Автор
NoteJS Team

View File

@ -625,18 +625,18 @@ function runMigrations() {
console.log(
"Колонка is_public_profile добавлена в таблицу users"
);
// Устанавливаем is_public_profile = 1 для всех существующих пользователей
// Только для NULL значений устанавливаем DEFAULT (1)
db.run(
"UPDATE users SET is_public_profile = 1 WHERE is_public_profile IS NULL OR is_public_profile = 0",
"UPDATE users SET is_public_profile = 1 WHERE is_public_profile IS NULL",
(updateErr) => {
if (updateErr) {
console.error(
"Ошибка обновления is_public_profile для существующих пользователей:",
"Ошибка обновления is_public_profile для пользователей с NULL:",
updateErr.message
);
} else {
console.log(
"is_public_profile установлен в 1 для всех существующих пользователей"
"is_public_profile установлен в 1 для пользователей с NULL"
);
}
}
@ -644,23 +644,6 @@ function runMigrations() {
}
}
);
} else {
// Если колонка уже существует, обновляем существующих пользователей с NULL или 0
db.run(
"UPDATE users SET is_public_profile = 1 WHERE is_public_profile IS NULL OR is_public_profile = 0",
(updateErr) => {
if (updateErr) {
console.error(
"Ошибка обновления is_public_profile для существующих пользователей:",
updateErr.message
);
} else {
console.log(
"is_public_profile установлен в 1 для всех существующих пользователей"
);
}
}
);
}
});

View File

@ -82,7 +82,7 @@ define(['./workbox-47da91e0'], (function (workbox) { 'use strict';
"revision": "3ca0b8505b4bec776b69afdba2768812"
}, {
"url": "/index.html",
"revision": "0.rkgg11egm7o"
"revision": "0.unrihnsl5to"
}], {
"ignoreURLParametersMatching": [/^utm_/, /^fbclid$/]
});

View File

@ -1,36 +0,0 @@
#!/bin/bash
# Скрипт для установки всех зависимостей NoteJS React
echo "📦 Установка зависимостей NoteJS React..."
echo ""
# Установка зависимостей фронтенда
echo "1⃣ Установка зависимостей фронтенда..."
npm install
if [ $? -ne 0 ]; then
echo "❌ Ошибка установки зависимостей фронтенда"
exit 1
fi
echo ""
echo "2⃣ Установка зависимостей бэкенда..."
cd backend
npm install
if [ $? -ne 0 ]; then
echo "❌ Ошибка установки зависимостей бэкенда"
exit 1
fi
cd ..
echo ""
echo "✅ Все зависимости успешно установлены!"
echo ""
echo "Для запуска приложения выполните:"
echo " npm start"
echo "или"
echo " ./start.sh"

154
review.md Normal file
View File

@ -0,0 +1,154 @@
● Проведено полное ревью кода вашего приложения. Вот краткое резюме найденных проблем:
🔴 КРИТИЧЕСКИЕ УЯЗВИМОСТИ БЕЗОПАСНОСТИ
1. Hardcoded Secrets в репозитории ⚠️ CRITICAL
Файл: backend/.env
- Ключ шифрования и секреты коммитятся в git
- Любой с доступом к репозиторию может расшифровать все заметки
- СРОЧНО: Удалите .env из истории git, ротируйте все секреты
2. Отключена CORS защита ⚠️ HIGH
Файл: backend/server.js
- CORS пакет установлен, но НЕ используется
- Приложение открыто для CSRF атак
- API доступен с любых доменов
3. Отключен Rate Limiting ⚠️ HIGH
Файл: backend/server.js:187-192
- Защита от брутфорса закомментирована
- Возможны DDoS атаки
- Перебор паролей неограничен
4. Отсутствует CSRF защита ⚠️ HIGH
- Все POST/PUT/DELETE эндпоинты уязвимы
- Используются сессии, но без CSRF токенов
5. Небезопасная конфигурация сессий ⚠️ HIGH
Файл: backend/server.js:221-236
cookie: {
secure: false, // ❌ куки передаются по HTTP
// ❌ нет httpOnly
// ❌ нет sameSite
}
🟡 СРЕДНИЕ УЯЗВИМОСТИ
6. Слабые требования к паролям
- Минимум только 6 символов
- Нет требований к сложности
- Рекомендация: минимум 12 символов + буквы/цифры/спецсимволы
7. Path Traversal в загрузке файлов
Файл: backend/server.js:1637-1641
- Недостаточная санитизация имен файлов
- Возможна запись в произвольные директории
8. Недостаточная валидация файлов
- Проверка только по MIME типу
- Возможна загрузка вредоносных файлов с подменой расширения
- Рекомендация: Magic byte validation
9. Нет валидации AI input
Файлы: server.js:3117, 3258, 3655
- Возможны prompt injection атаки
- Нет лимитов на длину текста
- Риск больших расходов на API
10. Слабая генерация backup кодов
Math.random().toString(36) // ❌ не криптографически безопасно
Используйте: crypto.randomBytes()
📊 ПРОБЛЕМЫ КАЧЕСТВА КОДА
11. Массовое дублирование кода
Файлы: NoteEditor.tsx vs NoteItem.tsx
- 500+ строк идентичного markdown кода
- При багфиксе нужно править 2 места
- Рекомендация: Вынести в useMarkdownEditor hook
12. Проблемы производительности
Файл: NoteEditor.tsx:820-870
- handleSelection вызывается на каждый mousemove
- Нет debounce/throttle
- Рекомендация: Добавить debounce 100ms
Файл: NotesList.tsx:167-183
- Сортировка массива на каждом рендере
- Рекомендация: Обернуть в useMemo
13. Злоупотребление TypeScript any
- 29 использований error: any
- any в types для sync queue
- Множество @ts-expect-error
- Рекомендация: Использовать unknown и type guards
14. Огромные компоненты
Файл: NoteEditor.tsx - 1,172 строки
- Нарушение Single Responsibility
- Рекомендация: Разбить на:
- Core editor
- useMarkdownEditor hook
- useFloatingToolbar hook
- useAIFeatures hook
15. Проблемы с accessibility
- Кнопки без aria-label
- Inputs без labels
- Нет focus management в модалках
- Icon-only кнопки без текстовых альтернатив
16. Отключенные ESLint правила
// eslint-disable-next-line react-hooks/exhaustive-deps
- Вместо исправления - отключение
- Пропущенные зависимости в useEffect
🎯 ПРИОРИТЕТЫ ИСПРАВЛЕНИЯ
⚠️ СРОЧНО (24 часа):
1. Удалить .env из git истории
2. Ротировать все секреты
3. Включить rate limiting
4. Настроить CORS
5. Исправить session cookies
🔴 Высокий (1 неделя):
1. Добавить CSRF защиту
2. Улучшить валидацию паролей
3. Исправить CSP конфигурацию
4. Добавить валидацию всех inputs
5. Исправить проблемы с TypeScript any
🟡 Средний (1 месяц):
1. Вынести дублированный код
2. Оптимизировать производительность
3. Разбить большие компоненты
4. Добавить unit тесты
5. Исправить accessibility
📈 Метрики качества:
- Безопасность: 4/10
- Качество кода: 6.5/10
- TypeScript: 5/10
- Производительность: 6/10
- Accessibility: 4/10

View File

@ -1,15 +0,0 @@
#!/bin/bash
# Скрипт для запуска NoteJS React приложения
echo "🚀 Запуск NoteJS React..."
echo ""
echo "Frontend: http://localhost:5173"
echo "Backend: http://localhost:3001"
echo ""
echo "Для остановки нажмите Ctrl+C"
echo ""
# Запускаем приложение
npm start