Files
Aknaproff/DB_FIX_v4.1.7.md
Deploy Bot 64403d6fd6 v4.1.21: Реструктуризация проекта для Synology ARM
- Реструктуризация: src/ разбит на middleware/, utils/, repositories/ (удалены), routes/ (удалены)
- Добавлен src/original-html.ts — полный HTML с reportModal
- Добавлен src/index.tsx.backup — React-компонент с reportModal
- Миграции переименованы (0001_initial_schema.sql)
- Добавлена миграция 0018 (удалена позже)
- Docker: multi-stage build, wrangler.toml
- Frontend: public/static/app.js + style.css
- seed.sql добавлен
- Документация: CHANGELOG, CHANGES_v4.1.0-4.1.9, PROJECT_STRUCTURE
2026-01-14 18:37:00 +02:00

7.7 KiB
Raw Blame History

DB FIX v4.1.7 - Fix Login and Remove tootmine User

Дата: 2025-12-30
Версия: v4.1.7
Тип: Database Fix + Security Update


Проблема

  1. Login failed - все попытки логина возвращали ошибку
  2. Пользователь tootmine нужно удалить (дубликат kasutaja)

Анализ Проблемы

1. Несовпадение хэшей паролей

  • Бэкап БД: использовал bcrypt хэши ($2a$...)
  • Код приложения: использует SHA-256 хэши
  • Результат: verifyPassword() не могла проверить пароли

2. Отсутствие колонки deleted_at

  • Код: WHERE deleted_at IS NULL
  • БД: колонка deleted_at отсутствовала в таблице users
  • Результат: SQL ошибка → 500 Internal Server Error

Решение

1. Обновление паролей (SHA-256)

-- admin / demo123
UPDATE users SET password_hash = 'd3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791' 
WHERE username = 'admin';

-- aknaproff / demo123  
UPDATE users SET password_hash = 'd3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791'
WHERE username = 'aknaproff';

-- kasutaja / tootmine
UPDATE users SET password_hash = 'a1026b7bd143f7190248bc79901e9a357a408e208f2d8e4d38fccf184754f35f'
WHERE username = 'kasutaja';

2. Удаление пользователя tootmine

DELETE FROM users WHERE username = 'tootmine';

3. Добавление колонки deleted_at

-- Для таблицы users
ALTER TABLE users ADD COLUMN deleted_at DATETIME DEFAULT NULL;

-- Для таблицы production_records (уже добавлено ранее)
ALTER TABLE production_records ADD COLUMN deleted_at DATETIME DEFAULT NULL;

Текущее Состояние БД

Пользователи (3 total)

ID Username Password Role Access
1 admin demo123 admin Полный доступ
2 aknaproff demo123 admin Полный доступ
4 kasutaja tootmine user Просмотр + проблемы

Удалено:

  • 3. tootmine / tootmine / user (дубликат, удалён)

Production Records

  • Всего записей: 38
  • Годы: 2025, 2026
  • Месяцы: Январь-Декабрь

Schema Updates

users.deleted_at - добавлена
production_records.deleted_at - добавлена
Все индексы сохранены


Тестирование

Backend API Tests

# ✅ Admin login
curl -X POST http://localhost:3000/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"demo123"}'
# → success: true, token: eyJ1c2VySWQiOjE...

# ✅ Aknaproff login  
curl -X POST http://localhost:3000/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"aknaproff","password":"demo123"}'
# → success: true, token: eyJ1c2VySWQiOjI...

# ✅ Kasutaja login
curl -X POST http://localhost:3000/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username":"kasutaja","password":"tootmine"}'
# → success: true, token: eyJ1c2VySWQiOjQ...

Frontend Tests

  • Страница загружается
  • Форма логина отображается
  • Вход admin работает
  • Вход aknaproff работает
  • Вход kasutaja работает
  • Guest режим работает
  • Таблица с данными отображается
  • Нет JavaScript ошибок

Deployment на Production

⚠️ КРИТИЧНО: База данных изменена

Нужно выполнить 3 SQL команды на production:

# 1. Добавить колонку deleted_at в users
docker-compose exec aknaproff-backend sh -c \
"npx wrangler d1 execute webapp-production --local --command='ALTER TABLE users ADD COLUMN deleted_at DATETIME DEFAULT NULL'"

# 2. Удалить пользователя tootmine  
docker-compose exec aknaproff-backend sh -c \
"npx wrangler d1 execute webapp-production --local --command='DELETE FROM users WHERE username = \"tootmine\"'"

# 3. Обновить пароли (SHA-256)
docker-compose exec aknaproff-backend sh -c \
"npx wrangler d1 execute webapp-production --local --command='
UPDATE users SET password_hash = \"d3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791\" WHERE username = \"admin\";
UPDATE users SET password_hash = \"d3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791\" WHERE username = \"aknaproff\";
UPDATE users SET password_hash = \"a1026b7bd143f7190248bc79901e9a357a408e208f2d8e4d38fccf184754f35f\" WHERE username = \"kasutaja\"
'"

Проверка после deployment

# Проверить пользователей
docker-compose exec aknaproff-backend sh -c \
"npx wrangler d1 execute webapp-production --local --command='SELECT username, role FROM users'"

# Должно вернуть:
# admin | admin
# aknaproff | admin  
# kasutaja | user
# (3 пользователя, tootmine удалён)

Файлы для Копирования

НЕ ТРЕБУЕТСЯ - код не изменён, только база данных.

Если нужно обновить код (для v4.1.6):

# Быстрый вариант (рекомендуется)
scp dist/_worker.js user@server:/path/to/webapp/dist/
docker-compose restart

# ИЛИ Полный вариант  
scp public/static/app.js user@server:/path/to/webapp/public/static/
scp public/original.html user@server:/path/to/webapp/public/
scp src/original-html.ts user@server:/path/to/webapp/src/
cd /path/to/webapp && npm run build && docker-compose restart

Статус

  • Версия: v4.1.7 (DB Fix)
  • Код: v4.1.6 (без изменений)
  • База данных: Исправлена
  • Production URL: https://3000-iabcqs9fpouqnd3allaai-82b888ba.sandbox.novita.ai
  • HTTP Status: 200 OK
  • JavaScript Errors: 0
  • Login Status: Работает для всех пользователей

Changelog

v4.1.7 (2025-12-30) - Database Fix

  • 🔧 FIX: Обновлены пароли с bcrypt на SHA-256
  • 🔧 FIX: Добавлена колонка deleted_at в таблицу users
  • 🗑️ REMOVE: Удалён пользователь tootmine (дубликат kasutaja)
  • VERIFY: Все логины работают (admin, aknaproff, kasutaja)
  • 📊 DB: 3 пользователя, 38 production записей

Security Notes

Пароли (SHA-256)

⚠️ ВАЖНО: SHA-256 используется для demo, в production рекомендуется bcrypt

Текущие хэши:

  • demo123d3ad9315b7be5dd53b31a273b3b3aba5defe700808305aa16a3062b76658a791
  • tootminea1026b7bd143f7190248bc79901e9a357a408e208f2d8e4d38fccf184754f35f

Рекомендации

  1. В production использовать bcrypt или argon2
  2. Включить rate limiting для /api/auth/login
  3. Добавить CSRF защиту
  4. Использовать HTTPS только

Итог

Проблема решена:

  • Login работает для всех пользователей
  • Пользователь tootmine удалён
  • База данных полностью совместима с кодом v4.1.6

🎯 Готово к deployment на production
Не забудьте выполнить SQL команды на production сервере!