diff --git a/src/confighttp.cpp b/src/confighttp.cpp index 242d653f..cdcd1911 100644 --- a/src/confighttp.cpp +++ b/src/confighttp.cpp @@ -142,7 +142,9 @@ namespace confighttp { auto fg = util::fail_guard([&]() { if (needsRedirect) { - send_redirect(response, request, "/login"); + std::string redir_path = "/login?redir=."; + redir_path += request->path; + send_redirect(response, request, redir_path.c_str()); } else { send_unauthorized(response, request); } @@ -247,6 +249,11 @@ namespace confighttp { return; } + if (config::sunshine.username.empty()) { + send_redirect(response, request, "/welcome"); + return; + } + fetchStaticPage(response, request, "login.html", false); } diff --git a/src_assets/common/assets/web/login.html b/src_assets/common/assets/web/login.html index 7f6676e5..06ca0660 100644 --- a/src_assets/common/assets/web/login.html +++ b/src_assets/common/assets/web/login.html @@ -91,7 +91,14 @@ if (res.status === 200) { this.success = true; localStorage.setItem('login', JSON.stringify(this.passwordData)); - location.href = './'; + const url = new URL(window.location); + const redirectUrl = url.searchParams.get('redir'); + const hash = url.hash; + if (redirectUrl) { + location.href = redirectUrl + hash; + } else { + location.href = './' + hash; + } } else { if (res.status === 401) { throw new Error('Please check your username and password')