1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import { State } from "./tun/tailscale_tun.js";
- import { autoConf } from "./tun/tailscale_tun_auto.js";
- let params = new URLSearchParams("?"+window.location.hash.substr(1));
- let authKey = params.get("authKey") || undefined;
- let controlUrl = params.get("controlUrl") || undefined;
- console.log(authKey, controlUrl);
- let loginElemUrl = controlUrl ? null : "https://login.tailscale.com/admin/machines";
- let resolveLogin = null;
- let loginPromise = new Promise((f,r) => {
- resolveLogin = f;
- });
- const loginElem = document.getElementById("loginLink");
- const statusElem = document.getElementById("networkStatus");
- const loginUrlCb = (url) => {
- loginElem.href = url;
- loginElem.target = "_blank";
- statusElem.innerHTML = "Tailscale Login";
- resolveLogin(url);
- };
- const stateUpdateCb = (state) => {
- switch(state)
- {
- case State.NeedsLogin:
- {
- break;
- }
- case State.Running:
- {
- if (loginElemUrl) {
- loginElem.href = loginElemUrl;
- }
- break;
- }
- case State.Starting:
- {
- break;
- }
- case State.Stopped:
- {
- break;
- }
- case State.NoState:
- {
- break;
- }
- }
- };
- const netmapUpdateCb = (map) => {
- const ip = map.self.addresses[0];
- statusElem.innerHTML = "IP: "+ip;
- };
- const { listen, connect, bind, up } = await autoConf({
- loginUrlCb,
- stateUpdateCb,
- netmapUpdateCb,
- authKey,
- controlUrl,
- });
- window.networkInterface.bind = bind;
- window.networkInterface.connect = connect;
- window.networkInterface.listen = listen;
- window.networkInterface.ready = true;
- loginElem.style.cursor = "pointer";
- statusElem.style.color = "white";
- if (authKey) {
- if (loginElemUrl) {
- loginElem.href = loginElemUrl;
- loginElem.target = "_blank";
- }
- up();
- } else {
- loginElem.onclick = () => {
- loginElem.onclick = null;
- statusElem.innerHTML = "Downloading network code...";
- const w = window.open("login.html", "_blank");
- async function waitLogin() {
- await up();
- statusElem.innerHTML = "Starting login...";
- const url = await loginPromise;
- w.location.href = url;
- }
- waitLogin();
- };
- }
|