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.9 kB

HITS: 934

  1. <!DOCTYPE html>
  2. <html lang="pt-BR">
  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>MCASSSADOR</title>
  8. <link rel="stylesheet" href="css.css">
  9. <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/toastify-js/src/toastify.min.css">
  10. <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet"
  11. integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
  12. <script type="text/javascript"
  13. src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"
  14. integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe"
  15. crossorigin="anonymous"></script>
  16. <style>
  17. @import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap');
  18. * {
  19. margin: 0;
  20. padding: 0;
  21. box-sizing: border-box;
  22. font-family: 'Roboto', sans-serif;
  23. }
  24. body {
  25. height: 100vh;
  26. display: flex;
  27. flex-direction: column;
  28. align-items: center;
  29. justify-content: center;
  30. }
  31. .logo-container {
  32. display: flex;
  33. align-items: center;
  34. justify-content: center;
  35. }
  36. .logo-container img {
  37. /* Tamanho da logo */
  38. width: 250px;
  39. height: 250px;
  40. }
  41. .container {
  42. height: 100%;
  43. display: flex;
  44. flex-direction: column;
  45. justify-content: center;
  46. max-width: 450px;
  47. }
  48. .card2 {
  49. border-radius: 20px;
  50. margin: 10px 50px 0 50px;
  51. background-color: #0000005c;
  52. border: none;
  53. font-size: 20px;
  54. }
  55. .card {
  56. background-color: #0000005c;
  57. }
  58. .btn-light {
  59. background-color: #00000000 !important;
  60. color: #FFF;
  61. border: 1px solid #FFF; /* Adiciona a borda branca */
  62. border-radius: 20px;
  63. outline: none;
  64. margin-top: 5px;
  65. }
  66. .btn-menu {
  67. background-color: #2b2b2b !important;
  68. color: #FFF;
  69. border: 1px solid #FFF; /* Adiciona a borda branca */
  70. border-radius: 20px;
  71. outline: none;
  72. margin: 5px;
  73. }
  74. .modal-content {
  75. background-color: #0000005c;
  76. }
  77. .input-group,
  78. .form-control,
  79. .input-group-text {
  80. background-color: #00000000 !important;
  81. color: #FFF;
  82. border: 1px solid #FFF; /* Adiciona a borda branca */
  83. border-radius: 20px;
  84. outline: none;
  85. }
  86. .input-group-noborder {
  87. background-color: #00000000 !important;
  88. color: #fff;
  89. position:relative;
  90. top:4px ;
  91. padding: 0;
  92. border: none; /* Adiciona a borda branca */
  93. outline: none;
  94. }
  95. .form-control::placeholder {
  96. color: #FFF;
  97. }
  98. .form-control:focus {
  99. color: #FFF;
  100. outline: none;
  101. box-shadow: none;
  102. }
  103. .custom-card {
  104. background-color: #2a2828;
  105. border-radius: 10px;
  106. color: whitesmoke;
  107. padding: 3px;
  108. margin-bottom: 4px;
  109. }
  110. .transparent-btn {
  111. background-color: transparent;
  112. color: white;
  113. border: 2px solid white;
  114. border-radius: 0;
  115. padding: 10px 15px;
  116. cursor: pointer;
  117. }
  118. </style>
  119. </head>
  120. <body>
  121. <div class="container">
  122. <div class="logo-container">
  123. <!--Link da logo-->
  124. <img id="logoImg" alt="logo" width="200" height="200">
  125. </div>
  126. <div class="card border-0 p-2 shadow mb-3">
  127. <div class="input" id="config">
  128. <button type="button" id="configModalButton" class="form-control" data-bs-toggle="modal" data-bs-target="configModal">
  129. <label>Selecione uma Conexão</label>
  130. </button>
  131. </div>
  132. <div class=" mb-2 form-control shadow">
  133. <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor"
  134. class="bi bi-person" viewBox="0 0 16 16">
  135. <path
  136. d="M8 8a3 3 0 1 0 0-6 3 3 0 0 0 0 6Zm2-3a2 2 0 1 1-4 0 2 2 0 0 1 4 0Zm4 8c0 1-1 1-1 1H3s-1 0-1-1 1-4 6-4 6 3 6 4Zm-1-.004c-.001-.246-.154-.986-.832-1.664C11.516 10.68 10.289 10 8 10c-2.29 0-3.516.68-4.168 1.332-.678.678-.83 1.418-.832 1.664h10Z" />
  137. </svg>
  138. <input class="input-group-noborder" type="text" placeholder="usuario" id="user"/>
  139. </div>
  140. <div class="mb-2 form-control shadow">
  141. <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" class="bi bi-key"
  142. viewBox="0 0 16 16">
  143. <path
  144. d="M0 8a4 4 0 0 1 7.465-2H14a.5.5 0 0 1 .354.146l1.5 1.5a.5.5 0 0 1 0 .708l-1.5 1.5a.5.5 0 0 1-.708 0L13 9.207l-.646.647a.5.5 0 0 1-.708 0L11 9.207l-.646.647a.5.5 0 0 1-.708 0L9 9.207l-.646.647A.5.5 0 0 1 8 10h-.535A4 4 0 0 1 0 8zm4-3a3 3 0 1 0 2.712 4.285A.5.5 0 0 1 7.163 9h.63l.853-.854a.5.5 0 0 1 .708 0l.646.647.646-.647a.5.5 0 0 1 .708 0l.646.647.646-.647a.5.5 0 0 1 .708 0l.646.647.793-.793-1-1h-6.63a.5.5 0 0 1-.451-.285A3 3 0 0 0 4 5z" />
  145. <path d="M4 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0z" />
  146. </svg>
  147. <input class="input-group-noborder"type="text" placeholder="senha" id="password" />
  148. </div>
  149. <div class="d-flex justify-content-between">
  150. <button class="btn btn-light w-100 shadow " onclick="startOrStop();" id="startOrStopButton">INICIAR</button>
  151. <button class="btn btn-light shadow mr-3" id=" " style="margin-left: 3px;" onclick="app.searchUpdate()" >
  152. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-repeat" viewBox="0 0 16 16">
  153. <path d="M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41zm-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9z"/>
  154. <path fill-rule="evenodd" d="M8 3c-1.552 0-2.94.707-3.857 1.818a.5.5 0 1 1-.771-.636A6.002 6.002 0 0 1 13.917 7H12.9A5.002 5.002 0 0 0 8 3zM3.1 9a5.002 5.002 0 0 0 8.757 2.182.5.5 0 1 1 .771.636A6.002 6.002 0 0 1 2.083 9H3.1z"/>
  155. </svg>
  156. </button>
  157. <button class="btn btn-light shadow mr-3" onclick="Android.logsstart();" id="loggerButton" style="margin-left: 3px;">
  158. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-file-earmark-text" viewBox="0 0 16 16">
  159. <path d="M5.5 7a.5.5 0 0 0 0 1h5a.5.5 0 0 0 0-1h-5zM5 9.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5zm0 2a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5z"/>
  160. <path d="M9.5 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V4.5L9.5 0zm0 1v2A1.5 1.5 0 0 0 11 4.5h2V14a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h5.5z"/>
  161. </svg>
  162. </button>
  163. </div>
  164. <button onclick="ToolsModal.show()" class="mt-2 form-control shadow">Mais</button>
  165. </div>
  166. <div class="card my-3 w-100 text-center border-0 p-2 shadow fs-5 text-uppercase fw-bold" id="info"></div>
  167. <div id="checkuserDiv" class="text centered-div">
  168. </div>
  169. </div>
  170. </div>
  171. <div class="tool webm modal fade" index="-1" id="ToolsModal">
  172. <div class="modal-dialog modal-dialog-centered" role="document">
  173. <div class="modal-content">
  174. <div class="tool modal-header">
  175. <h5 class="modal-title" style="color:#ffffff;">FERRAMENTAS</h5>
  176. </div>
  177. <button class="btn btn-menu shadow" onclick="Android.abrirapn()">Abrir Apn</button>
  178. <button class="btn btn-menu shadow" onclick="Android.forcarlte()"> forçar 3g/4g/5g</button>
  179. <button class="btn btn-menu shadow" onclick="Android.abrircom('https://t.me/ExemploBot')">Link de contato</button>
  180. <button class="btn btn-menu shadow" onclick="Android.otimizacaodebatery()">Desativar otimização de bateria</button>
  181. <div class="tool modal-footer">
  182. <button type="button" class="btn btn-primary" data-bs-dismiss="modal" style="background-color: var(--btn-modal);">FECHAR</button>
  183. </div>
  184. </div>
  185. </div>
  186. </div>
  187. <div class="modal fade" tabindex="-1" role="dialog" id="servers">
  188. <div class="modal-dialog modal-dialog-centered" role="document">
  189. <div class="modal-content rounded-3 shadow">
  190. <div class="modal-header border-bottom-0 pb-0">
  191. <h1 class="modal-title fs-5 text-white">CONFIGURAÇÕES</h1>
  192. <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"
  193. aria-label="Close"></button>
  194. </div>
  195. <div class="modal-body">
  196. <div class="modal-body">
  197. <h5 class="text-white">Selecione uma conexão:</h5>
  198. <div class="card-columns" id="serverOptions"></div>
  199. <div class="modal fade" aria-hidden="true" id="checkuserModal" tabindex="-1">
  200. <div class="modal-dialog modal-dialog-centered">
  201. <div class="modal-content">
  202. <div class="modal-header">
  203. <h5 class="modal-title">Informações do usuario</h5>
  204. <button type="button" class="close-btn" data-bs-dismiss="modal" aria-label="Close">
  205. <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor"
  206. class="bi bi-x-lg" viewBox="0 0 16 16">
  207. <path
  208. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z" />
  209. </svg>
  210. </button>
  211. </div>
  212. <div class="modal-body">
  213. <div id="checkuser">Checkuser</div>
  214. </div>
  215. </div>
  216. </div>
  217. </div>
  218. <div class="modal fade" tabindex="-1" role="dialog" id="logs">
  219. <div class="modal-dialog modal-dialog-centered" role="document">
  220. <div class="modal-content rounded-3 shadow">
  221. <div class="modal-header border-bottom-0 pb-0">
  222. <h1 class="modal-title fs-5 text-white">LOGS</h1>
  223. </div>
  224. <div class="modal-body">
  225. <ul id="logList"></ul>
  226. </div>
  227. <div class="modal-footer flex-nowrap p-0">
  228. <button type="button" id="logsClean" onclick="app.clearLogs()" >LIMPAR</button>
  229. <button type="button" id="logsClose" data-bs-dismiss="modal">FECHAR</button>
  230. </div>
  231. </div>
  232. </div>
  233. </div>
  234. <div class="modal fade" aria-hidden="true" id="checkuserModal" tabindex="-1">
  235. <div class="modal-dialog modal-dialog-centered">
  236. <div class="modal-content">
  237. <div class="modal-header">
  238. <h5 class="modal-title">Informações do usuario</h5>
  239. <button type="button" class="close-btn" data-bs-dismiss="modal" aria-label="Close">
  240. <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor"
  241. class="bi bi-x-lg" viewBox="0 0 16 16">
  242. <path
  243. d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z" />
  244. </svg>
  245. </button>
  246. </div>
  247. <div class="modal-body">
  248. <div id="checkuser">Checkuser</div>
  249. </div>
  250. </div>
  251. </div>
  252. </div>
  253. </div>
  254. <script type="text/javascript" src="bootstrap.js"></script>
  255. <script>
  256. const logoImg = document.getElementById("logoImg");
  257. const configModalButton = document.getElementById("configModalButton");
  258. const user = document.getElementById("user");
  259. const pass = document.getElementById("password");
  260. const startOrStopButton = document.getElementById("startOrStopButton");
  261. const updateButton = document.getElementById("updateButton");
  262. const loggerButton = document.getElementById("loggerButton");
  263. const state = document.getElementById("state");
  264. const operadora = document.getElementById("Operadora");
  265. operadora.innerHTML = "Operadora: " + app.getOperadoraEmUso();
  266. // setTema();
  267. const version = document.getElementById("Version");
  268. version.innerHTML = "Versão da config: " + app.getVersion();
  269. function loadLogs() {
  270. var logList = document.getElementById("logList");
  271. var logs = JSON.parse(app.getlogs())
  272. var formattedLogs = '';
  273. logs.forEach(item => {
  274. 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);">';
  275. formattedLogs += item.TIME;
  276. formattedLogs += '</li>';
  277. });
  278. logList.innerHTML = '<ul class="list-group">' + formattedLogs + '</ul>';
  279. }
  280. var modal = new bootstrap.Modal(document.getElementById('configModal'));
  281. const serverOptions = document.getElementById('serverOptions');
  282. var servers = JSON.parse(app.getJsonServers());
  283. f
  284. function createServerCard(server) {
  285. const card = document.createElement('div');
  286. card.classList.add('set-configs');
  287. card.style.backgroundColor = server.ConfigColor;
  288. var configImage = document.createElement('img');
  289. configImage.src = server.ConfigImage;
  290. const cardBody = document.createElement('div');
  291. cardBody.classList.add('card-body');
  292. const cardTitle = document.createElement('h5');
  293. cardTitle.classList.add('card-title');
  294. const configName = document.createElement('span');
  295. configName.textContent = server.ConfigName;
  296. cardTitle.appendChild(configImage);
  297. cardTitle.appendChild(configName);
  298. cardBody.appendChild(cardTitle);
  299. card.appendChild(cardBody);
  300. card.addEventListener('click', function () {
  301. selectServer(server);
  302. });
  303. return card;
  304. }
  305. function selectServer(server) {
  306. configModalButton.value = server.ConfigName;
  307. app.returnConfigId(server.ConfigId);
  308. localStorage.setItem('configSelecionada', JSON.stringify(server));
  309. modal.hide();
  310. }
  311. servers.forEach(function (server) {
  312. const card = createServerCard(server);
  313. serverOptions.appendChild(card);
  314. });
  315. function startOrStop() {
  316. if (user.value != "" && pass.value != "") {
  317. localStorage.setItem('usuario', user.value);
  318. localStorage.setItem('senha', pass.value);
  319. app.setUserAndPass(user.value, pass.value);
  320. }
  321. app.startOrStop();
  322. }
  323. var previousLogs = [];
  324. function checkAndLoadLogs() {
  325. var logs = JSON.parse(app.getlogs());
  326. if (!arraysAreEqual(logs, previousLogs)) {
  327. previousLogs = logs;
  328. loadLogs();
  329. }
  330. }
  331. function arraysAreEqual(arr1, arr2) {
  332. if (arr1.length !== arr2.length) {
  333. return false;
  334. }
  335. for (var i = 0; i < arr1.length; i++) {
  336. if (arr1[i].TIME !== arr2[i].TIME) {
  337. return false;
  338. }
  339. }
  340. return true;
  341. }
  342. async function startCheckuser() {
  343. try {
  344. const dataString = await app.getCheckuserDados();
  345. console.log("CHECKUSER: " + dataString);
  346. if (dataString !== "null") {
  347. const data = JSON.parse(dataString);
  348. var myModal = new bootstrap.Modal(document.getElementById('checkuserModal'));
  349. myModal.show();
  350. const strCheckValidade =
  351. `Usuario: <span style="color: green;">${data.username}</span><br/>
  352. Expira em: <span style="color: green;">${data.expiration_date}</span><br/>
  353. Dias Restantes: <span style="color: green;">${data.expiration_days}</span><br/>
  354. Conectados: <span style="color: green;">${data.count_connection} / ${data.limiter_user}</span>`;
  355. document.getElementById('checkuser').innerHTML = strCheckValidade;
  356. }
  357. } catch (error) {
  358. console.error("Erro ao buscar dados do usuário:", error);
  359. }
  360. }
  361. var previousState = null;
  362. function updateState() {
  363. var currentState = app.getState();
  364. if (currentState !== previousState) {
  365. if (currentState == "Conectado") {
  366. state.innerHTML = "<span style='color: green;'>"+ currentState +"</span>";
  367. startCheckuser();
  368. startOrStopButton.innerText = "Parar VPN"
  369. } else if (currentState == "Iniciando" || currentState == "Autenticando" || currentState == "Conectando") {
  370. state.innerHTML = "<span style='color: orange;'>" + currentState + "</span>";
  371. startOrStopButton.innerText = "Parar VPN"
  372. } else if (currentState == "Reconectando" || currentState == "Desconectado") {
  373. state.innerHTML = "<span style='color: red;'>" + currentState + "</span>";
  374. } else {
  375. state.innerHTML = "<span style='color: orange;'>" + currentState + "</span>";
  376. startOrStopButton.innerText = "Iniciar VPN"
  377. }
  378. previousState = currentState;
  379. }
  380. }
  381. setInterval(function() {
  382. updateState();
  383. checkAndLoadLogs();
  384. }, 0);
  385. logoImg.src = app.getLogoUrl();
  386. document.body.style.backgroundImage = `url('${app.getBackUrl()}')`;
  387. document.body.style.backgroundSize = 'cover';
  388. document.body.style.backgroundRepeat = 'no-repeat';
  389. document.body.style.backgroundPosition = 'center';
  390. document.addEventListener("DOMContentLoaded", function () {
  391. // Verificar se há usuário e senha salvos no localStorage
  392. const usuarioSalvo = localStorage.getItem('usuario');
  393. const senhaSalva = localStorage.getItem('senha');
  394. const configSalva = localStorage.getItem('configSelecionada');
  395. if (configSalva) {
  396. const configSelecionada = JSON.parse(configSalva);
  397. // Atualize a interface do usuário com a configuração salva
  398. configModalButton.value = configSelecionada.ConfigName;
  399. // Você pode fazer outras ações relacionadas à configuração aqui, se necessário
  400. }
  401. if (usuarioSalvo && senhaSalva) {
  402. // Preencher os campos de usuário e senha com os valores salvos
  403. user.value = usuarioSalvo;
  404. pass.value = senhaSalva;
  405. }
  406. });
  407. </script>
  408. </body>
  409. </html>

comments powered by Disqus