69 lines
1.7 KiB
JavaScript
69 lines
1.7 KiB
JavaScript
|
import { State } from "/tun/tailscale_tun.js";
|
||
|
import { autoConf } from "/tun/tailscale_tun_auto.js";
|
||
|
|
||
|
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:
|
||
|
{
|
||
|
loginElem.href = "https://login.tailscale.com/admin/machines";
|
||
|
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,
|
||
|
});
|
||
|
window.networkInterface.bind = bind;
|
||
|
window.networkInterface.connect = connect;
|
||
|
window.networkInterface.listen = listen;
|
||
|
window.networkInterface.ready = true;
|
||
|
loginElem.style.cursor = "pointer";
|
||
|
statusElem.style.color = "white";
|
||
|
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();
|
||
|
};
|