MeuHTML


SUBMITTED BY: appcass

DATE: Sept. 13, 2023, 2:13 a.m.

UPDATED: Sept. 13, 2023, 8:02 p.m.

FORMAT: Text only

SIZE: 20.8 kB

HITS: 934

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>GUARDIAN</title>
  8. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css">
  9. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css">
  10. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" integrity="sha512-Fo3rlrZj/k7ujTnHg4CGR2D7kSs0v4LLanw2qksYuRlEzO+tcaEPQogQ0KaoGN26/zrn20ImR1DfuLWnOo7aBA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
  11. <script src="https://cdn.tailwindcss.com">
  12. <link rel="stylesheet" href="css.css">
  13. </script>
  14. <style>
  15. @import url('https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro:wght@400;500;600;700&family=Outfit:wght@100;200;300;400;500;600;700&display=swap');
  16. :root {
  17. /*Editar o modal*/
  18. --btn-modal: #0000003f;
  19. --btn-border: 1px solid #4071FF;
  20. --btn-modal-border: 50px;
  21. --modal-shadow: #ffffff;
  22. --modal-bg: #171e2e;
  23. --modal-icon: #fff;
  24. --config-color: #0000003f;
  25. --category-color: #0000003f;
  26. --text-color: #ffffff;
  27. /*Editar Layout*/
  28. --fundo: #ffffff;
  29. --topo: #F7F7FC;
  30. --icon: #4071FF;
  31. --icon-bg: #E5EAFC;
  32. --config: #F7F7FC;
  33. --box-border: 1px solid #C0C6DE;
  34. --box-bg: transparent;
  35. --box-icon: black;
  36. --info1: #C0C6DE;
  37. --info2: #4071FF;
  38. }
  39. body {
  40. font-family: 'Be Vietnam Pro', sans-serif;
  41. background: var(--fundo);
  42. height: 100vh;
  43. width: 100vw;
  44. justify-content: center;
  45. align-items: center;
  46. }
  47. .container {
  48. display: flex;
  49. flex-direction: row;
  50. justify-content: space-between;
  51. background: var(--topo);
  52. width: 100vw;
  53. padding: 0 auto;
  54. }
  55. button.power-icon {
  56. font-size: 2.5em;
  57. box-shadow: 0 20px 25px 0px #4071ff54, 0 2px 0px 0px #4071ff10;
  58. }
  59. .app-bg-gray-1 {
  60. background: var(--config);
  61. }
  62. .app-bg-gray-2 {
  63. background: var(--icon-bg);
  64. }
  65. .app-bg-gray-3 {
  66. background: #fff;
  67. }
  68. .app-bg-4 {
  69. background: linear-gradient(-45deg, #13cf8e, #13cf8e, #0098ff, #5995fd);
  70. background-size: 400% 400%;
  71. animation: gradient 5s ease infinite;
  72. }
  73. @keyframes gradient {
  74. 0% {
  75. background-position: 0% 50%;
  76. }
  77. 50% {
  78. background-position: 100% 50%;
  79. }
  80. 100% {
  81. background-position: 0% 50%;
  82. }
  83. }
  84. .app-bg-blue {
  85. background: #4071FF;
  86. }
  87. .app-color-blue {
  88. color: #4071FF;
  89. }
  90. .app-color-gray-1 {
  91. color: #C0C6DE;
  92. }
  93. .app-rounded {
  94. border-bottom-left-radius: 50px;
  95. border-bottom-right-radius: 50px;
  96. }
  97. .status {
  98. font-size: 1em;
  99. }
  100. .put {
  101. border-radius: 60px;
  102. }
  103. .icon {
  104. font-size: 0.8em;
  105. color: var(--box-icon);
  106. }
  107. input {
  108. width: 100%;
  109. background: transparent;
  110. border: none;
  111. outline: none;
  112. color: var(--box-typing);
  113. line-height: 1;
  114. font-weight: 600;
  115. font-size: 1.1rem;
  116. }
  117. .box {
  118. border: var(--box-border);
  119. background: var(--box-bg);
  120. }
  121. .tool {
  122. align-items: center;
  123. justify-content: center;
  124. text-align: center;
  125. }
  126. .tool-bt {
  127. background: var(--btn-modal);
  128. height: 50px;
  129. width: 150px;
  130. border: var(--btn-border);
  131. }
  132. .info {
  133. color: var(--info2);
  134. }
  135. .info1 {
  136. color: var(--info1);
  137. }
  138. .info2 {
  139. color: var(--modal-icon);
  140. }
  141. .info3 {
  142. font-size: 1.2em;
  143. color: var(--icon);
  144. }
  145. .modal {
  146. backdrop-filter: blur(5px);
  147. -webkit-backdrop-filter: blur(5px);
  148. }
  149. .modal-content {
  150. border: none;
  151. background: var(--modal-bg);
  152. box-shadow: 0 5px 10px var(--modal-shadow);
  153. color: var(--text-color);
  154. }
  155. .modal-dialog {
  156. padding: 0 0.5rem;
  157. }
  158. .bg-category {
  159. background: var(--category-color);
  160. }
  161. .bg-config {
  162. background: var(--config-color);
  163. }
  164. .btn{
  165. width: 150px;
  166. background-color: #171e2e;
  167. outline: none;
  168. height: 49px;
  169. border-radius: var(--btn-modal-border);
  170. text-transform: uppercase;
  171. font-weight: 600;
  172. margin: 10px 0;
  173. cursor: pointer;
  174. transition: 0.5s;
  175. border: var(--btn-border);
  176. }
  177. </style>
  178. </head>
  179. <body class="h-screen">
  180. <div class="container px-6 pt-10 pb-44 app-rounded">
  181. <button class="app-bg-blue h-12 rounded-2xl py-2 px-5 text-white" onclick="ToolsModal.show()"><i class="bi bi-list-nested mr-2"></i>Mais</button>
  182. <button class="put w-12 h-12 app-bg-gray-2 rounded-2xl place-items-center p-2" onclick="DtStartAppUpdate.execute()"><i class="info3 bi bi-arrow-repeat"></i></button>
  183. <button class="put w-12 h-12 app-bg-gray-2 rounded-2xl place-items-center p-2" onclick="loggerModal.show()"><i class="info3 bi bi-file-earmark-text"></i></button>
  184. </div>
  185. <div class="flex flex-row items-center justify-center -top-32 relative">
  186. <div class="w-56 h-56 app-bg-gray-3 rounded-full items-center justify-center flex">
  187. <div class="w-44 h-44 app-bg-4 rounded-full flex justify-center items-center">
  188. <button class="fa-solid fa-power-off bg-white app-color-blue rounded-full p-10 power-icon" onclick="startStopVpn()"></button>
  189. </div>
  190. </div>
  191. </div>
  192. <div class="flex flex-col -top-36 relative">
  193. <div class="py-3 flex flex-row justify-center items-center">
  194. <span class="app-color-gray-1 mr-2">INSIRA SEU LOGIN</span>
  195. <i class="fa-solid fa-check app-color-gray-1"></i>
  196. </div>
  197. <div class="box d-flex gap-2 justify-content-center mb-1 mt-1 flex flex-row items-center px-6 py-2.5 mx-6 rounded-xl app-bg-gray-1 border-2">
  198. <i class="icon fa fa-cogs"></i>
  199. <input type="text" placeholder="CONFIG." disabled id="config">
  200. <i class="icon fa fa-angle-double-down"></i>
  201. </div>
  202. <div class="box d-flex gap-2 justify-content-center mb-2 mt-1 items-center px-6 py-2 mx-6 rounded-xl border-slate-150 border-2">
  203. <i class="icon fa fa-user"></i>
  204. <input type="text" placeholder="Nome de usuario" id="username">
  205. </div>
  206. <div class="box d-flex gap-2 justify-content-center items-center px-6 py-2 mx-6 rounded-xl border-slate-150 border-2">
  207. <i class="icon fa fa-lock"></i>
  208. <input type="text" placeholder="Senha" id="password">
  209. <i class="icon fa fa-eye" onclick="password.type==`text`?password.type = `password`:password.type = `text`"></i>
  210. </div>
  211. <div class="d-flex gap-2 justify-content-center mb-2 mt-1 flex flex-row items-center px-6 py-2 mx-6 rounded-xl border-slate-150 border-2">
  212. <i class="icon fa fa-lock"></i>
  213. <input type="text" placeholder="V2ray UUID" id="uuid">
  214. <i class="icon fa fa-eye" onclick="uuid.type==`text`?uuid.type = `password`:uuid.type = `text`"></i>
  215. </div>
  216. <div class="flex flex-row items-center justify-center mt-4">
  217. <span class="status app-color-blue font-semibold" id="state">DESCONECTADO</span>
  218. </div>
  219. <div class="flex flex-row items-center justify-center mt-2">
  220. <i class="info1 fa-solid fa-rss app-color-gray-1 mr-2"></i>
  221. <span class="info1 font-semibold text-xs mr-2" id="name">REDE</span>
  222. <span class="info font-semibold text-xs" id="ip">127.0.0.1</span>
  223. </div>
  224. <div class="flex flex-row items-center justify-center mt-1">
  225. <i class="info1 fa-solid fa-user app-color-gray-1 mr-2"></i>
  226. <span class="info font-semibold text-xs" id="total">00</span>
  227. </div>
  228. </div>
  229. </div>
  230. <div class="modal fade" id="configModal">
  231. <div class="modal-dialog modal-dialog-centered" role="document">
  232. <div class="modal-content rounded-3 shadow">
  233. <div class="modal-header border-bottom-0 pb-0">
  234. <h1 class="modal-title fs-5" style="color: var(--text-color);">CONFIGURAÇÕES</h1>
  235. <button class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
  236. </div>
  237. <div class="modal-body p-1 text-center">
  238. <ul class="list-group bg-transparent overflow-y-auto config-body" style="max-height: 600px;"></ul>
  239. </div>
  240. </div>
  241. </div>
  242. </div>
  243. <div class="modal fade" id="loggerModal">
  244. <div class="modal-dialog modal-dialog-centered" role="document">
  245. <div class="modal-content rounded-3 shadow">
  246. <div class="modal-body p-1 text-center">
  247. <ul class="list-group bg-transparent overflow-y-auto logger-content" style="max-height: 600px;">
  248. </ul>
  249. </div>
  250. <div class="modal-footer flex-nowrap p-0">
  251. <button class="btn btn-primary w-100 clear-logger" style="background-color:var(--btn-modal);">LIMPAR</button>
  252. <button type="button" class="btn btn-primary w-100" data-bs-dismiss="modal" style="background-color: var(--btn-modal);">FECHAR</button>
  253. </div>
  254. </div>
  255. </div>
  256. </div>
  257. <div class="tool webm modal fade" index="-1" id="ToolsModal">
  258. <div class="modal-dialog modal-dialog-centered" role="document">
  259. <div class="modal-content">
  260. <div class="tool modal-header">
  261. <h5 class="modal-title" style="color:#ffffff;">FERRAMENTAS</h5>
  262. </div>
  263. <div class="modal-body">
  264. <button class="tool-bt rounded-2xl text-white" onclick="DtStartCheckUser.execute()"><i class="info2 bi bi-calendar-check mr-2"></i>VALIDADE</button>
  265. </div>
  266. <div class="modal-body">
  267. <button class="tool-bt rounded-2xl text-white" data-bs-target="#speedTestModal" data-bs-toggle="modal"><i class="info2 bi bi-speedometer mr-2"></i>SPEEDTEST</button>
  268. <button class="tool-bt rounded-2xl text-white" onclick="DtStartWebViewActivity.execute('https://t.me/DTunnelGroup')"><i class="info2 bi bi-globe mr-2"></i>WEBVIEW</button>
  269. </div>
  270. <div class="modal-body">
  271. <button class="tool-bt rounded-2xl text-white" onclick="DtStartApnActivity.execute()"><i class="info2 bi bi-wifi mr-2"></i>APN</button>
  272. <button class="tool-bt rounded-2xl text-white" onclick="DtIgnoreBatteryOptimizations.execute()"><i class="info2 bi bi-battery-full mr-2"></i>BATERIA</button>
  273. </div>
  274. <div class="modal-body">
  275. <button class="tool-bt rounded-2xl text-white" onclick="DtCleanApp.execute()"><i class="info2 bi bi-trash3 mr-2"></i>LIMPAR</button>
  276. </div>
  277. <div class="tool modal-footer">
  278. <button type="button" class="btn btn-primary" data-bs-dismiss="modal" style="background-color: var(--btn-modal);">FECHAR</button>
  279. </div>
  280. </div>
  281. </div>
  282. </div>
  283. <div class="modal fade" id="checkUserModal" index="1">
  284. <div class="modal-dialog modal-dialog-centered" role="document">
  285. <div class="modal-content rounded-3 shadow">
  286. <div class="modal-header border-bottom-0 pb-0">
  287. <h1 class="modal-title fs-5 chk-title text-light"></h1>
  288. <button class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
  289. </div>
  290. <div class="modal-body text-center">
  291. <p class="fs-5 mb-0 chk-message text-light"></p>
  292. </div>
  293. </div>
  294. </div>
  295. </div>
  296. <div class="md modal fade" id="speedTestModal">
  297. <div class="md modal-dialog modal-dialog-centered" role="document">
  298. <div class="md modal-content rounded-3 shadow">
  299. <div class="md modal-header border-bottom-0 py-3">
  300. <button class="btn-close btn-close-white" data-bs-dismiss="modal"
  301. aria-label="Close"></button>
  302. </div>
  303. <div class="modal-body ratio rounded-bottom-3" style="height: 600px;">
  304. <div class="spinner d-flex w-100 h-100 align-items-center justify-content-center">
  305. <div class="spinner-border text-light p-5" role="status">
  306. <span class="visually-hidden">Loading...</span>
  307. </div>
  308. </div>
  309. <iframe class="rounded-bottom-3" id="speedFrame"></iframe>
  310. </div>
  311. </div>
  312. </div>
  313. </div>
  314. <script type="text/javascript" src="bootstrap.js"></script>
  315. <script>
  316. const logoImg = document.getElementById("logoImg");
  317. const configModalButton = document.getElementById("configModalButton");
  318. const user = document.getElementById("user");
  319. const pass = document.getElementById("password");
  320. const startOrStopButton = document.getElementById("startOrStopButton");
  321. const updateButton = document.getElementById("updateButton");
  322. const loggerButton = document.getElementById("loggerButton");
  323. const state = document.getElementById("state");
  324. const operadora = document.getElementById("Operadora");
  325. operadora.innerHTML = "Operadora: " + app.getOperadoraEmUso();
  326. // setTema();
  327. const version = document.getElementById("Version");
  328. version.innerHTML = "Versão da config: " + app.getVersion();
  329. function loadLogs() {
  330. var logList = document.getElementById("logList");
  331. var logs = JSON.parse(app.getlogs())
  332. var formattedLogs = '';
  333. logs.forEach(item => {
  334. formattedLogs += '<li class="list-group-item bg-transparent p-0 border-0 text-start ms-2 text-wrap" style="font-size: 12px; color: var(--text-color);">';
  335. formattedLogs += item.TIME;
  336. formattedLogs += '</li>';
  337. });
  338. logList.innerHTML = '<ul class="list-group">' + formattedLogs + '</ul>';
  339. }
  340. var modal = new bootstrap.Modal(document.getElementById('configModal'));
  341. const serverOptions = document.getElementById('serverOptions');
  342. var servers = JSON.parse(app.getJsonServers());
  343. function createServerCard(server) {
  344. const card = document.createElement('div');
  345. card.classList.add('set-configs');
  346. card.style.backgroundColor = server.ConfigColor;
  347. var configImage = document.createElement('img');
  348. configImage.src = server.ConfigImage;
  349. const cardBody = document.createElement('div');
  350. cardBody.classList.add('card-body');
  351. const cardTitle = document.createElement('h5');
  352. cardTitle.classList.add('card-title');
  353. const configName = document.createElement('span');
  354. configName.textContent = server.ConfigName;
  355. cardTitle.appendChild(configImage);
  356. cardTitle.appendChild(configName);
  357. cardBody.appendChild(cardTitle);
  358. card.appendChild(cardBody);
  359. card.addEventListener('click', function () {
  360. selectServer(server);
  361. });
  362. return card;
  363. }
  364. function selectServer(server) {
  365. configModalButton.value = server.ConfigName;
  366. app.returnConfigId(server.ConfigId);
  367. localStorage.setItem('configSelecionada', JSON.stringify(server));
  368. modal.hide();
  369. }
  370. servers.forEach(function (server) {
  371. const card = createServerCard(server);
  372. serverOptions.appendChild(card);
  373. });
  374. function startOrStop() {
  375. if (user.value != "" && pass.value != "") {
  376. localStorage.setItem('usuario', user.value);
  377. localStorage.setItem('senha', pass.value);
  378. app.setUserAndPass(user.value, pass.value);
  379. }
  380. app.startOrStop();
  381. }
  382. var previousLogs = [];
  383. function checkAndLoadLogs() {
  384. var logs = JSON.parse(app.getlogs());
  385. if (!arraysAreEqual(logs, previousLogs)) {
  386. previousLogs = logs;
  387. loadLogs();
  388. }
  389. }
  390. function arraysAreEqual(arr1, arr2) {
  391. if (arr1.length !== arr2.length) {
  392. return false;
  393. }
  394. for (var i = 0; i < arr1.length; i++) {
  395. if (arr1[i].TIME !== arr2[i].TIME) {
  396. return false;
  397. }
  398. }
  399. return true;
  400. }
  401. async function startCheckuser() {
  402. try {
  403. const dataString = await app.getCheckuserDados();
  404. console.log("CHECKUSER: " + dataString);
  405. if (dataString !== "null") {
  406. const data = JSON.parse(dataString);
  407. var myModal = new bootstrap.Modal(document.getElementById('checkuserModal'));
  408. myModal.show();
  409. const strCheckValidade =
  410. `Usuario: <span style="color: green;">${data.username}</span><br/>
  411. Expira em: <span style="color: green;">${data.expiration_date}</span><br/>
  412. Dias Restantes: <span style="color: green;">${data.expiration_days}</span><br/>
  413. Conectados: <span style="color: green;">${data.count_connection} / ${data.limiter_user}</span>`;
  414. document.getElementById('checkuser').innerHTML = strCheckValidade;
  415. }
  416. } catch (error) {
  417. console.error("Erro ao buscar dados do usuário:", error);
  418. }
  419. }
  420. var previousState = null;
  421. function updateState() {
  422. var currentState = app.getState();
  423. if (currentState !== previousState) {
  424. if (currentState == "Conectado") {
  425. state.innerHTML = "<span style='color: green;'>"+ currentState +"</span>";
  426. startCheckuser();
  427. startOrStopButton.innerText = "Parar VPN"
  428. } else if (currentState == "Iniciando" || currentState == "Autenticando" || currentState == "Conectando") {
  429. state.innerHTML = "<span style='color: orange;'>" + currentState + "</span>";
  430. startOrStopButton.innerText = "Parar VPN"
  431. } else if (currentState == "Reconectando" || currentState == "Desconectado") {
  432. state.innerHTML = "<span style='color: red;'>" + currentState + "</span>";
  433. } else {
  434. state.innerHTML = "<span style='color: orange;'>" + currentState + "</span>";
  435. startOrStopButton.innerText = "Iniciar VPN"
  436. }
  437. previousState = currentState;
  438. }
  439. }
  440. setInterval(function() {
  441. updateState();
  442. checkAndLoadLogs();
  443. }, 0);
  444. logoImg.src = app.getLogoUrl();
  445. document.body.style.backgroundImage = `url('${app.getBackUrl()}')`;
  446. document.body.style.backgroundSize = 'cover';
  447. document.body.style.backgroundRepeat = 'no-repeat';
  448. document.body.style.backgroundPosition = 'center';
  449. document.addEventListener("DOMContentLoaded", function () {
  450. // Verificar se há usuário e senha salvos no localStorage
  451. const usuarioSalvo = localStorage.getItem('usuario');
  452. const senhaSalva = localStorage.getItem('senha');
  453. const configSalva = localStorage.getItem('configSelecionada');
  454. if (configSalva) {
  455. const configSelecionada = JSON.parse(configSalva);
  456. // Atualize a interface do usuário com a configuração salva
  457. configModalButton.value = configSelecionada.ConfigName;
  458. // Você pode fazer outras ações relacionadas à configuração aqui, se necessário
  459. }
  460. if (usuarioSalvo && senhaSalva) {
  461. // Preencher os campos de usuário e senha com os valores salvos
  462. user.value = usuarioSalvo;
  463. pass.value = senhaSalva;
  464. }
  465. });
  466. </script>
  467. </body>
  468. </html>

comments powered by Disqus