script JavaScript M2


SUBMITTED BY: Guest

DATE: July 3, 2023, 3:50 a.m.

FORMAT: Text only

SIZE: 12.7 kB

HITS: 334

  1. // Cache para respostas HTTP
  2. let httpCache = {};
  3. function requestHTTP(url, onSuccess, onError) {
  4. // Verifica se os dados já estão no cache
  5. if (httpCache[url]) {
  6. onSuccess(httpCache[url]);
  7. return;
  8. }
  9. var xhr = new XMLHttpRequest();
  10. xhr.open('GET', url, true);
  11. xhr.setRequestHeader("Cache-Control", "no-cache, no-store, must-revalidate");
  12. xhr.setRequestHeader("Pragma", "no-cache");
  13. xhr.setRequestHeader("Expires", "0");
  14. xhr.onload = function () {
  15. if (xhr.status == 200) {
  16. // Armazena a resposta no cache
  17. httpCache[url] = xhr.responseText;
  18. onSuccess(xhr.responseText);
  19. } else {
  20. onError(xhr.statusText);
  21. }
  22. };
  23. xhr.onerror = function () {
  24. onError("Erro de Rede");
  25. };
  26. xhr.send(null);
  27. }
  28. function postHTTP(url, data, onSuccess, onError) {
  29. // Cria um objeto XMLHttpRequest
  30. var xhr = new XMLHttpRequest();
  31. // Abre uma conexão POST com a URL fornecida
  32. xhr.open('POST', url, true);
  33. // Define o cabeçalho "Content-Type" para enviar dados codificados em URL
  34. xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  35. // Define a função de callback quando a requisição for concluída
  36. xhr.onload = function () {
  37. if (xhr.status == 200) {
  38. // Se a requisição for bem-sucedida, chama a função de sucesso com a resposta
  39. onSuccess(xhr.responseText);
  40. } else {
  41. // Se a requisição falhar, chama a função de erro com o status da requisição
  42. onError(xhr.statusText);
  43. }
  44. };
  45. // Define a função de callback quando ocorrer um erro de rede
  46. xhr.onerror = function () {
  47. onError("Erro de Rede");
  48. };
  49. // Envia a requisição POST com os dados fornecidos, convertidos para uma string JSON
  50. xhr.send(JSON.stringify(data));
  51. }
  52. function exibirDados(json) {
  53. // Obtém a data atual
  54. var currentDate = new Date();
  55. // Cria uma nova data com base na data atual
  56. var expirationDate = new Date(currentDate);
  57. // Adiciona o número de meses, dias e horas fornecidos aos valores da data de expiração
  58. expirationDate.setMonth(expirationDate.getMonth() + parseInt(json.Months));
  59. expirationDate.setDate(expirationDate.getDate() + parseInt(json.Days));
  60. expirationDate.setHours(expirationDate.getHours() + parseInt(json.Hours));
  61. // Formata a data de expiração para exibição
  62. var formattedExpirationDate = expirationDate.toLocaleDateString();
  63. // Calcula o número de dias restantes até a data de expiração
  64. var daysRemaining = Math.ceil((expirationDate - currentDate) / (1000 * 60 * 60 * 24));
  65. // Retorna um objeto com o vencimento formatado e os dias restantes
  66. return {
  67. vencimento: formattedExpirationDate,
  68. diasRestantes: daysRemaining
  69. };
  70. }
  71. var usePost = false;
  72. // false para chkuser do SCRIPT SSHPLUS PRO
  73. // true para chkuser do PAINEL MIRACLE ATLANTUS
  74. function executeHTTPFunction(option, url, data, onSuccess, onError) {
  75. // Executa a função apropriada com base na opção fornecida
  76. if (option === 0) {
  77. requestHTTP(url, onSuccess, onError);
  78. } else if (option === 1) {
  79. postHTTP(url, data, onSuccess, onError);
  80. }
  81. }
  82. let modalShown = false;
  83. function getRenewalMessage(daysRemaining) {
  84. // Verifica se o modal já está sendo exibido
  85. if (modalShown) {
  86. return '';
  87. }
  88. // Verifica o número de dias restantes e exibe um modal se necessário
  89. if (daysRemaining <= 3 && daysRemaining > 0) {
  90. vuevet.constructModal('⚠️ Vencendo...', 'Seu período de acesso está prestes a terminar. Por favor, renove para continuar a utilizar nossos serviços.', 'Ok');
  91. modalShown = true;
  92. } else if (daysRemaining === 0) {
  93. vuevet.constructModal('⚠️ Vence hoje...', 'Seu acesso expira nas próximas horas renove o quanto antes.', 'Ok');
  94. modalShown = true;
  95. } else {
  96. return '';
  97. }
  98. }
  99. function getBackgroundColorForDaysRemaining(daysRemaining) {
  100. // Verifica o número de dias restantes e retorna uma cor de plano de fundo correspondente
  101. if (daysRemaining === "Não disponível") {
  102. return 'transparent';
  103. } else if (daysRemaining <= 3) {
  104. return '#ff0000'; // vermelho
  105. } else if (daysRemaining <= 5) {
  106. return '#ff9900'; // laranja
  107. } else {
  108. return 'transparent';
  109. }
  110. }
  111. function handleModal(title, message) {
  112. // Verifica se o modal já está sendo exibido e, se não estiver, exibe um novo modal
  113. if (!vuevet.isModalVisible()) {
  114. vuevet.constructModal(title, message, 'Ok');
  115. }
  116. }
  117. injectValidity = function () {
  118. let CHECK_WEB = ''; // Coloca sua URL do painel web dentro de aspas ex: 'https://seupainel.com
  119. // Verifica se o ID do dispositivo está armazenado no localStorage
  120. if (localStorage.getItem('m2deviceid') == null) {
  121. // Gera uma string aleatória para o ID do dispositivo
  122. let randomString = function (length) {
  123. var text = "";
  124. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  125. for (var i = 0; i < length; i++)
  126. text += possible.charAt(Math.floor(Math.random() * possible.length));
  127. return text;
  128. }
  129. // Armazena o ID do dispositivo gerado no localStorage
  130. localStorage.setItem('m2deviceid', randomString(11));
  131. }
  132. let IP_CONNECTED = ['']; // IP CHKUSER DEVE FICAR ENTRE ASPAS EX: '191.0.0'
  133. // SE FOR VARIOS IPS SEPARA COM VÍRGULA, EX ['191','192','193']
  134. let CHECK_PORT = 5000; // PORTA CHKUSER
  135. let mUser = localStorage.getItem('m2user');
  136. executeHTTPFunction(1, "https://api.ipify.org?format=json", {},
  137. function (datac) {
  138. var json1 = JSON.parse(datac);
  139. IP_CONNECTED = [json1.ip, ...IP_CONNECTED];
  140. for (let i = 0; i < IP_CONNECTED.length; i++) {
  141. // Envia uma requisição para verificar os dados do usuário
  142. executeHTTPFunction(usePost ? 0 : 1, CHECK_WEB + '/miracle/gordon/checkuser.php', {
  143. user: localStorage.getItem('m2user'),
  144. password: localStorage.getItem('m2pass'),
  145. deviceid: localStorage.getItem('m2deviceid'),
  146. ip: IP_CONNECTED[i]
  147. },
  148. function (data) {
  149. $('#sksmain').fadeOut(0);
  150. var json = JSON.parse(data)
  151. if (json.Status == "blockdevice") {
  152. // Interrompe o protocolo se o dispositivo estiver bloqueado no painel web atlantus
  153. AtlantusRouter.stopProtocol();
  154. vuevet.constructModal('Conexões Simultâneas.', 'Identificamos que este login está sendo usado em outro dispositivo ou aplicativo. Por favor, entre em contato com o fornecedor para liberação.', 'Entendi');
  155. return;
  156. }
  157. if (json.Months !== undefined && json.Days !== undefined && json.Hours !== undefined) {
  158. // Exibe os dados do usuário
  159. const { vencimento, diasRestantes } = exibirDados(json);
  160. const bgColor = getBackgroundColorForDaysRemaining(diasRestantes);
  161. const userData = document.querySelector('#dtconnection');
  162. userData.innerHTML = `<p style="text-align:center; font-size: 16px">
  163. <span style="font-weight:bold; color: white">👤 Usuário:</span> ${localStorage.getItem('m2user')}<br>
  164. <span style="font-weight:bold; color: white">🗓️ Vencimento:</span> ${vencimento} <br>
  165. <span style="font-weight:bold; color: white; background-color:${bgColor}">⏳ Dias restantes:</span> ${diasRestantes}<br>
  166. <span style="font-weight:bold; color: white">📱 Limite de conexões:</span> ${json.Limit}<br>
  167. ${getRenewalMessage(diasRestantes)}
  168. </p>`;
  169. handleModal();
  170. }
  171. },
  172. function (error) {
  173. console.log("Erro ao tentar obter dados do usuário: " + error);
  174. // Tenta obter os dados do usuário usando uma rota alternativa
  175. executeHTTPFunction(usePost ? 0 : 1, 'http://' + IP_CONNECTED[i] + ':' + CHECK_PORT + '/check/' + mUser, {},
  176. function (alternativeData) {
  177. var alternativeJson = JSON.parse(alternativeData);
  178. function checkConnectionLimit(countConnections, limitConnections) {
  179. // Verifica se o número de conexões excede o limite permitido
  180. if (countConnections > limitConnections) {
  181. AtlantusRouter.stopProtocol();
  182. vuevet.constructModal('📵 Limite de conexões.', 'O número de conexões ultrapassou o limite permitido.', 'Ok');
  183. }
  184. }
  185. function updateAndShowUserData(alternativeJson) {
  186. // Atualiza e exibe os dados do usuário
  187. var expirationDate = alternativeJson.expiration_date || "Não disponível";
  188. var expirationDays = alternativeJson.expiration_days || "Não disponível";
  189. var limitConnections = alternativeJson.limit_connections || "Não disponível";
  190. var countConnections = alternativeJson.count_connections || "Não disponível";
  191. checkConnectionLimit(countConnections, limitConnections);
  192. const userData = document.querySelector('#dtconnection');
  193. const bgColor = getBackgroundColorForDaysRemaining(alternativeJson.expiration_days);
  194. userData.innerHTML = `<p style="text-align:center; font-size: 16px">
  195. <span style="font-weight:bold; color: white">👤 Usuário:</span> ${localStorage.getItem('m2user')}<br>
  196. <span style="font-weight:bold; color: white">🗓️ Vencimento:</span> ${alternativeJson.expiration_date} <br>
  197. <span style="font-weight:bold; color: white; background-color: ${bgColor}; padding: 2px 5px; border-radius: 3px;">⏳ Dias restantes:</span><span style="color: white; background-color: ${bgColor}; padding: 2px 5px; border-radius: 3px;">${alternativeJson.expiration_days}</span><br>
  198. <span style="font-weight:bold; color: white">📱 Limite de conexões:</span> ${alternativeJson.limit_connections}/${alternativeJson.count_connections}<br>${getRenewalMessage(alternativeJson.expiration_days)}
  199. </p>`;
  200. }
  201. updateAndShowUserData(alternativeJson);
  202. // Atualiza os dados do usuário periodicamente
  203. setInterval(function () {
  204. requestHTTP('http://' + IP_CONNECTED[i] + ':' + CHECK_PORT + '/check/' + mUser,
  205. function (updatedData) {
  206. var updatedJson = JSON.parse(updatedData);
  207. updateAndShowUserData(updatedJson);
  208. },
  209. function (error) {
  210. console.error("Erro ao tentar atualizar os dados do usuário: " + error);
  211. });
  212. }, 300000); // Atualiza a cada 5 minutos
  213. },
  214. function (error) {
  215. console.error("Erro ao tentar obter os dados do usuário: " + error);
  216. });
  217. });
  218. }
  219. },
  220. function (error) {
  221. console.log("Erro ao tentar obter IP: " + error);
  222. });
  223. }
  224. function executeHTTPFunction(option, url, data, onSuccess, onError) {
  225. // Executa a função apropriada com base na opção fornecida
  226. if (option === 0) {
  227. postHTTP(url, data, onSuccess, onError);
  228. } else if (option === 1) {
  229. requestHTTP(url, onSuccess, onError);
  230. }
  231. }
  232. document.addEventListener('DOMContentLoaded', function () {
  233. injectValidity();
  234. });

comments powered by Disqus