TenerifeProp Dev 0d290f29a1 feat: implement administrative section with authentication
## Features Implemented

### Authentication System
- Login page at /login.html with Bootstrap 5 UI
- Session-based authentication using SQLite
- bcrypt password hashing via Bun.password API
- CSRF protection for form submissions
- Rate limiting on login attempts (10 req/min)
- 7-day session persistence with HTTP-only cookies

### Admin Routes Protection
- All admin endpoints protected with requireAuth middleware
- requireAdmin middleware for role-based access
- Session validation on each authenticated request
- Expired session cleanup on startup

### API Endpoints
- POST /api/auth/login - user authentication
- POST /api/auth/logout - session termination
- GET /api/auth/me - current user info
- GET /api/csrf-token - CSRF token for forms
- GET /api/admin/stats - admin statistics

### Seed Data
- 12 realistic properties in Tenerife
- 3 testimonials with international clients
- 3 FAQ items about buying process
- 3 services offered
- Admin user: admin@tenerifeprop.com / admin123

### Tests
- Authentication tests (password, session)
- Input validation tests (email, phone, XSS)
- Property CRUD tests

## Files Changed
- src/server/index.ts - CSRF fix, auth endpoints
- public/login.html - New login page
- public/js/api.js - Auth API methods
- public/admin.html - Auth check on load
- src/db/seed-comprehensive.ts - Seed script
- tests/auth.test.ts - Test suite

## Tested
 Login page renders correctly
 Valid credentials return success
 Invalid credentials return error
 Session cookie is set
 Protected endpoints require authentication
 Logout clears session
 Auth/me returns 401 after logout

## Access
- URL: http://localhost:3000/login.html
- Email: admin@tenerifeprop.com
- Password: admin123

Closes #28, #29, #30
2026-04-06 00:44:38 +01:00

TenerifeProp

Агентство недвижимости на острове Тенерифе (Канарские острова, Испания).

🚀 Быстрый старт с Docker

# Сборка и запуск
docker-compose up -d --build

# Приложение будет доступно на http://localhost:8080

📦 Локальная разработка

Требования

  • Bun >= 1.0.0
  • Node.js >= 18 (опционально)

Установка

# Установка зависимостей
bun install

# Инициализация базы данных
bun run db:init

# Заполнение тестовыми данными
bun run db:seed

# Запуск сервера разработки
bun run dev

Доступные скрипты

bun run dev       # Запуск в режиме разработки
bun run start     # Запуск в production режиме
bun run db:init   # Инициализация БД
bun run db:seed   # Заполнение тестовыми данными
bun run build     # Сборка проекта
bun run test      # Запуск тестов

📁 Структура проекта

TenerifeProp/
├── public/                 # Статические файлы
│   ├── index.html          # Главная страница
│   ├── property.html       # Страница объекта
│   ├── admin.html          # Админ-панель
│   ├── css/                # Стили
│   └── js/                 # JavaScript
├── src/
│   ├── server/             # Backend (Bun + Hono)
│   ├── db/                 # Схема БД
│   ├── types/              # TypeScript типы
│   ├── data/               # JSON данные
│   └── i18n/               # Переводы
├── docs/                   # Документация
├── Dockerfile              # Docker образ
├── docker-compose.yml      # Docker Compose
├── package.json            # Зависимости
└── tsconfig.json           # TypeScript конфиг

🔧 API Endpoints

Недвижимость

Метод Endpoint Описание
GET /api/properties Список объектов
GET /api/properties/:slug Детали объекта
GET /api/properties/featured Рекомендуемые
POST /api/properties Создать (admin)
PUT /api/properties/:id Обновить (admin)
DELETE /api/properties/:id Удалить (admin)

Заявки

Метод Endpoint Описание
GET /api/leads Список заявок
POST /api/leads Создать заявку
PUT /api/leads/:id/status Изменить статус

Контент

Метод Endpoint Описание
GET /api/testimonials Отзывы
GET /api/faq FAQ
GET /api/services Услуги
GET /api/settings Настройки

🗄️ База данных

SQLite база данных автоматически создается в ./data/tenerifeprop.db.

Основные таблицы

  • properties - Объекты недвижимости
  • leads - Заявки клиентов
  • users - Пользователи системы
  • testimonials - Отзывы
  • faq - Вопросы-ответы
  • services - Услуги
  • settings - Настройки сайта

🌍 Мультиязычность

Поддерживаемые языки:

  • 🇪🇸 Испанский (ES) - основной
  • 🇷🇺 Русский (RU)

Переключение языка через ?lang=ru или кнопку в интерфейсе.

👤 Учётные данные по умолчанию

Email: admin@tenerifeprop.com
Password: admin123

📄 Лицензия

MIT License - UniqueSoft

Description
Real Estate Agency Website for Tenerife Island
Readme 3.4 MiB
Languages
HTML 60.8%
TypeScript 20.4%
JavaScript 11.3%
CSS 5.2%
Shell 1.6%
Other 0.7%