Описание изменений

This commit is contained in:
2025-03-06 21:31:29 +03:00
parent d90e1b93a9
commit fc56362ac2
59 changed files with 6407 additions and 3709 deletions

View File

@@ -1,79 +1,7 @@
const express = require('express');
const router = express.Router();
const db = require('../db');
const { checkIfAdmin } = require('../utils/access-check');
// Middleware для проверки прав администратора
const requireAdmin = async (req, res, next) => {
console.log('Проверка прав администратора:', {
session: req.session
? {
authenticated: req.session.authenticated,
address: req.session.address,
isAdmin: req.session.isAdmin,
}
: null,
headers: {
authorization: req.headers.authorization,
},
});
// Проверка аутентификации через сессию
if (req.session && req.session.authenticated && req.session.isAdmin) {
console.log('Пользователь авторизован как администратор через сессию');
return next();
}
// Проверка через заголовок авторизации
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith('Bearer ')) {
console.log('Отсутствует заголовок авторизации');
return res.status(401).json({ error: 'Unauthorized' });
}
const address = authHeader.split(' ')[1];
console.log('Проверка адреса из заголовка:', address);
try {
// Проверяем напрямую в базе данных
const userResult = await db.query('SELECT is_admin FROM users WHERE address = $1', [
address.toLowerCase(),
]);
if (userResult.rows.length === 0) {
console.log(`Пользователь с адресом ${address} не найден`);
return res.status(404).json({ error: 'User not found' });
}
const isAdmin = userResult.rows[0].is_admin;
console.log(`Пользователь с адресом ${address} имеет статус администратора:`, isAdmin);
if (!isAdmin) {
console.log(`Пользователь с адресом ${address} не является администратором`);
return res.status(403).json({ error: 'Forbidden' });
}
// Обновляем сессию
if (req.session) {
req.session.authenticated = true;
req.session.address = address;
req.session.isAdmin = true;
console.log('Сессия обновлена из middleware:', {
address,
isAdmin: true,
});
}
next();
} catch (error) {
console.error('Ошибка при проверке прав администратора:', error);
return res.status(500).json({ error: 'Internal server error' });
}
};
// Применяем middleware ко всем маршрутам
router.use(requireAdmin);
const { requireAdmin } = require('../middleware/auth');
// Маршрут для получения списка пользователей
router.get('/users', async (req, res) => {
@@ -86,8 +14,8 @@ router.get('/users', async (req, res) => {
}
});
// Маршрут для получения статистики
router.get('/stats', async (req, res) => {
// Маршрут для получения статистики (защищен middleware requireAdmin)
router.get('/stats', requireAdmin, async (req, res) => {
try {
// Получаем количество пользователей
const usersCount = await db.query('SELECT COUNT(*) FROM users');