PageSourceSearch

https://vm.us.frontline.cloud/

html frontline.cloud collected 2026-10-03 21:07:52 UTC 17,514 bytes, 405 lines download raw bytes

1<!doctype html>
2<html lang="en">
3  <head>
4    
4<script data-server-standalone-bootstrap>window.__VM_STANDALONE_INIT__={"APPINIT":"{\"name\": \"Fortra\", \"branded_title\": \"Fortra Vulnerability Management\", \"branded_title_short\": \"Fortra VM\", \"primary_color\": \"#006a56\", \"secondary_color\": \"#8fe5f2\", \"url\": \"https://fortra.com\", \"powered_by_name\": \"Fortra\", \"powered_by_url\": \"https://www.fortra.com\", \"phone\": \"1-888-273-1412\", \"email\": \"[email protected]\", \"logo\": \"/themes/c6d7ce01d2ac449fbdcb9b72a9847c97/fortra-logomark-sky-bluex32.png\", \"login_logo\": \"/themes/c6d7ce01d2ac449fbdcb9b72a9847c97/Login_Logo_fortra-logo-sky-blue_180x31.png\", \"favicon\": \"/themes/c6d7ce01d2ac449fbdcb9b72a9847c97/fortra-logomark-forest-greenx32.ico\", \"security_seal_logo\": \"/themes/c6d7ce01d2ac449fbdcb9b72a9847c97/Fortra_Icon-green.jpg\", \"security_seal_alt_logo\": null, \"report_watermark\": \"/themes/c6d7ce01d2ac449fbdcb9b72a9847c97/Fortra_Report_Cover.pdf\", \"report_watermark_landscape\": \"/themes/c6d7ce01d2ac449fbdcb9b72a9847c97/backgrounds_landscape.pdf\", \"is_themed\": false, \"theme_name\": \"Fortra VM\", \"current_year\": 2026}","shell_base_url":"/","api_base_url":"/api","session_api_path":"/api/session_v2/","api_surface_mode":"legacy","tld":"us.frontline.cloud","build_version":"20260918.0740-52584-5b89c28de35df1c0d1fd55cab841b848a6cd5d3b","full_version":"7.10.2-20260918.0740-52584-5b89c28de35df1c0d1fd55cab841b848a6cd5d3b","display_version":"7.10.2","standalone_host":"https://vm.us.frontline.cloud","on_prem":false,"platform_host":"https://platform.fortra.com/vm","vhost":"","default_api_region":"us","is_multiregion":true,"available_regions":[],"allow_public_api_docs":true,"userpilot_app_token":"NX-16a95c94","userpilot_instance_id":"prod-us"};</script>
4
5    <meta charset="UTF-8" />
6    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7    <title>Fortra VM | loading ...</title>
8    <style>
9      :root {
10        --vm-shell-primary-color: #006a56;
11        --vm-shell-secondary-color: #8fe5f2;
12        --vm-shell-page-background: #f6f7f9;
13      }
14
15      html,
16      body,
17      #root {
18        margin: 0;
19        min-height: 100%;
20      }
21
22      body {
23        background: var(--vm-shell-page-background);
24        color: #1a1f24;
25        font-family: "IBM Plex Sans", "Helvetica Neue", sans-serif;
26      }
27
28      .standalone-shell__preload {
29        min-height: 100vh;
30        display: flex;
31        align-items: center;
32        justify-content: center;
33        background: var(--vm-shell-primary-color);
34        color: #ffffff;
35      }
36
37      .standalone-shell__preload-inner {
38        display: flex;
39        flex-direction: column;
40        align-items: center;
41        gap: 1rem;
42        text-align: center;
43        padding: 2rem;
44      }
45
46      .standalone-shell__preload-logo {
47        max-height: 56px;
48        width: auto;
49      }
50
51      .standalone-shell__preload-brand {
52        font-size: 1.5rem;
53        font-weight: 700;
54        letter-spacing: 0.08em;
55        text-transform: uppercase;
56      }
57
58      .standalone-shell__preload-copy {
59        opacity: 0.88;
60      }
61    </style>
62    
62<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/system.min.js"></script>
62
63    
63<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/extras/amd.min.js"></script>
63
64    
64<script type="systemjs-importmap">
65      {
66        "imports": {
67          "single-spa": "https://cdn.jsdelivr.net/npm/[email protected]/lib/system/single-spa.min.js",
68          "@fortra-platform/vm-auth": "/platform/fortra-platform-vm-auth.js",
69          "@fortra-platform/vm-legacy": "/platform/fortra-platform-vm-legacy.js",
70          "@fortra-platform/vm-react": "/platform/fortra-platform-vm-react.js"
71        }
72      }
73    </script>
73
74    
74<script>
75      (function () {
76        var DEFAULT_APP_INIT = {
77          name: 'Fortra',
78          branded_title: 'Fortra Vulnerability Management',
79          branded_title_short: 'Fortra VM',
80          primary_color: '#006a56',
81          secondary_color: '#8fe5f2',
82          url: 'https://fortra.com',
83          phone: '1-888-273-1412',
84          email: '[email protected]',
85          logo: '/static/img/fortra_logo.png',
86          login_logo: '/static/img/fortra_logo-reversed.png',
87          favicon: '/favicon.ico',
88          theme_name: 'Fortra VM',
89          is_themed: false
90        };
91        var ON_PREM_SHELL_BASE_URL = '/fvm/ui';
92        var REQUIRED_APP_INIT_FIELDS = ['branded_title', 'branded_title_short'];
93
94        function asRecord(value) {
95          return value && typeof value === 'object' ? value : {};
96        }
97
98        function isRecord(value) {
99          return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
100        }
101
102        function asString(value, fallback) {
103          return typeof value === 'string' && value.trim() ? value : (fallback || '');
104        }
105
106        function parseAppInit(value) {
107          if (value === undefined || value === null || value === '') {
108            throw new Error('Standalone bootstrap is missing required APPINIT configuration.');
109          }
110
111          var parsedValue = value;
112          if (typeof value === 'string') {
113            if (!value.trim()) {
114              throw new Error('Standalone bootstrap APPINIT cannot be empty.');
115            }
116
117            try {
118              parsedValue = JSON.parse(value);
119            } catch (_error) {
120              throw new Error('Standalone bootstrap APPINIT must be valid JSON.');
121            }
122          }
123
124          if (!isRecord(parsedValue) || Object.keys(parsedValue).length === 0) {
125            throw new Error('Standalone bootstrap APPINIT must be a non-empty object.');
126          }
127
128          var missingFields = REQUIRED_APP_INIT_FIELDS.filter(function (field) {
129            return !asString(parsedValue[field]);
130          });
131          if (missingFields.length) {
132            throw new Error('Standalone bootstrap APPINIT is missing required fields: ' + missingFields.join(', ') + '.');
133          }
134
135          return parsedValue;
136        }
137
138        function normalizeBaseUrl(value) {
139          var raw = String(value || '').trim();
140          var candidate = raw || '/';
141          var withLeadingSlash = candidate.charAt(0) === '/' ? candidate : '/' + candidate;
142          if (withLeadingSlash === '/') {
143            return '/';
144          }
145          return withLeadingSlash.replace(/\/+$/, '');
146        }
147
148        function deriveShellBaseUrlFromLocation(pathname) {
149          var normalizedPathname = String(pathname || '/');
150          if (isPathAtBase(normalizedPathname, '/standalone-shell')) {
151            return '/standalone-shell';
152          }
153          if (isPathAtBase(normalizedPathname, ON_PREM_SHELL_BASE_URL)) {
154            return ON_PREM_SHELL_BASE_URL;
155          }
156          if (isDeploymentStandaloneLegacyRoute(normalizedPathname)) {
157            return '/';
158          }
159          var productRootMatch = normalizedPathname.match(/^\/(vm|was)(?=\/|$)/);
160          return productRootMatch ? '/' + productRootMatch[1] : '/';
161        }
162
163        function isPathAtBase(pathname, baseUrl) {
164          return (
165            pathname === baseUrl ||
166            pathname.indexOf(baseUrl + '/') === 0 ||
167            pathname.indexOf(baseUrl + '?') === 0 ||
168            pathname.indexOf(baseUrl + '#') === 0
169          );
170        }
171
172        function isDeploymentStandaloneLegacyRoute(pathname) {
173          return /^\/(?:vm|was)\/[^/]+\/account\/[^/]+(?:\/|$)/.test(String(pathname || '/'));
174        }
175
176        function isEmbeddedProductShellRoute(pathname) {
177          return /^\/(?:vm|was)\/(?:ng|re|auth)(?:\/|$)/.test(String(pathname || '/'));
178        }
179
180        function normalizeStandaloneShellBaseUrl(configuredShellBaseUrl, inferredShellBaseUrl, pathname) {
181          var normalizedConfiguredShellBaseUrl = configuredShellBaseUrl
182            ? normalizeBaseUrl(configuredShellBaseUrl)
183            : undefined;
184
185          if (
186            normalizedConfiguredShellBaseUrl &&
187            /^\/(?:vm|was)$/.test(normalizedConfiguredShellBaseUrl) &&
188            isDeploymentStandaloneLegacyRoute(pathname)
189          ) {
190            return '/';
191          }
192
193          if (
194            normalizedConfiguredShellBaseUrl === '/' &&
195            /^\/(?:vm|was)$/.test(inferredShellBaseUrl) &&
196            isEmbeddedProductShellRoute(pathname)
197          ) {
198            return inferredShellBaseUrl;
199          }
200
201          return configuredShellBaseUrl || inferredShellBaseUrl;
202        }
203
204        function deriveApiBaseUrlFromShellBase(shellBaseUrl) {
205          var normalizedShellBaseUrl = normalizeBaseUrl(shellBaseUrl);
206          return normalizedShellBaseUrl === ON_PREM_SHELL_BASE_URL
207            ? normalizedShellBaseUrl + '/api'
208            : '/api';
209        }
210
211        function prefixOnPremBrowserPath(path, shellBaseUrl) {
212          var candidate = asString(path);
213          var normalizedShellBaseUrl = normalizeBaseUrl(shellBaseUrl);
214          if (
215            !candidate ||
216            normalizedShellBaseUrl !== ON_PREM_SHELL_BASE_URL ||
217            isPathAtBase(candidate, ON_PREM_SHELL_BASE_URL) ||
218            candidate.charAt(0) !== '/' ||
219            candidate.indexOf('//') === 0
220          ) {
221            return candidate;
222          }
223
224          return ON_PREM_SHELL_BASE_URL + candidate;
225        }
226
227        function prefixAppInitBrowserPaths(appInit, shellBaseUrl) {
228          appInit.logo = prefixOnPremBrowserPath(appInit.logo, shellBaseUrl);
229          appInit.login_logo = prefixOnPremBrowserPath(appInit.login_logo, shellBaseUrl);
230          appInit.favicon = prefixOnPremBrowserPath(appInit.favicon, shellBaseUrl);
231          appInit.company_logo = prefixOnPremBrowserPath(appInit.company_logo, shellBaseUrl);
232          return appInit;
233        }
234
235        function asBoolean(value) {
236          return value === true;
237        }
238
239        function asStringArray(value) {
240          if (!Array.isArray(value)) {
241            return undefined;
242          }
243
244          return value.filter(function (item) {
245            return typeof item === 'string' && Boolean(item.trim());
246          });
247        }
248
249        function normalizePayload(raw) {
250          var source = asRecord(raw);
251          var appInitSource = parseAppInit(source.APPINIT);
252          var pathname = window.location.pathname;
253          var configuredShellBaseUrl = asString(source.shell_base_url || source.shellBaseUrl);
254          var apiBaseUrl = asString(source.api_base_url || source.apiBaseUrl);
255          var inferredShellBaseUrl = deriveShellBaseUrlFromLocation(pathname);
256          var shellBaseUrl = normalizeStandaloneShellBaseUrl(
257            configuredShellBaseUrl,
258            inferredShellBaseUrl,
259            pathname
260          );
261          if (!apiBaseUrl) {
262            apiBaseUrl = deriveApiBaseUrlFromShellBase(shellBaseUrl);
263          }
264          var appInit = {
265            name: asString(appInitSource.name, DEFAULT_APP_INIT.name),
266            branded_title: asString(appInitSource.branded_title, DEFAULT_APP_INIT.branded_title),
267            branded_title_short: asString(appInitSource.branded_title_short, DEFAULT_APP_INIT.branded_title_short),
268            primary_color: asString(appInitSource.primary_color, DEFAULT_APP_INIT.primary_color),
269            secondary_color: asString(appInitSource.secondary_color, DEFAULT_APP_INIT.secondary_color),
270            url: asString(appInitSource.url, DEFAULT_APP_INIT.url),
271            phone: asString(appInitSource.phone, DEFAULT_APP_INIT.phone),
272            email: asString(appInitSource.email, DEFAULT_APP_INIT.email),
273            logo: asString(appInitSource.logo, DEFAULT_APP_INIT.logo),
274            login_logo: asString(appInitSource.login_logo, DEFAULT_APP_INIT.login_logo),
275            favicon: asString(appInitSource.favicon, DEFAULT_APP_INIT.favicon),
276            theme_name: asString(appInitSource.theme_name, DEFAULT_APP_INIT.theme_name),
277            is_themed: typeof appInitSource.is_themed === 'boolean' ? appInitSource.is_themed : false
278          };
279          appInit = prefixAppInitBrowserPaths(appInit, shellBaseUrl);
280
281          return {
282            appInit: appInit,
283            APPINIT: JSON.stringify(appInit),
284            shellBaseUrl: shellBaseUrl,
285            apiBaseUrl: apiBaseUrl,
286            sessionApiPath: normalizeSessionApiPath(source.session_api_path || source.sessionApiPath),
287            apiSurfaceMode: asString(source.api_surface_mode || source.apiSurfaceMode),
288            buildVersion: asString(source.build_version || source.buildVersion),
289            fullVersion: asString(source.full_version || source.fullVersion),
290            displayVersion: asString(source.display_version || source.displayVersion),
291            standaloneHost: asString(source.standalone_host || source.standaloneHost),
292            tld: asString(source.tld),
293            onPrem: asBoolean(source.on_prem) || asBoolean(source.onPrem),
294            fortraVmPlatformUrl: asString(
295              source.FORTRA_VM_PLATFORM_URL || source.platform_host || source.fortraVmPlatformUrl
296            ),
297            vhost: asString(source.vhost),
298            defaultApiRegion: asString(source.default_api_region || source.defaultApiRegion),
299            isMultiregion: asBoolean(source.is_multiregion) || asBoolean(source.isMultiregion),
300            availableRegions: asStringArray(source.available_regions || source.availableRegions),
301            allowPublicApiDocs: source.allow_public_api_docs === true || source.allowPublicApiDocs === true,
302            userpilotAppToken: asString(source.userpilot_app_token || source.userpilotAppToken),
303            userpilotInstanceId: asString(source.userpilot_instance_id || source.userpilotInstanceId)
304          };
305        }
306
307        function normalizeSessionApiPath(path) {
308          var raw = asString(path);
309          if (!raw) {
310            return undefined;
311          }
312          var withLeadingSlash = raw.charAt(0) === '/' ? raw : '/' + raw;
313          return withLeadingSlash.replace(/\/?$/, '/');
314        }
315
316        function toAssetUrl(value) {
317          var candidate = asString(value);
318          if (!candidate) {
319            return '';
320          }
321
322          if (/^(https?:)?\/\//.test(candidate) || candidate.indexOf('data:') === 0) {
323            return candidate;
324          }
325
326          return new URL(candidate, window.location.origin).toString();
327        }
328
329        function ensureFaviconLink() {
330          var existing = document.querySelector('link[rel="icon"], link[rel="shortcut icon"]');
331
332          if (existing && existing.tagName === 'LINK') {
333            return existing;
334          }
335
336          var link = document.createElement('link');
337          link.rel = 'icon';
338          document.head.appendChild(link);
339          return link;
340        }
341
342        function apply(payload) {
343          var appInit = payload.appInit;
344          var loginLogoUrl = toAssetUrl(appInit.login_logo || appInit.logo);
345          var faviconUrl = toAssetUrl(appInit.favicon);
346          var headerLogoUrl = toAssetUrl(appInit.logo || appInit.company_logo);
347
348          document.title = appInit.branded_title_short + ' | loading ...';
349          document.documentElement.style.setProperty('--vm-shell-primary-color', appInit.primary_color);
350          document.documentElement.style.setProperty('--vm-shell-secondary-color', appInit.secondary_color);
351
352          if (faviconUrl) {
353            var favicon = ensureFaviconLink();
354            favicon.href = faviconUrl;
355            favicon.type = 'image/x-icon';
356          }
357
358          var shortBrand = document.querySelector('[data-standalone-brand-short]');
359          if (shortBrand) {
360            shortBrand.textContent = appInit.branded_title_short;
361          }
362
363          var longBrand = document.querySelector('[data-standalone-brand-long]');
364          if (longBrand) {
365            longBrand.textContent = appInit.branded_title;
366          }
367
368          var preloadLogo = document.querySelector('[data-standalone-brand-logo]');
369          if (preloadLogo && preloadLogo.tagName === 'IMG') {
370            preloadLogo.src = loginLogoUrl || headerLogoUrl;
371            preloadLogo.alt = appInit.branded_title_short;
372            preloadLogo.hidden = !(loginLogoUrl || headerLogoUrl);
373          }
374
375          window.__VM_STANDALONE_INIT__ = payload;
376        }
377
378        window.__VM_STANDALONE_INIT_PROMISE__ = window.__VM_STANDALONE_INIT__
379          ? Promise.resolve(normalizePayload(window.__VM_STANDALONE_INIT__)).then(function (payload) {
380              apply(payload);
381              return payload;
382            })
383          : Promise.resolve(normalizePayload({ APPINIT: DEFAULT_APP_INIT })).then(function (payload) {
384              apply(payload);
385              return payload;
386            });
387      })();
388    </script>
388
389    
389<script type="module" crossorigin src="/standalone-shell/assets/index-CdGGxXJb.js"></script>
389
390    <link rel="stylesheet" crossorigin href="/standalone-shell/assets/index-BXDcvyCL.css">
391  </head>
392  <body>
393    <div id="root">
394      <div class="standalone-shell__preload">
395        <div class="standalone-shell__preload-inner">
396          <img class="standalone-shell__preload-logo" data-standalone-brand-logo hidden />
397          <div class="standalone-shell__preload-brand" data-standalone-brand-short>Fortra VM</div>
398          <div class="standalone-shell__preload-copy" data-standalone-brand-long>
399            Fortra Vulnerability Management
400          </div>
401        </div>
402      </div>
403    </div>
404  </body>
405  </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.