network.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. function setupNetworkInterface()
  2. {
  3. let params = new URLSearchParams("?"+window.location.hash.substr(1));
  4. let authKey = params.get("authKey") || undefined;
  5. let controlUrl = params.get("controlUrl") || undefined;
  6. console.log(authKey, controlUrl);
  7. let loginElemUrl = controlUrl ? null : "https://login.tailscale.com/admin/machines";
  8. let resolveLogin = null;
  9. let loginPromise = new Promise((f,r) => {
  10. resolveLogin = f;
  11. });
  12. const loginElem = document.getElementById("loginLink");
  13. const statusElem = document.getElementById("networkStatus");
  14. const loginUrlCb = (url) => {
  15. loginElem.href = url;
  16. loginElem.target = "_blank";
  17. statusElem.innerHTML = "Tailscale Login";
  18. resolveLogin(url);
  19. };
  20. const stateUpdateCb = (state) => {
  21. switch(state)
  22. {
  23. case 6 /*Running*/:
  24. {
  25. if (loginElemUrl) {
  26. loginElem.href = loginElemUrl;
  27. }
  28. break;
  29. }
  30. }
  31. };
  32. const netmapUpdateCb = (map) => {
  33. const ip = map.self.addresses[0];
  34. statusElem.innerHTML = "IP: "+ip;
  35. };
  36. loginElem.style.cursor = "pointer";
  37. statusElem.style.color = "white";
  38. return {
  39. loginUrlCb,
  40. stateUpdateCb,
  41. netmapUpdateCb,
  42. authKey,
  43. controlUrl,
  44. loginElem,
  45. statusElem,
  46. loginElemUrl,
  47. loginPromise,
  48. };
  49. }
  50. function registerNetworkLogin(cx, { authKey, statusElem, loginElem, loginElemUrl, loginPromise })
  51. {
  52. if (authKey) {
  53. if (loginElemUrl) {
  54. loginElem.href = loginElemUrl;
  55. loginElem.target = "_blank";
  56. }
  57. cx.networkLogin();
  58. } else {
  59. loginElem.onclick = () => {
  60. loginElem.onclick = null;
  61. statusElem.innerHTML = "Downloading network code...";
  62. const w = window.open("login.html", "_blank");
  63. async function waitLogin() {
  64. await cx.networkLogin();
  65. statusElem.innerHTML = "Starting login...";
  66. const url = await loginPromise;
  67. w.location.href = url;
  68. }
  69. waitLogin();
  70. };
  71. }
  72. }