- Changed window size to mobile phone format (400x800) - Removed width condition for ActiveProxyFooter - now always visible - Added run-umbrix.sh launch script with icon copying - Stats cards now display on all screen sizes
113 lines
3.9 KiB
JavaScript
113 lines
3.9 KiB
JavaScript
const express = require('express');
|
||
const cors = require('cors');
|
||
const app = express();
|
||
|
||
// Middleware
|
||
app.use(cors());
|
||
app.use(express.json());
|
||
|
||
// Конфигурация версий - обновляйте это при каждом релизе
|
||
const RELEASES = {
|
||
stable: {
|
||
version: "2.5.8",
|
||
build_number: "258",
|
||
is_prerelease: false,
|
||
download_url: "https://your-storage.com/downloads/umbrix-2.5.8.apk",
|
||
release_notes: "Стабильная версия с важными исправлениями:\n\n✨ Новое:\n- Улучшенная система обновлений\n- Оптимизация производительности\n\n🐛 Исправлено:\n- Проблемы с подключением\n- Баги стабильности",
|
||
published_at: "2026-01-16T10:00:00Z"
|
||
},
|
||
beta: {
|
||
version: "2.6.0-beta.1",
|
||
build_number: "260",
|
||
is_prerelease: true,
|
||
download_url: "https://your-storage.com/downloads/umbrix-2.6.0-beta.1.apk",
|
||
release_notes: "Бета-версия с экспериментальными функциями:\n\n🚀 Новые функции:\n- Новый интерфейс\n- Расширенные настройки\n\n⚠️ Внимание: Это бета-версия, могут быть баги!",
|
||
published_at: "2026-01-17T08:00:00Z"
|
||
}
|
||
};
|
||
|
||
// API ключ для защиты (опционально)
|
||
const API_KEY = process.env.API_KEY || 'your-secret-api-key-change-this';
|
||
|
||
// Middleware для проверки API ключа (опционально)
|
||
function checkApiKey(req, res, next) {
|
||
const apiKey = req.headers['x-api-key'];
|
||
|
||
// Если API_KEY не установлен, пропускаем проверку
|
||
if (API_KEY === 'your-secret-api-key-change-this') {
|
||
return next();
|
||
}
|
||
|
||
if (!apiKey || apiKey !== API_KEY) {
|
||
return res.status(401).json({
|
||
error: 'Unauthorized',
|
||
message: 'Invalid or missing API key'
|
||
});
|
||
}
|
||
|
||
next();
|
||
}
|
||
|
||
// Endpoint для получения последней версии
|
||
app.get('/api/updates/latest', checkApiKey, (req, res) => {
|
||
const includePrerelease = req.query.include_prerelease === 'true';
|
||
const release = includePrerelease ? RELEASES.beta : RELEASES.stable;
|
||
|
||
// Логирование запросов
|
||
console.log(`[${new Date().toISOString()}] Update check: prerelease=${includePrerelease}`);
|
||
|
||
res.json(release);
|
||
});
|
||
|
||
// Endpoint для аналитики (опционально)
|
||
app.post('/api/updates/analytics', (req, res) => {
|
||
const { current_version, device_info, action } = req.body;
|
||
|
||
console.log(`[${new Date().toISOString()}] Analytics:`, {
|
||
current_version,
|
||
device_info,
|
||
action
|
||
});
|
||
|
||
res.json({ success: true });
|
||
});
|
||
|
||
// Endpoint для истории версий
|
||
app.get('/api/updates/history', checkApiKey, (req, res) => {
|
||
const history = [
|
||
RELEASES.beta,
|
||
RELEASES.stable,
|
||
// Добавьте старые версии здесь
|
||
];
|
||
|
||
res.json({ releases: history });
|
||
});
|
||
|
||
// Health check endpoint
|
||
app.get('/health', (req, res) => {
|
||
res.json({
|
||
status: 'ok',
|
||
timestamp: new Date().toISOString(),
|
||
version: '1.0.0'
|
||
});
|
||
});
|
||
|
||
// Запуск сервера
|
||
const PORT = process.env.PORT || 3000;
|
||
app.listen(PORT, () => {
|
||
console.log(`
|
||
╔════════════════════════════════════════╗
|
||
║ Umbrix Update Server ║
|
||
║ Running on port ${PORT} ║
|
||
║ ║
|
||
║ Endpoints: ║
|
||
║ GET /api/updates/latest ║
|
||
║ POST /api/updates/analytics ║
|
||
║ GET /api/updates/history ║
|
||
║ GET /health ║
|
||
╚════════════════════════════════════════╝
|
||
`);
|
||
});
|
||
|
||
module.exports = app;
|