registry-hello.html 4.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <!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() {
  2. var pathRegex = /\/(v2\/)?registry-hello.html?.*/
  3. return window.location.origin + window.location.pathname.replace(pathRegex, "")
  4. }
  5. function doRegistryAccess(parentHelloData, originUrl) {
  6. const helloPromise = !parentHelloData
  7. ? fetch(originUrl + "/api/v1/registry?action=hello", { cache: "no-cache", credentials: "include" })
  8. .then(function(response) { return response.json() })
  9. : Promise.resolve(parentHelloData)
  10. helloPromise.then(function(data) {
  11. var retries = 3
  12. var nodes = data.nodes || []
  13. var doAccess = function(mg, nm, token) {
  14. 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")) } })
  15. .then(function(response) { return response.json() })
  16. .then(function(data) {
  17. var token = data.person_guid
  18. if (data.status === "redirect" && retries > 0) {
  19. retries = retries - 1
  20. doAccess(data.machine_guid, data.hostname, token)
  21. }
  22. if (data.status === "ok") {
  23. localStorage.setItem("registry-netdata-token", token)
  24. node = nodes.pop()
  25. if (!!node) {
  26. setTimeout(function () {
  27. doAccess(node.machine_guid, node.hostname, token)
  28. }, 1000)
  29. }
  30. }
  31. window.parent.postMessage(data, "*");
  32. })
  33. }
  34. doAccess(data.machine_guid, data.hostname)
  35. })
  36. }
  37. try {
  38. var searchParams = new URLSearchParams(location.search)
  39. var url = searchParams.get("url")
  40. var mg = searchParams.get("agent_machine_guid")
  41. var tr_i = searchParams.get("transition_id")
  42. fetch(url + "/api/v1/registry?action=hello", { cache: "no-cache", credentials: "include" })
  43. .then(function(response) { return response.json() })
  44. .then(function(helloData) {
  45. window.parent.postMessage({
  46. mg: mg,
  47. tr_i: tr_i,
  48. hostname: helloData.hostname,
  49. url: url,
  50. isSame: mg === (helloData.agent ? helloData.agent.machine_guid : helloData.machine_guid)
  51. }, "*");
  52. }).catch(() => {
  53. window.parent.postMessage({
  54. mg: mg,
  55. tr_i: tr_i,
  56. url: url,
  57. isSame: false,
  58. hasError: true
  59. }, "*");
  60. })
  61. doRegistryAccess(parentHelloData, searchParams.get("originUrl"))
  62. } catch(e) {
  63. // do nothing
  64. }
  65. function isValidHttpUrl(string) {
  66. var url;
  67. try {
  68. return true
  69. } catch (_) {
  70. return false;
  71. }
  72. }
  73. window.addEventListener('message', function(event) {
  74. var isNetdataMessage = Array.isArray(event.data) ? event.data.length === 3 ? event.data[0] === "netdata-registry" : isValidHttpUrl(event.data[0]) : true
  75. if (!isNetdataMessage) return
  76. var originUrl = Array.isArray(event.data) ? event.data.length === 3 ? event.data[1] : event.data[0] : event.data
  77. var parentHelloData = Array.isArray(event.data) ? event.data.length === 3 ? event.data[2] : event.data[1] : null
  78. doRegistryAccess(parentHelloData, originUrl)
  79. });</script></body></html>