<!doctype html><html><head><title>Netdata Registry</title><meta name="application-name" content="netdata"/><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><meta charset="utf-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,minimum-scale=1"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/></head><body><script>var getBasename = function() { var pathRegex = /\/(v2\/)?registry-access.html?.*/ return window.location.origin + window.location.pathname.replace(pathRegex, "") } function doRegistryAccess(parentHelloData, originUrl) { const helloPromise = !parentHelloData ? fetch(originUrl + "/api/v1/registry?action=hello", { cache: "no-cache", credentials: "include" }) .then(function(response) { return response.json() }) : Promise.resolve(parentHelloData) helloPromise.then(function(data) { var retries = 3 var nodes = data.nodes || [] var doAccess = function(mg, nm, token) { fetch(data.registry + '/api/v1/registry?action=access&machine=' + (mg || data.machine_guid) + '&name=' + encodeURIComponent(nm || data.hostname) + '&url=' + encodeURIComponent(originUrl) + '&agent=' + (data.agent ? data.agent.machine_guid : ""), { cache: "no-cache", credentials: "include", headers: { Authorization: 'Bearer ' + (token || localStorage.getItem("registry-netdata-token")) } }) .then(function(response) { return response.json() }) .then(function(data) { var token = data.person_guid if (data.status === "redirect" && retries > 0) { retries = retries - 1 doAccess(data.machine_guid, data.hostname, token) } if (data.status === "ok") { localStorage.setItem("registry-netdata-token", token) node = nodes.pop() if (!!node) { setTimeout(function () { doAccess(node.machine_guid, node.hostname, token) }, 1000) } } window.parent.postMessage(data, "*"); }) } doAccess(data.machine_guid, data.hostname) }) } try { var searchParams = new URLSearchParams(location.search) urlHelloData = searchParams.get("x") var parentHelloData = JSON.parse(atob(urlHelloData)) doRegistryAccess(parentHelloData, searchParams.get("originUrl")) } catch(e) { // do nothing } function isValidHttpUrl(string) { var url; try { return true } catch (_) { return false; } } window.addEventListener('message', function(event) { var isNetdataMessage = Array.isArray(event.data) ? event.data.length === 3 ? event.data[0] === "netdata-registry" : isValidHttpUrl(event.data[0]) : true if (!isNetdataMessage) return var originUrl = Array.isArray(event.data) ? event.data.length === 3 ? event.data[1] : event.data[0] : event.data var parentHelloData = Array.isArray(event.data) ? event.data.length === 3 ? event.data[2] : event.data[1] : null doRegistryAccess(parentHelloData, originUrl) });</script></body></html>