Compare commits

...

2 Commits

Author SHA1 Message Date
Shayne Sweeney 1dc9edde90
cmd/tailscale/cli: [web] update JS in web.html for Unraid support
Signed-off-by: Shayne Sweeney <shayne@tailscale.com>
2023-05-16 20:34:30 -04:00
Derek Kaser b15d8525d0 cmd/tailscale: allow Tailscale to work with Unraid web interface
Updates tailscale/tailscale#8026

Signed-off-by: Derek Kaser <derek.kaser@gmail.com>
2023-05-06 22:35:02 -04:00
2 changed files with 26 additions and 6 deletions

View File

@ -61,6 +61,8 @@ type tmplData struct {
TUNMode bool TUNMode bool
IsSynology bool IsSynology bool
DSMVersion int // 6 or 7, if IsSynology=true DSMVersion int // 6 or 7, if IsSynology=true
IsUnraid bool
UnraidToken string
IPNVersion string IPNVersion string
} }
@ -440,6 +442,8 @@ func webHandler(w http.ResponseWriter, r *http.Request) {
LicensesURL: licensesURL(), LicensesURL: licensesURL(),
TUNMode: st.TUN, TUNMode: st.TUN,
IsSynology: distro.Get() == distro.Synology || envknob.Bool("TS_FAKE_SYNOLOGY"), IsSynology: distro.Get() == distro.Synology || envknob.Bool("TS_FAKE_SYNOLOGY"),
IsUnraid: distro.Get() == distro.Unraid,
UnraidToken: os.Getenv("UNRAID_CSRF_TOKEN"),
DSMVersion: distro.DSMVersion(), DSMVersion: distro.DSMVersion(),
IPNVersion: versionShort, IPNVersion: versionShort,
} }

View File

@ -116,10 +116,12 @@
<a class="text-xs text-gray-500 hover:text-gray-600" href="{{ .LicensesURL }}">Open Source Licenses</a> <a class="text-xs text-gray-500 hover:text-gray-600" href="{{ .LicensesURL }}">Open Source Licenses</a>
</footer> </footer>
<script>(function () { <script>(function () {
const advertiseExitNode = {{.AdvertiseExitNode}}; const advertiseExitNode = {{ .AdvertiseExitNode }};
const isUnraid = {{ .IsUnraid }};
const unraidCsrfToken = "{{ .UnraidToken }}";
let fetchingUrl = false; let fetchingUrl = false;
var data = { var data = {
AdvertiseRoutes: "{{.AdvertiseRoutes}}", AdvertiseRoutes: "{{ .AdvertiseRoutes }}",
AdvertiseExitNode: advertiseExitNode, AdvertiseExitNode: advertiseExitNode,
Reauthenticate: false, Reauthenticate: false,
ForceLogout: false ForceLogout: false
@ -141,15 +143,25 @@ function postData(e) {
} }
const nextUrl = new URL(window.location); const nextUrl = new URL(window.location);
nextUrl.search = nextParams.toString() nextUrl.search = nextParams.toString()
const url = nextUrl.toString();
let contentType = "application/json";
let body = JSON.stringify(data);
if (isUnraid) {
const params = new URLSearchParams();
params.append("csrf_token", unraidCsrfToken);
params.append("ts_data", JSON.stringify(data));
body = params.toString();
contentType = "application/x-www-form-urlencoded;charset=UTF-8";
}
const url = nextUrl.toString();
fetch(url, { fetch(url, {
method: "POST", method: "POST",
headers: { headers: {
"Accept": "application/json", "Accept": "application/json",
"Content-Type": "application/json", "Content-Type": contentType,
}, },
body: JSON.stringify(data) body: body
}).then(res => res.json()).then(res => { }).then(res => res.json()).then(res => {
fetchingUrl = false; fetchingUrl = false;
const err = res["error"]; const err = res["error"];
@ -158,7 +170,11 @@ function postData(e) {
} }
const url = res["url"]; const url = res["url"];
if (url) { if (url) {
document.location.href = url; if(isUnraid) {
window.open(url, "_blank");
} else {
document.location.href = url;
}
} else { } else {
location.reload(); location.reload();
} }