PageSourceSearch

https://dlpsoftware.ru/login

html dlpsoftware.ru collected 2026-10-06 07:07:58 UTC 11,184 bytes, 295 lines download raw bytes

1<!DOCTYPE html>
2<html lang="ru">
3    <head>
4        <meta charset="utf-8">
5        <meta name="viewport" content="width=device-width, initial-scale=1">
6        <meta name="csrf-token" content="NgAgWJItw4DvT4ApH8GXzgmiQpWiBvFlFadkY7QP">
7        <title>DLP Software</title>
8        <link rel="icon" href="https://dlpsoftware.ru/favicon.ico" sizes="any">
9<link rel="icon" type="image/png" sizes="32x32" href="https://dlpsoftware.ru/favicon-32x32.png">
10<link rel="icon" type="image/png" sizes="16x16" href="https://dlpsoftware.ru/favicon-16x16.png">
11<link rel="apple-touch-icon" href="https://dlpsoftware.ru/apple-touch-icon.png">
12                    <link rel="preload" as="style" href="https://dlpsoftware.ru/build/assets/app-1UC9nwQy.css" /><link rel="modulepreload" as="script" href="https://dlpsoftware.ru/build/assets/app-D2bYTSPf.js" /><link rel="modulepreload" as="script" href="https://dlpsoftware.ru/build/assets/vue.runtime.esm-bundler-CYb_FA3g.js" /><link rel="stylesheet" href="https://dlpsoftware.ru/build/assets/app-1UC9nwQy.css" />
12<script type="module" src="https://dlpsoftware.ru/build/assets/app-D2bYTSPf.js"></script>
12            
12<script id="browser-logger-active">
13(function() {
14    const ENDPOINT = 'https://dlpsoftware.ru/_boost/browser-logs';
15    const logQueue = [];
16    let flushTimeout = null;
17    const captureTypes = ["error","warning","info","log","debug","table"];
18
19    console.log('🔍 Browser logger active (MCP server detected). Posting to: ' + ENDPOINT);
20
21    // Store original console methods
22    const originalConsole = {
23        log: console.log,
24        debug: console.debug,
25        info: console.info,
26        error: console.error,
27        warn: console.warn,
28        table: console.table
29    };
30
31    // Walk own enumerable keys so JSON.stringify cannot auto-invoke a proxy fake toJSON (e.g. Livewire's `$wire`) and fire a real request.
32    function toSafeValue(value, seen) {
33        if (value === null || typeof value !== 'object') {
34            return value;
35        }
36        if (value instanceof Error) {
37            return { name: value.name, message: value.message, stack: value.stack };
38        }
39        // Date has no own enumerable keys, so the walk below would collapse it to {}.
40        if (value instanceof Date) {
41            return value.toISOString();
42        }
43        if (seen.has(value)) {
44            return '[Circular]';
45        }
46        seen.add(value);
47        if (Array.isArray(value)) {
48            return value.map((item) => toSafeValue(item, seen));
49        }
50        const plain = {};
51        for (const key of Object.keys(value)) {
52            if (key === 'toJSON') continue;
53            try {
54                plain[key] = toSafeValue(value[key], seen);
55            } catch (e) {
56                plain[key] = '[Unreadable]';
57            }
58        }
59        return plain;
60    }
61
62    // Helper to safely stringify values
63    function safeStringify(obj) {
64        return JSON.stringify(toSafeValue(obj, new WeakSet()));
65    }
66
67    // Normalize log type for consistency (e.g., 'warn' to 'warning')
68    function normalizeType(type) {
69        return type === 'warn' ? 'warning' : type;
70    }
71
72    // Determine if a log type should be captured based on configured levels
73    function shouldCapture(type) {
74        return captureTypes.includes(normalizeType(type));
75    }
76
77    // Batch and send logs
78    function flushLogs() {
79        if (logQueue.length === 0) return;
80
81        const batch = logQueue.splice(0, logQueue.length);
82
83        fetch(ENDPOINT, {
84            method: 'POST',
85            headers: {
86                'Content-Type': 'application/json',
87                'X-Requested-With': 'XMLHttpRequest'
88            },
89            body: JSON.stringify({ logs: batch })
90        }).catch(err => {
91            // Silently fail to avoid infinite loops
92            originalConsole.error('Failed to send logs:', err);
93        });
94    }
95
96    // Debounced flush (100ms)
97    function scheduleFlush() {
98        if (flushTimeout) clearTimeout(flushTimeout);
99        flushTimeout = setTimeout(flushLogs, 100);
100    }
101
102    // Intercept console methods
103    ['log', 'debug', 'info', 'error', 'warn', 'table'].forEach(method => {
104        console[method] = function(...args) {
105            // Call original method
106            originalConsole[method].apply(console, args);
107
108            // Capture log data
109            try {
110                if (!shouldCapture(method)) {
111                    return;
112                }
113
114                logQueue.push({
115                    type: method,
116                    timestamp: new Date().toISOString(),
117                    data: args.map(arg => {
118                        try {
119                            return typeof arg === 'object' ? JSON.parse(safeStringify(arg)) : arg;
120                        } catch (e) {
121                            return String(arg);
122                        }
123                    }),
124                    url: window.location.href,
125                    userAgent: navigator.userAgent
126                });
127
128                scheduleFlush();
129            } catch (e) {
130                // Fail silently
131            }
132        };
133    });
134
135    // Global error handlers for uncaught errors
136    const originalOnError = window.onerror;
137    window.onerror = function boostErrorHandler(errorMsg, url, lineNumber, 
137colNumber, error) {
138        try {
139            if (shouldCapture('error')) {
140                logQueue.push({
141                    type: 'uncaught_error',
142                    timestamp: new Date().toISOString(),
143                    data: [{
144                        message: errorMsg,
145                        filename: url,
146                        lineno: lineNumber,
147                        colno: colNumber,
148                        error: error ? {
149                            name: error.name,
150                            message: error.message,
151                            stack: error.stack
152                        } : null
153                    }],
154                    url: window.location.href,
155                    userAgent: navigator.userAgent
156                });
157
158                scheduleFlush();
159            }
160
161        } catch (e) {
162            // Fail silently
163        }
164
165        // Call original handler if it exists
166        if (originalOnError && typeof originalOnError === 'function') {
167            return originalOnError(errorMsg, url, lineNumber, colNumber, error);
168        }
169
170        // Let the error continue to propagate
171        return false;
172    }
173    window.addEventListener('error', (event) => {
174        try {
175            if (!shouldCapture('error')) {
176                return false;
177            }
178
179            logQueue.push({
180                type: 'window_error',
181                timestamp: new Date().toISOString(),
182                data: [{
183                    message: event.message,
184                    filename: event.filename,
185                    lineno: event.lineno,
186                    colno: event.colno,
187                    error: event.error ? {
188                        name: event.error.name,
189                        message: event.error.message,
190                        stack: event.error.stack
191                    } : null
192                }],
193                url: window.location.href,
194                userAgent: navigator.userAgent
195            });
196
197            scheduleFlush();
198        } catch (e) {
199            // Fail silently
200        }
201
202        // Let the error continue to propagate
203        return false;
204    });
205    window.addEventListener('unhandledrejection', (event) => {
206        try {
207            if (!shouldCapture('error')) {
208                return false;
209            }
210
211            logQueue.push({
212                type: 'error',
213                timestamp: new Date().toISOString(),
214                data: [{
215                    message: 'Unhandled Promise Rejection',
216                    reason: toSafeValue(event.reason, new WeakSet())
217                }],
218                url: window.location.href,
219                userAgent: navigator.userAgent
220            });
221
222            scheduleFlush();
223        } catch (e) {
224            // Fail silently
225        }
226
227        // Let the rejection continue to propagate
228        return false;
229    });
230
231    // Flush on page unload
232    window.addEventListener('beforeunload', () => {
233        if (logQueue.length > 0) {
234            navigator.sendBeacon(ENDPOINT, JSON.stringify({ logs: logQueue }));
235        }
236    });
237})();
238</script>
238
239</head>
240    <body class="font-sans text-ink antialiased">
241        <div class="flex min-h-screen flex-col items-center justify-center px-4 py-10 sm:px-6">
242            <a href="https://dlpsoftware.ru" class="inline-flex items-center gap-3 text-ink">
243                <img
244    src="https://dlpsoftware.ru/brand/logo.png"
245    alt="DLP Software"
246    width="512"
247    height="512"
248    decoding="async"
249    class="h-14 w-14 object-contain h-14 w-14"
250>
251                <span class="font-display text-xl font-semibold tracking-tight">DLP Software</span>
252            </a>
253            <div class="glass-card mt-8 w-full max-w-md p-6 sm:p-8">
254                <h1 class="font-display text-2xl font-semibold tracking-tight">Вход</h1>
255    <p class="mt-2 text-sm text-muted">Кабинет вендора и управление карточками продуктов.</p>
256
257    
258    <form method="POST" action="https://dlpsoftware.ru/login" class="mt-6 space-y-4">
259        <input type="hidden" name="_token" value="NgAgWJItw4DvT4ApH8GXzgmiQpWiBvFlFadkY7QP" autocomplete="off">
260        <div>
261            <label class="block text-sm font-semibold text-ink-soft" for="email">
262    Email
263</label>
264            <input  class="field-input mt-1.5 block w-full" id="email" type="email" name="email" required="required" autofocus="autofocus" autocomplete="username">
265                    </div>
266
267        <div>
268            <label class="block text-sm font-semibold text-ink-soft" for="password">
269    Пароль
270</label>
271            <input  class="field-input mt-1.5 block w-full" id="password" type="password" name="password" required="required" autocomplete="current-password">
272                    </div>
273
274        <label for="remember_me" class="inline-flex items-center gap-2">
275            <input id="remember_me" type="checkbox" class="rounded border-border text-accent shadow-sm focus:ring-accent" name="remember">
276            <span class="text-sm text-muted">Запомнить меня</span>
277        </label>
278
279        <div class="flex flex-wrap items-center justify-between gap-3 pt-2">
280                            <a class="auth-link" href="https://dlpsoftware.ru/forgot-password">Забыли пароль?</a>
281                        <button type="submit" class="btn-primary">
282    Войти
283</button>
284        </div>
285
286        <p class="pt-2 text-sm text-muted">
287            Нет аккаунта?
288            <a href="https://dlpsoftware.ru/register" class="font-semibold text-accent-ink hover:text-accent">Зарегистрироваться</a>
289        </p>
290    </form>
291            </div>
292            <a href="https://dlpsoftware.ru" class="mt-6 text-sm font-semibold text-muted transition hover:text-accent-ink">← На сайт</a>
293        </div>
294    </body>
295</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.