Update files

This commit is contained in:
glpshchn 2025-12-01 04:18:46 +03:00
parent 04f4bce239
commit d2e1f107ce
1 changed files with 79 additions and 4 deletions

View File

@ -88,10 +88,15 @@ router.get('/proxy/:encodedUrl', proxyLimiter, async (req, res) => {
'Referer': urlObj.origin 'Referer': urlObj.origin
}; };
// Если это e621, добавляем авторизацию // Если это e621, добавляем авторизацию (если есть учетные данные)
if (urlObj.hostname.includes('e621.net')) { if (urlObj.hostname.includes('e621.net') && config.e621Username && config.e621ApiKey) {
const auth = Buffer.from(`${config.e621Username}:${config.e621ApiKey}`).toString('base64'); try {
headers['Authorization'] = `Basic ${auth}`; const auth = Buffer.from(`${config.e621Username}:${config.e621ApiKey}`).toString('base64');
headers['Authorization'] = `Basic ${auth}`;
} catch (error) {
console.warn('⚠️ Ошибка создания Basic auth для e621:', error.message);
// Продолжаем без авторизации
}
} }
const response = await axios.get(originalUrl, { const response = await axios.get(originalUrl, {
@ -158,6 +163,41 @@ router.get('/furry', authenticate, async (req, res) => {
return res.json({ posts: [] }); return res.json({ posts: [] });
} }
// Обработка ошибок аутентификации
if (response.data && response.data.success === false) {
if (response.data.message && response.data.message.includes('Authentication')) {
console.warn('⚠️ e621 ошибка аутентификации, пробуем без авторизации:', response.data.message);
// Пробуем запрос без авторизации (для публичных данных это должно работать)
try {
const publicResponse = await axios.get('https://e621.net/posts.json', {
params: {
tags: query.trim(),
limit: Math.min(parseInt(limit) || 320, 320),
page: parseInt(page) || 1
},
headers: {
'User-Agent': E621_USER_AGENT
},
timeout: 30000,
validateStatus: (status) => status < 500
});
if (publicResponse.status === 429) {
return res.json({ posts: [] });
}
// Используем данные из публичного запроса
response.data = publicResponse.data;
} catch (publicError) {
console.error('⚠️ e621 публичный запрос тоже не удался:', publicError.message);
return res.json({ posts: [] });
}
} else {
console.warn('⚠️ e621 вернул ошибку:', response.data.message);
return res.json({ posts: [] });
}
}
// Проверка на наличие данных (e621 может возвращать массив напрямую или объект с posts) // Проверка на наличие данных (e621 может возвращать массив напрямую или объект с posts)
let postsData = null; let postsData = null;
@ -329,6 +369,41 @@ router.get('/furry/tags', authenticate, async (req, res) => {
return res.json({ tags: [] }); return res.json({ tags: [] });
} }
// Обработка ошибок аутентификации
if (response.data && response.data.success === false) {
if (response.data.message && response.data.message.includes('Authentication')) {
console.warn('⚠️ e621 ошибка аутентификации, пробуем без авторизации:', response.data.message);
// Пробуем запрос без авторизации (для публичных данных это должно работать)
try {
const publicResponse = await axios.get('https://e621.net/tags.json', {
params: {
'search[name_matches]': `${query}*`,
'search[order]': 'count',
limit: 10
},
headers: {
'User-Agent': E621_USER_AGENT
},
timeout: 10000,
validateStatus: (status) => status < 500
});
if (publicResponse.status === 429) {
return res.json({ tags: [] });
}
// Используем данные из публичного запроса
response.data = publicResponse.data;
} catch (publicError) {
console.error('⚠️ e621 публичный запрос тоже не удался:', publicError.message);
return res.json({ tags: [] });
}
} else {
console.warn('⚠️ e621 вернул ошибку:', response.data.message);
return res.json({ tags: [] });
}
}
// Проверка на массив (e621 может возвращать массив напрямую или объект с массивом) // Проверка на массив (e621 может возвращать массив напрямую или объект с массивом)
let tagsData = null; let tagsData = null;