UNPKG

vpn_based_remote_access_system

Version:

毕设:基于OpenVPN的远程访问系统

194 lines (181 loc) 8.9 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>用户界面</title> </head> <body> <h2>VPN远程访问系统</h2> <div id="userInfo"> <p id="usernameDisplay">用户名: 未知</p> <p id="ipDisplay">IP地址: 未知</p> <p id="lastLoginDisplay">上次登录时间: 未知</p> <div id="port"> <p id="portDisplay">代理端口号: 未知</p> <button id="allocatePortButton">分配</button> <button id="downloadButton">获取用户配置文件</button> </div> <div id="serverStart"> <label for="serverStartDuration">服务器启动时长(分钟):</label> <input id="serverStartDuration" type="number" min="1" max="60" value="1"> <button id="startServerButton">启动</button> </div> <a href="http://172.22.245.1:5140"> 测试链接1 - 172.22.245.1:5140 </a> </div> <div id="serverStatus"> <p id="serverStatusDisplay">服务器状态: 未知</p> <button id="stopServerButton">关闭服务器</button> </div> <button id="logoutButton">退出登录</button> <button id="unregisterButton">注销账号</button> <script> document.addEventListener("DOMContentLoaded", async () => { try { // 发送请求获取用户信息 const response = await fetch("/getUserInfo"); const userInfo = await response.json(); // 显示用户名、IP、上次登录时间和端口号 const usernameDisplay = document.getElementById("usernameDisplay"); const ipDisplay = document.getElementById("ipDisplay"); const lastLoginDisplay = document.getElementById("lastLoginDisplay"); const portDisplay = document.getElementById("portDisplay"); if (userInfo && userInfo.username && userInfo.ip) { usernameDisplay.textContent = `用户名: ${userInfo.username}`; ipDisplay.textContent = `IP地址: ${userInfo.ip}`; lastLoginDisplay.textContent = `上次登录时间: ${userInfo.last_login_at}`; portDisplay.textContent = `分配代理端口号: ${userInfo.port}`; } else { usernameDisplay.textContent = "用户名: 未登录"; ipDisplay.textContent = "IP地址: 无"; lastLoginDisplay.textContent = "上次登录时间: 无"; portDisplay.textContent = "分配代理端口号: 无"; } } catch (error) { console.error("Error fetching user information:", error); } // 分配端口号 document.getElementById("allocatePortButton").addEventListener("click", async () => { try { const response = await fetch("/allocatePort", { method: "POST" }); const portInfo = await response.json(); if (portInfo && portInfo.port) { const portDisplay = document.getElementById("portDisplay"); portDisplay.textContent = `分配代理端口号: ${portInfo.port}`; } } catch (error) { console.error("Error allocating port:", error); } }); // 退出登录 document.getElementById("logoutButton").addEventListener("click", async () => { try { const response = await fetch("/logout", { method: "GET" }); const data = await response.json(); if (data.redirect) { window.location.href = data.redirect; } } catch (error) { console.error("Error logging out:", error); } }); // 注销 document.getElementById("unregisterButton").addEventListener("click", async () => { try { const response = await fetch("/unregister", { method: "POST" }); const data = await response.json(); if (data.success) { alert("账号已成功注销"); if (data.redirect) { window.location.href = data.redirect; } } else { alert("注销失败"); } } catch (error) { console.error("Error unregistering account:", error); } }); // 启动代理服务器 document.getElementById("startServerButton").addEventListener("click", async () => { const serverStartDuration = document.getElementById("serverStartDuration").value; if (serverStartDuration < 1 || serverStartDuration > 60) { alert("时间范围应在1到60之间"); return; } try { const portDisplay = document.getElementById("portDisplay").textContent.replace("已分配的代理端口号: ", ""); const response = await fetch("/tryStart", { method: "POST", headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ serverStartDuration }) }); const result = await response.json(); if (result && result.success) { alert("代理服务启动成功"); } else { alert("代理服务启动失败"); } } catch (error) { console.error("Error starting server:", error); } }); }); // 下载配置文件 document.getElementById("downloadButton").addEventListener("click", async () => { try { const response = await fetch("/downloadFile", { method: "GET" }); if (!response.ok) { throw new Error('Failed downloading'); } const fileData = await response.blob(); const url = window.URL.createObjectURL(new Blob([fileData])); const link = document.createElement('a'); link.href = url; link.setAttribute('download', 'client.ovpn'); document.body.appendChild(link); link.click(); link.parentNode.removeChild(link); } catch (error) { console.error("Error downloading file:", error); } }); document.addEventListener("DOMContentLoaded", function () { async function checkServerStatus() { const port = document.getElementById("portDisplay").textContent.replace("分配代理端口号: ", ""); //console.log(port); try { const response = await fetch(`/server/status?port=${port}`); const { status } = await response.json(); document.getElementById("serverStatusDisplay").textContent = `服务器状态: ${status}`; } catch (error) { console.error("Error checking server status:", error); } } async function stopServer() { const port = document.getElementById("portDisplay").textContent.replace("分配代理端口号: ", ""); console.log(port) try { await fetch(`/server/stop`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ port }) }); alert("服务器已关闭"); await checkServerStatus(); } catch (error) { console.error("Error stopping server:", error); } } document.getElementById("stopServerButton").addEventListener("click", stopServer); checkServerStatus(); setInterval(checkServerStatus, 2000); }); </script> </body> </html>