init
This commit is contained in:
36
mc_test/.env
Executable file
36
mc_test/.env
Executable file
@ -0,0 +1,36 @@
|
||||
# Machine Control Center Environment Configuration
|
||||
# Copy this file to .env and configure for your environment
|
||||
|
||||
# ========================================================================================
|
||||
# API Configuration
|
||||
# ========================================================================================
|
||||
VITE_API_URL=https://mc.exbytestudios.com
|
||||
|
||||
# ========================================================================================
|
||||
# Domain Configuration
|
||||
# ========================================================================================
|
||||
# Production domain
|
||||
VITE_PROD_DOMAIN=mc.exbytestudios.com
|
||||
# Backup domain
|
||||
VITE_BACKUP_DOMAIN=backup.mc.exbytestudios.com
|
||||
# Test/Development domain
|
||||
VITE_TEST_DOMAIN=test.exbytestudios.com
|
||||
|
||||
# ========================================================================================
|
||||
# Development Server Configuration (for Vite server)
|
||||
# ========================================================================================
|
||||
VITE_DEV_HOST=192.168.200.10
|
||||
VITE_DEV_PORT=5173
|
||||
VITE_DEV_ALLOWED_HOST=test.exbytestudios.com
|
||||
|
||||
# ========================================================================================
|
||||
# Security Settings
|
||||
# ========================================================================================
|
||||
VITE_ENABLE_CERTIFICATE_PINNING=true
|
||||
VITE_CERTIFICATE_PINNING_FALLBACK=true
|
||||
|
||||
# ========================================================================================
|
||||
# Development Settings
|
||||
# ========================================================================================
|
||||
VITE_DEBUG_MODE=false
|
||||
VITE_LOG_LEVEL=info
|
||||
131
mc_test/ENV_SETUP.md
Executable file
131
mc_test/ENV_SETUP.md
Executable file
@ -0,0 +1,131 @@
|
||||
# Environment Configuration Guide
|
||||
|
||||
## Overview
|
||||
|
||||
All hardcoded IP addresses and domains have been moved to environment variables for easier configuration across different environments.
|
||||
|
||||
## Quick Start
|
||||
|
||||
1. **Copy the example file:**
|
||||
```bash
|
||||
cp env.example .env
|
||||
```
|
||||
|
||||
2. **Edit `.env` with your values:**
|
||||
```bash
|
||||
# For local development
|
||||
VITE_API_URL=http://localhost:8000
|
||||
VITE_DEV_HOST=192.168.200.10
|
||||
|
||||
# For production
|
||||
VITE_API_URL=https://mc.exbytestudios.com
|
||||
VITE_PROD_DOMAIN=mc.exbytestudios.com
|
||||
```
|
||||
|
||||
3. **Start development server:**
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
### API Configuration
|
||||
- `VITE_API_URL` - Base URL for API endpoints (default: `https://mc.exbytestudios.com`)
|
||||
- Development: `http://localhost:8000`
|
||||
- Production: `https://mc.exbytestudios.com`
|
||||
|
||||
### Domain Configuration
|
||||
- `VITE_PROD_DOMAIN` - Production domain (default: `mc.exbytestudios.com`)
|
||||
- `VITE_BACKUP_DOMAIN` - Backup domain (default: `backup.mc.exbytestudios.com`)
|
||||
- `VITE_TEST_DOMAIN` - Test domain (default: `test.exbytestudios.com`)
|
||||
|
||||
### Development Server Configuration
|
||||
- `VITE_DEV_HOST` - Vite dev server host (default: `192.168.200.10`)
|
||||
- `VITE_DEV_PORT` - Vite dev server port (default: `5173`)
|
||||
- `VITE_DEV_ALLOWED_HOST` - Allowed host for HMR (default: `test.exbytestudios.com`)
|
||||
|
||||
### Security Settings
|
||||
- `VITE_ENABLE_CERTIFICATE_PINNING` - Enable/disable certificate pinning (default: `true`)
|
||||
- Set to `false` in development
|
||||
- Set to `true` in production
|
||||
- `VITE_CERTIFICATE_PINNING_FALLBACK` - Enable fallback for certificate pinning (default: `true`)
|
||||
|
||||
### Development Settings
|
||||
- `VITE_DEBUG_MODE` - Enable debug mode (default: `false`)
|
||||
- `VITE_LOG_LEVEL` - Logging level: `debug`, `info`, `warn`, `error` (default: `info`)
|
||||
|
||||
## Files Using Environment Variables
|
||||
|
||||
### Configuration Files
|
||||
- `vite.config.ts` - Uses `VITE_DEV_HOST`, `VITE_DEV_PORT`, `VITE_DEV_ALLOWED_HOST`
|
||||
- `src/renderer/config/api.ts` - Uses `VITE_API_URL`
|
||||
|
||||
### Service Files
|
||||
- `src/renderer/services/CertificatePinning.ts` - Uses `VITE_PROD_DOMAIN`, `VITE_BACKUP_DOMAIN`
|
||||
- `src/renderer/utils/csp.ts` - Uses `VITE_PROD_DOMAIN`
|
||||
- `src/renderer/mocks/mockMachines.ts` - Uses `VITE_DEV_HOST`
|
||||
|
||||
### Static Configuration Files (Manual Update Required)
|
||||
- `csp-config.json` - Update production domains manually to match `.env`
|
||||
- `index.html` - CSP meta tag uses hardcoded values (acceptable for development)
|
||||
|
||||
## Development vs Production
|
||||
|
||||
### Development (.env.development)
|
||||
```env
|
||||
VITE_API_URL=http://localhost:8000
|
||||
VITE_DEV_HOST=192.168.200.10
|
||||
VITE_ENABLE_CERTIFICATE_PINNING=false
|
||||
VITE_DEBUG_MODE=true
|
||||
VITE_LOG_LEVEL=debug
|
||||
```
|
||||
|
||||
### Production (.env.production)
|
||||
```env
|
||||
VITE_API_URL=https://mc.exbytestudios.com
|
||||
VITE_PROD_DOMAIN=mc.exbytestudios.com
|
||||
VITE_ENABLE_CERTIFICATE_PINNING=true
|
||||
VITE_DEBUG_MODE=false
|
||||
VITE_LOG_LEVEL=info
|
||||
```
|
||||
|
||||
## Migration from Hardcoded Values
|
||||
|
||||
All instances of hardcoded IP (`192.168.200.10`) and domains (`*.exbytestudios.com`) have been replaced with environment variables:
|
||||
|
||||
### Before
|
||||
```typescript
|
||||
const API_URL = 'https://mc.exbytestudios.com';
|
||||
host: '192.168.200.10'
|
||||
```
|
||||
|
||||
### After
|
||||
```typescript
|
||||
const API_URL = import.meta.env.VITE_API_URL || 'https://mc.exbytestudios.com';
|
||||
host: import.meta.env.VITE_DEV_HOST || '192.168.200.10'
|
||||
```
|
||||
|
||||
## Security Notes
|
||||
|
||||
1. **Never commit `.env` files to git** - They are in `.gitignore` by default
|
||||
2. **Use different values for each environment** - Development, Testing, Production
|
||||
3. **Enable certificate pinning in production** - Set `VITE_ENABLE_CERTIFICATE_PINNING=true`
|
||||
4. **Update `csp-config.json`** - When changing production domains, update CSP config manually
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### API connection fails
|
||||
- Check `VITE_API_URL` matches your API server
|
||||
- Verify API server is running
|
||||
- Check network connectivity
|
||||
|
||||
### HMR (Hot Module Replacement) not working
|
||||
- Verify `VITE_DEV_HOST` is accessible
|
||||
- Check `VITE_DEV_ALLOWED_HOST` matches your access domain
|
||||
- Ensure WebSocket connections are allowed
|
||||
|
||||
### Certificate pinning errors
|
||||
- Disable in development: `VITE_ENABLE_CERTIFICATE_PINNING=false`
|
||||
- Verify certificate fingerprints in production
|
||||
- Check `VITE_PROD_DOMAIN` matches actual certificate domain
|
||||
|
||||
122
mc_test/csp-config.json
Executable file
122
mc_test/csp-config.json
Executable file
@ -0,0 +1,122 @@
|
||||
{
|
||||
"_comment": "IMPORTANT: Update production domains to match .env file (VITE_PROD_DOMAIN, VITE_TEST_DOMAIN)",
|
||||
"development": {
|
||||
"description": "Relaxed CSP for development environment with Vite HMR",
|
||||
"csp": {
|
||||
"default-src": ["'self'"],
|
||||
"script-src": [
|
||||
"'self'",
|
||||
"'unsafe-inline'",
|
||||
"'unsafe-eval'",
|
||||
"http://localhost:*",
|
||||
"ws://localhost:*"
|
||||
],
|
||||
"style-src": [
|
||||
"'self'",
|
||||
"'unsafe-inline'",
|
||||
"http://localhost:*"
|
||||
],
|
||||
"img-src": [
|
||||
"'self'",
|
||||
"data:",
|
||||
"blob:",
|
||||
"http://localhost:*"
|
||||
],
|
||||
"font-src": [
|
||||
"'self'",
|
||||
"data:",
|
||||
"http://localhost:*"
|
||||
],
|
||||
"connect-src": [
|
||||
"'self'",
|
||||
"http://localhost:*",
|
||||
"https://localhost:*",
|
||||
"ws://localhost:*",
|
||||
"wss://localhost:*"
|
||||
],
|
||||
"frame-src": [
|
||||
"'self'",
|
||||
"http://localhost:8080",
|
||||
"https://localhost:8080"
|
||||
],
|
||||
"object-src": ["'none'"],
|
||||
"base-uri": ["'self'"],
|
||||
"form-action": ["'self'"],
|
||||
"frame-ancestors": ["'none'"]
|
||||
}
|
||||
},
|
||||
"production": {
|
||||
"description": "Strict CSP for production environment",
|
||||
"csp": {
|
||||
"default-src": ["'self'"],
|
||||
"script-src": ["'self'"],
|
||||
"style-src": [
|
||||
"'self'",
|
||||
"'unsafe-inline'"
|
||||
],
|
||||
"img-src": [
|
||||
"'self'",
|
||||
"data:",
|
||||
"blob:"
|
||||
],
|
||||
"font-src": [
|
||||
"'self'",
|
||||
"data:"
|
||||
],
|
||||
"connect-src": [
|
||||
"'self'",
|
||||
"https://mc.exbytestudios.com",
|
||||
"wss://mc.exbytestudios.com",
|
||||
"https://test.exbytestudios.com",
|
||||
"wss://test.exbytestudios.com"
|
||||
],
|
||||
"frame-src": [
|
||||
"'self'",
|
||||
"https://mc.exbytestudios.com",
|
||||
"https://test.exbytestudios.com"
|
||||
],
|
||||
"object-src": ["'none'"],
|
||||
"base-uri": ["'self'"],
|
||||
"form-action": ["'self'"],
|
||||
"frame-ancestors": ["'none'"],
|
||||
"upgrade-insecure-requests": []
|
||||
}
|
||||
},
|
||||
"testing": {
|
||||
"description": "CSP for testing environment",
|
||||
"csp": {
|
||||
"default-src": ["'self'"],
|
||||
"script-src": [
|
||||
"'self'",
|
||||
"'unsafe-inline'",
|
||||
"'unsafe-eval'"
|
||||
],
|
||||
"style-src": [
|
||||
"'self'",
|
||||
"'unsafe-inline'"
|
||||
],
|
||||
"img-src": [
|
||||
"'self'",
|
||||
"data:",
|
||||
"blob:"
|
||||
],
|
||||
"font-src": [
|
||||
"'self'",
|
||||
"data:"
|
||||
],
|
||||
"connect-src": [
|
||||
"'self'",
|
||||
"http://localhost:*",
|
||||
"https://localhost:*"
|
||||
],
|
||||
"frame-src": [
|
||||
"'self'",
|
||||
"http://localhost:*"
|
||||
],
|
||||
"object-src": ["'none'"],
|
||||
"base-uri": ["'self'"],
|
||||
"form-action": ["'self'"],
|
||||
"frame-ancestors": ["'none'"]
|
||||
}
|
||||
}
|
||||
}
|
||||
41
mc_test/dist/main/electron.js
vendored
Executable file
41
mc_test/dist/main/electron.js
vendored
Executable file
@ -0,0 +1,41 @@
|
||||
"use strict";
|
||||
const { app, BrowserWindow, ipcMain } = require('electron');
|
||||
const path = require('path');
|
||||
function createWindow() {
|
||||
const mainWindow = new BrowserWindow({
|
||||
width: 1200,
|
||||
height: 800,
|
||||
webPreferences: {
|
||||
nodeIntegration: true,
|
||||
contextIsolation: true,
|
||||
preload: path.join(__dirname, '../preload.js'),
|
||||
},
|
||||
});
|
||||
// In development, load from Vite dev server
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
mainWindow.loadURL('http://localhost:5173');
|
||||
mainWindow.webContents.openDevTools();
|
||||
}
|
||||
else {
|
||||
// In production, load the built index.html
|
||||
mainWindow.loadFile(path.join(__dirname, '../renderer/index.html'));
|
||||
}
|
||||
}
|
||||
app.whenReady().then(() => {
|
||||
createWindow();
|
||||
app.on('activate', () => {
|
||||
if (BrowserWindow.getAllWindows().length === 0) {
|
||||
createWindow();
|
||||
}
|
||||
});
|
||||
});
|
||||
app.on('window-all-closed', () => {
|
||||
if (process.platform !== 'darwin') {
|
||||
app.quit();
|
||||
}
|
||||
});
|
||||
// Handle machine connection (stub)
|
||||
ipcMain.handle('connect-to-machine', async (_event, machine) => {
|
||||
console.log('Connecting to machine:', machine);
|
||||
return { success: true, message: 'Connection successful (stub)' };
|
||||
});
|
||||
182
mc_test/dist/main/main/electron.js
vendored
Executable file
182
mc_test/dist/main/main/electron.js
vendored
Executable file
@ -0,0 +1,182 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const { app, BrowserWindow, ipcMain } = require('electron');
|
||||
const path = require('path');
|
||||
const logger_1 = require("./logger");
|
||||
// Временное хранилище для демо
|
||||
const machinesStore = {
|
||||
'test-vm-01': {
|
||||
id: 'test-vm-01',
|
||||
name: 'Test VM 1',
|
||||
status: 'running',
|
||||
os: 'Windows 10',
|
||||
ip: '192.168.1.100',
|
||||
hypervisor: 'VMware',
|
||||
specs: {
|
||||
cpu: '4 cores',
|
||||
ram: '8GB',
|
||||
disk: '256GB'
|
||||
},
|
||||
testLinks: [
|
||||
{ name: 'RDP', url: 'rdp://192.168.1.100' },
|
||||
{ name: 'Web Console', url: 'https://192.168.1.100:8080' }
|
||||
],
|
||||
logs: [
|
||||
{ timestamp: new Date().toISOString(), message: 'System started', level: 'info' }
|
||||
]
|
||||
}
|
||||
};
|
||||
function createWindow() {
|
||||
logger_1.log.info('startup', 'Creating main window...');
|
||||
const mainWindow = new BrowserWindow({
|
||||
width: 1200,
|
||||
height: 800,
|
||||
webPreferences: {
|
||||
nodeIntegration: true,
|
||||
contextIsolation: true,
|
||||
preload: path.join(__dirname, '..', 'preload.js'),
|
||||
},
|
||||
});
|
||||
// In development, load from Vite dev server
|
||||
const VITE_DEV_SERVER_URL = process.env.VITE_DEV_SERVER_URL;
|
||||
logger_1.log.debug('startup', 'VITE_DEV_SERVER_URL:', { url: VITE_DEV_SERVER_URL });
|
||||
if (VITE_DEV_SERVER_URL) {
|
||||
logger_1.log.info('startup', 'Loading from dev server', { url: VITE_DEV_SERVER_URL });
|
||||
mainWindow.loadURL(VITE_DEV_SERVER_URL);
|
||||
mainWindow.webContents.openDevTools();
|
||||
}
|
||||
else {
|
||||
const indexPath = path.join(__dirname, '..', 'renderer', 'index.html');
|
||||
logger_1.log.info('startup', 'Loading from file', { path: indexPath });
|
||||
mainWindow.loadFile(indexPath);
|
||||
}
|
||||
// Handle window close
|
||||
mainWindow.on('closed', () => {
|
||||
logger_1.log.info('window', 'Main window closed, quitting application');
|
||||
app.quit();
|
||||
});
|
||||
}
|
||||
// This method will be called when Electron has finished initialization
|
||||
app.whenReady().then(() => {
|
||||
logger_1.log.info('startup', 'Application ready, initializing...');
|
||||
createWindow();
|
||||
app.on('activate', () => {
|
||||
if (BrowserWindow.getAllWindows().length === 0) {
|
||||
logger_1.log.info('window', 'No windows available, creating new window');
|
||||
createWindow();
|
||||
}
|
||||
});
|
||||
});
|
||||
app.on('window-all-closed', () => {
|
||||
if (process.platform !== 'darwin') {
|
||||
logger_1.log.info('window', 'All windows closed, quitting application');
|
||||
app.quit();
|
||||
}
|
||||
});
|
||||
// Обработка событий логирования от renderer процесса
|
||||
ipcMain.on('log-event', (_event, { level, tag, message, context }) => {
|
||||
logger_1.log[level](tag, message, context);
|
||||
});
|
||||
// Обработчики IPC событий
|
||||
// Подключение к машине
|
||||
ipcMain.handle('connect-to-machine', async (_event, machine) => {
|
||||
logger_1.log.info('connect-machine', 'Connection request received', {
|
||||
machineId: machine.id,
|
||||
machineName: machine.name
|
||||
});
|
||||
try {
|
||||
// TODO: Реальная логика подключения будет добавлена позже
|
||||
return {
|
||||
success: true,
|
||||
message: 'Connection successful',
|
||||
details: { machineId: machine.id }
|
||||
};
|
||||
}
|
||||
catch (error) {
|
||||
logger_1.log.error('connect-machine', 'Connection failed', {
|
||||
machineId: machine.id,
|
||||
error: error instanceof Error ? error.message : String(error)
|
||||
});
|
||||
throw error;
|
||||
}
|
||||
});
|
||||
// Управление состоянием машины
|
||||
ipcMain.handle('control-machine', async (_event, { machineId, action }) => {
|
||||
logger_1.log.info('control-machine', `Machine ${action} requested`, { machineId, action });
|
||||
try {
|
||||
const machine = machinesStore[machineId];
|
||||
if (!machine) {
|
||||
throw new Error(`Machine ${machineId} not found`);
|
||||
}
|
||||
// Симуляция изменения состояния
|
||||
switch (action) {
|
||||
case 'start':
|
||||
machine.status = 'running';
|
||||
machine.logs.unshift({
|
||||
timestamp: new Date().toISOString(),
|
||||
message: 'Machine started',
|
||||
level: 'info'
|
||||
});
|
||||
break;
|
||||
case 'stop':
|
||||
machine.status = 'stopped';
|
||||
machine.logs.unshift({
|
||||
timestamp: new Date().toISOString(),
|
||||
message: 'Machine stopped',
|
||||
level: 'info'
|
||||
});
|
||||
break;
|
||||
case 'restart':
|
||||
machine.status = 'stopped';
|
||||
machine.logs.unshift({
|
||||
timestamp: new Date().toISOString(),
|
||||
message: 'Machine restarting',
|
||||
level: 'info'
|
||||
});
|
||||
setTimeout(() => {
|
||||
machine.status = 'running';
|
||||
machine.logs.unshift({
|
||||
timestamp: new Date().toISOString(),
|
||||
message: 'Machine restarted successfully',
|
||||
level: 'info'
|
||||
});
|
||||
logger_1.log.info('control-machine', 'Machine restarted', { machineId });
|
||||
}, 2000);
|
||||
break;
|
||||
}
|
||||
return {
|
||||
success: true,
|
||||
message: `Machine ${action} successful`,
|
||||
details: { machineId, newStatus: machine.status }
|
||||
};
|
||||
}
|
||||
catch (error) {
|
||||
logger_1.log.error('control-machine', `Machine ${action} failed`, {
|
||||
machineId,
|
||||
error: error instanceof Error ? error.message : String(error)
|
||||
});
|
||||
throw error;
|
||||
}
|
||||
});
|
||||
// Получение статуса машины
|
||||
ipcMain.handle('get-machine-status', async (_event, machineId) => {
|
||||
logger_1.log.debug('get-machine-status', 'Status requested', { machineId });
|
||||
const machine = machinesStore[machineId];
|
||||
if (!machine) {
|
||||
throw new Error(`Machine ${machineId} not found`);
|
||||
}
|
||||
return {
|
||||
success: true,
|
||||
message: 'Status retrieved',
|
||||
status: machine.status
|
||||
};
|
||||
});
|
||||
// Получение списка машин
|
||||
ipcMain.handle('get-machine-list', async () => {
|
||||
logger_1.log.debug('get-machine-list', 'Machine list requested');
|
||||
return {
|
||||
success: true,
|
||||
message: 'Machine list retrieved',
|
||||
machines: Object.values(machinesStore)
|
||||
};
|
||||
});
|
||||
84
mc_test/dist/main/main/logger.js
vendored
Executable file
84
mc_test/dist/main/main/logger.js
vendored
Executable file
@ -0,0 +1,84 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.log = void 0;
|
||||
const winston_1 = __importDefault(require("winston"));
|
||||
const winston_daily_rotate_file_1 = __importDefault(require("winston-daily-rotate-file"));
|
||||
const path_1 = __importDefault(require("path"));
|
||||
// Создание кастомного формата
|
||||
const customFormat = winston_1.default.format.printf(({ level, message, timestamp, tag, context }) => {
|
||||
const contextStr = context ? ` | context: ${JSON.stringify(context)}` : '';
|
||||
return `[${timestamp}] [${tag || 'main'}] [${level.toUpperCase()}]: ${message}${contextStr}`;
|
||||
});
|
||||
// Конфигурация логгера
|
||||
const logger = winston_1.default.createLogger({
|
||||
level: process.env.NODE_ENV === 'development' ? 'debug' : 'info',
|
||||
format: winston_1.default.format.combine(winston_1.default.format.timestamp({
|
||||
format: 'YYYY-MM-DD HH:mm:ss'
|
||||
}), winston_1.default.format.errors({ stack: true }), customFormat),
|
||||
transports: [
|
||||
// Логирование в файл с ротацией
|
||||
new winston_daily_rotate_file_1.default({
|
||||
dirname: path_1.default.join(process.cwd(), 'logs'),
|
||||
filename: 'app-%DATE%.log',
|
||||
datePattern: 'YYYY-MM-DD',
|
||||
zippedArchive: true,
|
||||
maxSize: '20m',
|
||||
maxFiles: '14d',
|
||||
level: 'info'
|
||||
}),
|
||||
// Логирование в консоль с цветами
|
||||
new winston_1.default.transports.Console({
|
||||
format: winston_1.default.format.combine(winston_1.default.format.colorize(), customFormat)
|
||||
})
|
||||
]
|
||||
});
|
||||
// Обработка необработанных исключений и промисов
|
||||
logger.exceptions.handle(new winston_1.default.transports.File({ filename: path_1.default.join(process.cwd(), 'logs', 'exceptions.log') }));
|
||||
logger.rejections.handle(new winston_1.default.transports.File({ filename: path_1.default.join(process.cwd(), 'logs', 'rejections.log') }));
|
||||
// Создание методов для разных уровней логирования
|
||||
const createLogMethod = (level) => {
|
||||
return (tag, message, context) => {
|
||||
logger.log({
|
||||
level,
|
||||
message,
|
||||
tag,
|
||||
context
|
||||
});
|
||||
};
|
||||
};
|
||||
// Экспорт интерфейса логгера
|
||||
exports.log = {
|
||||
error: createLogMethod('error'),
|
||||
warn: createLogMethod('warn'),
|
||||
info: createLogMethod('info'),
|
||||
debug: createLogMethod('debug'),
|
||||
// Метод для логирования необработанных ошибок
|
||||
fatal: (error, context) => {
|
||||
logger.error({
|
||||
level: 'error',
|
||||
message: error.message,
|
||||
tag: 'uncaught',
|
||||
context: {
|
||||
...context,
|
||||
stack: error.stack
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
// Настройка обработчиков необработанных ошибок
|
||||
process.on('uncaughtException', (error) => {
|
||||
exports.log.fatal(error);
|
||||
process.exit(1);
|
||||
});
|
||||
process.on('unhandledRejection', (reason) => {
|
||||
if (reason instanceof Error) {
|
||||
exports.log.fatal(reason);
|
||||
}
|
||||
else {
|
||||
exports.log.error('unhandledRejection', 'Unhandled promise rejection', { reason });
|
||||
}
|
||||
});
|
||||
exports.default = exports.log;
|
||||
17
mc_test/dist/main/preload.js
vendored
Executable file
17
mc_test/dist/main/preload.js
vendored
Executable file
@ -0,0 +1,17 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const { contextBridge, ipcRenderer } = require('electron');
|
||||
// Expose protected methods that allow the renderer process to use
|
||||
// the ipcRenderer without exposing the entire object
|
||||
contextBridge.exposeInMainWorld('electronAPI', {
|
||||
// Подключение к машине
|
||||
connectToMachine: (machine) => ipcRenderer.invoke('connect-to-machine', machine),
|
||||
// Управление состоянием машины
|
||||
controlMachine: (machineId, action) => ipcRenderer.invoke('control-machine', { machineId, action }),
|
||||
// Получение статуса машины
|
||||
getMachineStatus: (machineId) => ipcRenderer.invoke('get-machine-status', machineId),
|
||||
// Получение списка машин
|
||||
getMachineList: () => ipcRenderer.invoke('get-machine-list'),
|
||||
// Логирование
|
||||
logEvent: (level, tag, message, context) => ipcRenderer.send('log-event', { level, tag, message, context }),
|
||||
});
|
||||
2
mc_test/dist/main/renderer/types.js
vendored
Executable file
2
mc_test/dist/main/renderer/types.js
vendored
Executable file
@ -0,0 +1,2 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
1
mc_test/dist/renderer/assets/GuacamoleViewer-DQlYXUqt.js
vendored
Executable file
1
mc_test/dist/renderer/assets/GuacamoleViewer-DQlYXUqt.js
vendored
Executable file
@ -0,0 +1 @@
|
||||
import{r as n,l as c,j as e}from"./main-D-T5fPSb.js";function w({machine:t,connectionUrl:m,enableSftp:y,onError:l,onDisconnect:h}){const[p,d]=n.useState(!0),[k,x]=n.useState(null),[r,o]=n.useState(!1),s=n.useRef(null),f=n.useRef(null);return n.useEffect(()=>((async()=>{try{if(d(!0),x(null),c.info("guacamole-viewer","Initializing Guacamole session",{machineId:t.id,machineName:t.name,connectionUrl:m}),s.current)if(!s.current.src||s.current.src==="about:blank")c.debug("guacamole-viewer","Loading connection URL",{url:m}),s.current.src=m;else{c.debug("guacamole-viewer","iframe already loaded, keeping existing session"),d(!1);return}const a=()=>{d(!1),c.info("guacamole-viewer","Guacamole session loaded",{machineId:t.id}),setTimeout(()=>{s.current&&(s.current.focus(),o(!0))},500)},i=()=>{const u=new Error("Failed to load Guacamole session");x(u),d(!1),l==null||l(u)};if(s.current)return s.current.addEventListener("load",a),s.current.addEventListener("error",i),()=>{var u,b;(u=s.current)==null||u.removeEventListener("load",a),(b=s.current)==null||b.removeEventListener("error",i)}}catch(a){const i=a instanceof Error?a:new Error("Unknown error occurred");c.error("guacamole-viewer","Connection failed",{machineId:t.id,error:i.message}),x(i),l==null||l(i),d(!1)}})(),()=>{c.info("guacamole-viewer","Cleaning up connection",{machineId:t.id}),o(!1)}),[t.id]),n.useEffect(()=>{const g=a=>{f.current&&!f.current.contains(a.target)&&r&&(o(!1),s.current&&s.current.blur())};return document.addEventListener("mousedown",g),()=>{document.removeEventListener("mousedown",g)}},[r]),k?e.jsx("div",{className:"flex-1 flex items-center justify-center bg-red-50 text-red-600 p-4 rounded-kaspersky",children:e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"font-medium mb-2",children:"Connection Error"}),e.jsx("p",{className:"text-sm mb-4",children:k.message}),e.jsxs("div",{className:"flex gap-2 justify-center",children:[e.jsx("button",{onClick:()=>window.location.reload(),className:"px-4 py-2 bg-red-600 text-white rounded-kaspersky hover:bg-red-700 transition-colors",children:"Retry"}),e.jsx("button",{onClick:h,className:"px-4 py-2 bg-gray-600 text-white rounded-kaspersky hover:bg-gray-700 transition-colors",children:"Disconnect"})]})]})}):e.jsx("div",{className:"w-full h-full flex flex-col bg-kaspersky-bg",children:e.jsxs("div",{ref:f,className:`flex-1 relative bg-kaspersky-bg overflow-hidden ${r?"ring-2 ring-kaspersky-primary ring-opacity-50":""}`,children:[p&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-kaspersky-bg bg-opacity-75 z-10",children:e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"w-8 h-8 border-4 border-kaspersky-base border-t-transparent rounded-full animate-spin mx-auto"}),e.jsxs("p",{className:"mt-2 text-kaspersky-text",children:["Connecting to ",t.name,"..."]})]})}),!p&&!r&&e.jsx("div",{className:"absolute inset-0 z-10 cursor-pointer",onClick:()=>{s.current&&(s.current.focus(),o(!0))},title:"Click to activate console"}),!p&&e.jsx("div",{className:"absolute top-4 left-1/2 transform -translate-x-1/2 z-20 pointer-events-none select-none",children:e.jsxs("div",{className:"flex flex-col items-center gap-2",children:[e.jsxs("div",{className:`flex items-center gap-3 px-4 py-2 rounded-lg text-sm font-semibold transition-all duration-300 ${r?"bg-kaspersky-primary text-white shadow-kaspersky-lg":"bg-kaspersky-secondary bg-opacity-90 text-kaspersky-text-white"}`,children:[e.jsx("div",{className:`w-3 h-3 rounded-full transition-all duration-300 ${r?"bg-kaspersky-danger animate-pulse":"bg-kaspersky-text-lighter"}`}),e.jsx("span",{children:r?"Console Active":"Console Inactive"})]}),e.jsx("div",{className:"bg-kaspersky-secondary bg-opacity-75 backdrop-blur-sm text-kaspersky-text-white px-3 py-1.5 rounded-md text-xs font-medium",children:y?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"opacity-75",children:"Settings & SFTP:"}),e.jsx("kbd",{className:"px-1.5 py-0.5 bg-kaspersky-base bg-opacity-50 rounded text-[10px] font-mono",children:"Ctrl+Shift+Alt"})]}):e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"opacity-75",children:"Settings:"}),e.jsx("kbd",{className:"px-1.5 py-0.5 bg-kaspersky-base bg-opacity-50 rounded text-[10px] font-mono",children:"Ctrl+Shift+Alt"})]})})]})}),e.jsx("iframe",{ref:s,className:"w-full h-full border-0",title:`Remote Desktop - ${t.name}`,allow:"clipboard-read; clipboard-write; keyboard-map *; pointer-lock",sandbox:"allow-same-origin allow-scripts allow-forms allow-popups allow-pointer-lock allow-modals allow-downloads",onFocus:()=>o(!0),onBlur:()=>o(!1)})]})})}export{w as default};
|
||||
6
mc_test/dist/renderer/assets/MachineCredentialsModal-CeIiyq96.js
vendored
Executable file
6
mc_test/dist/renderer/assets/MachineCredentialsModal-CeIiyq96.js
vendored
Executable file
File diff suppressed because one or more lines are too long
1
mc_test/dist/renderer/assets/main-CnaqftHU.css
vendored
Executable file
1
mc_test/dist/renderer/assets/main-CnaqftHU.css
vendored
Executable file
File diff suppressed because one or more lines are too long
309
mc_test/dist/renderer/assets/main-D-T5fPSb.js
vendored
Executable file
309
mc_test/dist/renderer/assets/main-D-T5fPSb.js
vendored
Executable file
File diff suppressed because one or more lines are too long
BIN
mc_test/dist/renderer/fonts/KasperskySans-Bold.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySans-Bold.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySans-Bold.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySans-Bold.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySans-Bold.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySans-Bold.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySans-Bold.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySans-Bold.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySans-Light.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySans-Light.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySans-Light.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySans-Light.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySans-Light.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySans-Light.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySans-Light.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySans-Light.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySans-Regular.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySans-Regular.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySans-Regular.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySans-Regular.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySans-Regular.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySans-Regular.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySans-Regular.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySans-Regular.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Bold.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Bold.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Bold.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Bold.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Bold.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Bold.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Bold.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Bold.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Lt.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Lt.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Lt.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Lt.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Lt.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Lt.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Lt.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Lt.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Md.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Md.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Md.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Md.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Md.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Md.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Md.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Md.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Rg.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Rg.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Rg.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Rg.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Rg.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Rg.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Rg.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-Rg.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-SmBd.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-SmBd.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-SmBd.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-SmBd.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-SmBd.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-SmBd.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-SmBd.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-SmBd.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-XBd.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-XBd.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-XBd.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-XBd.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-XBd.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-XBd.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-XBd.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansDisplay-XBd.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Bold.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Bold.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Bold.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Bold.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Bold.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Bold.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Bold.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Bold.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Regular.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Regular.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Regular.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Regular.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Regular.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Regular.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Regular.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansMono-Regular.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Bold.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Bold.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Bold.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Bold.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Bold.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Bold.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Bold.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Bold.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-DemiBold.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-DemiBold.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-DemiBold.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-DemiBold.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-DemiBold.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-DemiBold.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-DemiBold.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-DemiBold.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-ExtraBold.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-ExtraBold.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-ExtraBold.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-ExtraBold.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-ExtraBold.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-ExtraBold.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-ExtraBold.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-ExtraBold.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Medium.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Medium.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Medium.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Medium.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Medium.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Medium.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Medium.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Medium.woff2
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Regular.eot
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Regular.eot
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Regular.ttf
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Regular.ttf
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Regular.woff
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Regular.woff
vendored
Executable file
Binary file not shown.
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Regular.woff2
vendored
Executable file
BIN
mc_test/dist/renderer/fonts/KasperskySansText-Regular.woff2
vendored
Executable file
Binary file not shown.
44
mc_test/dist/renderer/index.html
vendored
Executable file
44
mc_test/dist/renderer/index.html
vendored
Executable file
@ -0,0 +1,44 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Machine Control Center</title>
|
||||
|
||||
<!-- Content Security Policy - DISABLED for debugging -->
|
||||
<!--
|
||||
<meta http-equiv="Content-Security-Policy" content="
|
||||
default-src 'self' 'unsafe-inline' 'unsafe-eval';
|
||||
script-src 'self' 'unsafe-inline' 'unsafe-eval' http://localhost:* ws://localhost:*;
|
||||
style-src 'self' 'unsafe-inline' http://localhost:*;
|
||||
img-src 'self' data: blob: http://localhost:*;
|
||||
font-src 'self' data: http://localhost:*;
|
||||
connect-src 'self' http://localhost:* https://localhost:* ws://localhost:* wss://localhost:*;
|
||||
frame-src 'self' http://localhost:* https://localhost:*;
|
||||
object-src 'none';
|
||||
base-uri 'self';
|
||||
form-action 'self';
|
||||
frame-ancestors 'none';
|
||||
">
|
||||
-->
|
||||
<script type="module" crossorigin src="./assets/main-D-T5fPSb.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="./assets/main-CnaqftHU.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="root">Loading...</div>
|
||||
<script>
|
||||
console.log('🔍 HTML загружен, начинаем отладку...');
|
||||
console.log('📍 Root element:', document.getElementById('root'));
|
||||
</script>
|
||||
|
||||
<script>
|
||||
// Добавляем обработчик ошибок
|
||||
window.addEventListener('error', (e) => {
|
||||
console.error('❌ JavaScript Error:', e.error);
|
||||
});
|
||||
|
||||
window.addEventListener('unhandledrejection', (e) => {
|
||||
console.error('❌ Unhandled Promise Rejection:', e.reason);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
39
mc_test/electron-builder.json
Executable file
39
mc_test/electron-builder.json
Executable file
@ -0,0 +1,39 @@
|
||||
{
|
||||
"appId": "com.kaspersky.machinecontrolcenter",
|
||||
"productName": "Machine Control Center",
|
||||
"copyright": "Copyright © 2024 Kaspersky",
|
||||
"directories": {
|
||||
"output": "release/${version}"
|
||||
},
|
||||
"files": [
|
||||
"dist/**/*",
|
||||
"package.json"
|
||||
],
|
||||
"win": {
|
||||
"target": [
|
||||
"nsis"
|
||||
],
|
||||
"icon": "build/icon.ico"
|
||||
},
|
||||
"nsis": {
|
||||
"oneClick": false,
|
||||
"allowToChangeInstallationDirectory": true,
|
||||
"createDesktopShortcut": true,
|
||||
"createStartMenuShortcut": true,
|
||||
"shortcutName": "Machine Control Center"
|
||||
},
|
||||
"mac": {
|
||||
"target": [
|
||||
"dmg"
|
||||
],
|
||||
"icon": "build/icon.icns"
|
||||
},
|
||||
"linux": {
|
||||
"target": [
|
||||
"AppImage",
|
||||
"deb"
|
||||
],
|
||||
"icon": "build/icon.png",
|
||||
"category": "Utility"
|
||||
}
|
||||
}
|
||||
36
mc_test/env.example
Executable file
36
mc_test/env.example
Executable file
@ -0,0 +1,36 @@
|
||||
# Machine Control Center Environment Configuration
|
||||
# Copy this file to .env and configure for your environment
|
||||
|
||||
# ========================================================================================
|
||||
# API Configuration
|
||||
# ========================================================================================
|
||||
VITE_API_URL=https://mc.exbytestudios.com
|
||||
|
||||
# ========================================================================================
|
||||
# Domain Configuration
|
||||
# ========================================================================================
|
||||
# Production domain
|
||||
VITE_PROD_DOMAIN=mc.exbytestudios.com
|
||||
# Backup domain
|
||||
VITE_BACKUP_DOMAIN=backup.mc.exbytestudios.com
|
||||
# Test/Development domain
|
||||
VITE_TEST_DOMAIN=test.exbytestudios.com
|
||||
|
||||
# ========================================================================================
|
||||
# Development Server Configuration (for Vite server)
|
||||
# ========================================================================================
|
||||
VITE_DEV_HOST=192.168.200.10
|
||||
VITE_DEV_PORT=5173
|
||||
VITE_DEV_ALLOWED_HOST=test.exbytestudios.com
|
||||
|
||||
# ========================================================================================
|
||||
# Security Settings
|
||||
# ========================================================================================
|
||||
VITE_ENABLE_CERTIFICATE_PINNING=true
|
||||
VITE_CERTIFICATE_PINNING_FALLBACK=true
|
||||
|
||||
# ========================================================================================
|
||||
# Development Settings
|
||||
# ========================================================================================
|
||||
VITE_DEBUG_MODE=false
|
||||
VITE_LOG_LEVEL=info
|
||||
BIN
mc_test/fonts/KasperskySans-Bold.eot
Executable file
BIN
mc_test/fonts/KasperskySans-Bold.eot
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySans-Bold.ttf
Executable file
BIN
mc_test/fonts/KasperskySans-Bold.ttf
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySans-Bold.woff
Executable file
BIN
mc_test/fonts/KasperskySans-Bold.woff
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySans-Bold.woff2
Executable file
BIN
mc_test/fonts/KasperskySans-Bold.woff2
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySans-Light.eot
Executable file
BIN
mc_test/fonts/KasperskySans-Light.eot
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySans-Light.ttf
Executable file
BIN
mc_test/fonts/KasperskySans-Light.ttf
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySans-Light.woff
Executable file
BIN
mc_test/fonts/KasperskySans-Light.woff
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySans-Light.woff2
Executable file
BIN
mc_test/fonts/KasperskySans-Light.woff2
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySans-Regular.eot
Executable file
BIN
mc_test/fonts/KasperskySans-Regular.eot
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySans-Regular.ttf
Executable file
BIN
mc_test/fonts/KasperskySans-Regular.ttf
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySans-Regular.woff
Executable file
BIN
mc_test/fonts/KasperskySans-Regular.woff
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySans-Regular.woff2
Executable file
BIN
mc_test/fonts/KasperskySans-Regular.woff2
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySansDisplay-Bold.eot
Executable file
BIN
mc_test/fonts/KasperskySansDisplay-Bold.eot
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySansDisplay-Bold.ttf
Executable file
BIN
mc_test/fonts/KasperskySansDisplay-Bold.ttf
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySansDisplay-Bold.woff
Executable file
BIN
mc_test/fonts/KasperskySansDisplay-Bold.woff
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySansDisplay-Bold.woff2
Executable file
BIN
mc_test/fonts/KasperskySansDisplay-Bold.woff2
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySansDisplay-Lt.eot
Executable file
BIN
mc_test/fonts/KasperskySansDisplay-Lt.eot
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySansDisplay-Lt.ttf
Executable file
BIN
mc_test/fonts/KasperskySansDisplay-Lt.ttf
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySansDisplay-Lt.woff
Executable file
BIN
mc_test/fonts/KasperskySansDisplay-Lt.woff
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySansDisplay-Lt.woff2
Executable file
BIN
mc_test/fonts/KasperskySansDisplay-Lt.woff2
Executable file
Binary file not shown.
BIN
mc_test/fonts/KasperskySansDisplay-Md.eot
Executable file
BIN
mc_test/fonts/KasperskySansDisplay-Md.eot
Executable file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user