DtMod Layout


SUBMITTED BY: cristiwil

DATE: Oct. 28, 2023, 1:51 p.m.

UPDATED: Nov. 13, 2023, 11:04 p.m.

FORMAT: Text only

SIZE: 55.7 kB

HITS: 794

  1. [
  2. {
  3. "id": 3542,
  4. "label": "Nome do app",
  5. "name": "APP_NAME",
  6. "value": "DTunnel VPN",
  7. "type": "STRING",
  8. "status": "ACTIVE",
  9. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  10. },
  11. {
  12. "id": 3543,
  13. "label": "Logo do app",
  14. "name": "APP_LOGO",
  15. "value": "https://i.ibb.co/72Wkx7M/DTxbe2wsre.png",
  16. "type": "IMAGE",
  17. "status": "ACTIVE",
  18. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  19. },
  20. {
  21. "id": 3544,
  22. "label": "Imagem de fundo",
  23. "name": "APP_BACKGROUND_IMAGE",
  24. "value": "https://i.ibb.co/HH6wyzB/DTzdltarix.jpg",
  25. "type": "IMAGE",
  26. "status": "ACTIVE",
  27. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  28. },
  29. {
  30. "id": 3545,
  31. "label": "Tipo do fundo do app",
  32. "name": "APP_BACKGROUND_TYPE",
  33. "value": {
  34. "options": [
  35. {
  36. "label": "Imagem",
  37. "value": "IMAGE"
  38. },
  39. {
  40. "label": "Cor",
  41. "value": "COLOR"
  42. }
  43. ],
  44. "selected": "IMAGE"
  45. },
  46. "type": "SELECT",
  47. "status": "ACTIVE",
  48. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  49. },
  50. {
  51. "id": 3546,
  52. "label": "Cor de fundo",
  53. "name": "APP_BACKGROUND_COLOR",
  54. "value": "#080e16c7",
  55. "type": "COLOR",
  56. "status": "ACTIVE",
  57. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  58. },
  59. {
  60. "id": 3547,
  61. "label": "Cor do card inicial",
  62. "name": "APP_CARD_COLOR",
  63. "value": "#a1c8ff00",
  64. "type": "COLOR",
  65. "status": "ACTIVE",
  66. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  67. },
  68. {
  69. "id": 8050,
  70. "label": "Raio do card inicial",
  71. "name": "APP_CARD_RADIUS",
  72. "value": 20,
  73. "type": "INTEGER",
  74. "status": "ACTIVE",
  75. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  76. },
  77. {
  78. "id": 8051,
  79. "label": "Cor do card de status",
  80. "name": "APP_CARD_STATUS_COLOR",
  81. "value": "#a1c8ff00",
  82. "type": "COLOR",
  83. "status": "ACTIVE",
  84. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  85. },
  86. {
  87. "id": 8052,
  88. "label": "Raio do card de status",
  89. "name": "APP_CARD_STATUS_RADIUS",
  90. "value": 25,
  91. "type": "INTEGER",
  92. "status": "ACTIVE",
  93. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  94. },
  95. {
  96. "id": 3548,
  97. "label": "Cor do card de configurações",
  98. "name": "APP_CARD_CONFIG_COLOR",
  99. "value": "#0d7a34ff",
  100. "type": "COLOR",
  101. "status": "ACTIVE",
  102. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  103. },
  104. {
  105. "id": 3549,
  106. "label": "Cor do fundo dos dialogs",
  107. "name": "APP_DIALOG_BACKGROUND_COLOR",
  108. "value": "#0d7a34ff",
  109. "type": "COLOR",
  110. "status": "ACTIVE",
  111. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  112. },
  113. {
  114. "id": 15111,
  115. "label": "Cor do fundo do dialog de log",
  116. "name": "APP_DIALOG_LOGGER_COLOR",
  117. "value": "#000000ff",
  118. "type": "COLOR",
  119. "status": "ACTIVE",
  120. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  121. },
  122. {
  123. "id": 3550,
  124. "label": "Cor das bordas",
  125. "name": "APP_BORDER_COLOR",
  126. "value": "#f7fdffff",
  127. "type": "COLOR",
  128. "status": "ACTIVE",
  129. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  130. },
  131. {
  132. "id": 8053,
  133. "label": "Cor dos inputs",
  134. "name": "APP_INPUT_COLOR",
  135. "value": "#000000ff",
  136. "type": "COLOR",
  137. "status": "ACTIVE",
  138. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  139. },
  140. {
  141. "id": 8054,
  142. "label": "Raio dos inputs",
  143. "name": "APP_INPUT_RADIUS",
  144. "value": 25,
  145. "type": "INTEGER",
  146. "status": "ACTIVE",
  147. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  148. },
  149. {
  150. "id": 3551,
  151. "label": "Cor dos textos",
  152. "name": "APP_TEXT_COLOR",
  153. "value": "#FFFFFFFF",
  154. "type": "COLOR",
  155. "status": "ACTIVE",
  156. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  157. },
  158. {
  159. "id": 3552,
  160. "label": "Cor dos botões",
  161. "name": "APP_BUTTON_COLOR",
  162. "value": "#008a00ff",
  163. "type": "COLOR",
  164. "status": "ACTIVE",
  165. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  166. },
  167. {
  168. "id": 8055,
  169. "label": "Raio dos botões",
  170. "name": "APP_BUTTON_RADIUS",
  171. "value": 25,
  172. "type": "INTEGER",
  173. "status": "ACTIVE",
  174. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  175. },
  176. {
  177. "id": 3553,
  178. "label": "Cor dos icones",
  179. "name": "APP_ICON_COLOR",
  180. "value": "#FFFFFFFF",
  181. "type": "COLOR",
  182. "status": "ACTIVE",
  183. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  184. },
  185. {
  186. "id": 3554,
  187. "label": "Exibir modo de conexão",
  188. "name": "APP_SHOW_CONNECTION_MODE",
  189. "value": true,
  190. "type": "BOOLEAN",
  191. "status": "ACTIVE",
  192. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  193. },
  194. {
  195. "id": 26008,
  196. "label": "Atualizar automaticamente as configurações ao lançar uma atualização.",
  197. "name": "APP_CONFIG_AUTO_UPDATE",
  198. "value": false,
  199. "type": "BOOLEAN",
  200. "status": "ACTIVE",
  201. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  202. },
  203. {
  204. "id": 8056,
  205. "label": "Iniciar o app automaticamente ao reiniciar o dispositivo",
  206. "name": "APP_AUTO_START",
  207. "value": false,
  208. "type": "BOOLEAN",
  209. "status": "ACTIVE",
  210. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  211. },
  212. {
  213. "id": 8057,
  214. "label": "Usar limiter de conexão",
  215. "name": "APP_CONNECTION_LIMITER",
  216. "value": false,
  217. "type": "BOOLEAN",
  218. "status": "ACTIVE",
  219. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  220. },
  221. {
  222. "id": 15112,
  223. "label": "Usar botão de atualizações",
  224. "name": "APP_BTN_UPDATE_ENABLED",
  225. "value": true,
  226. "type": "BOOLEAN",
  227. "status": "ACTIVE",
  228. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  229. },
  230. {
  231. "id": 15113,
  232. "label": "Usar botão de registros",
  233. "name": "APP_BTN_LOGGER_ENABLED",
  234. "value": true,
  235. "type": "BOOLEAN",
  236. "status": "ACTIVE",
  237. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  238. },
  239. {
  240. "id": 15114,
  241. "label": "Usar botão de pagina webview",
  242. "name": "APP_BTN_PAGE_ENABLED",
  243. "value": false,
  244. "type": "BOOLEAN",
  245. "status": "ACTIVE",
  246. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  247. },
  248. {
  249. "id": 15115,
  250. "label": "Ativar dialog de erros",
  251. "name": "APP_DIALOG_ERROR_ENABLED",
  252. "value": true,
  253. "type": "BOOLEAN",
  254. "status": "ACTIVE",
  255. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  256. },
  257. {
  258. "id": 15116,
  259. "label": "Ativar dialog de checkuser",
  260. "name": "APP_CHECKUSER_DIALOG_ENABLED",
  261. "value": true,
  262. "type": "BOOLEAN",
  263. "status": "ACTIVE",
  264. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  265. },
  266. {
  267. "id": 15117,
  268. "label": "Ativar toast de sucesso",
  269. "name": "APP_SUCCESS_TOAST_ENABLED",
  270. "value": true,
  271. "type": "BOOLEAN",
  272. "status": "ACTIVE",
  273. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  274. },
  275. {
  276. "id": 15118,
  277. "label": "Ativar toast de erro",
  278. "name": "APP_ERROR_TOAST_ENABLED",
  279. "value": true,
  280. "type": "BOOLEAN",
  281. "status": "ACTIVE",
  282. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  283. },
  284. {
  285. "id": 15119,
  286. "label": "Usar layout webview",
  287. "name": "APP_LAYOUT_WEBVIEW_ENABLED",
  288. "value": true,
  289. "type": "BOOLEAN",
  290. "status": "ACTIVE",
  291. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  292. },
  293. {
  294. "id": 3555,
  295. "label": "Mensagem Teste",
  296. "name": "APP_MESSAGE",
  297. "value": null,
  298. "type": "TEXT",
  299. "status": "ACTIVE",
  300. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  301. },
  302. {
  303. "id": 3557,
  304. "label": "URL de atualização do aplicativo",
  305. "name": "APP_UPDATE_URL",
  306. "value": null,
  307. "type": "URL",
  308. "status": "ACTIVE",
  309. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  310. },
  311. {
  312. "id": 3556,
  313. "label": "Tipo de mensagem",
  314. "name": "APP_MESSAGE_TYPE",
  315. "value": {
  316. "options": [
  317. {
  318. "label": "Alerta",
  319. "value": "ALERT"
  320. },
  321. {
  322. "label": "Informação",
  323. "value": "INFO"
  324. },
  325. {
  326. "label": "Boas vindas",
  327. "value": "WELCOME"
  328. },
  329. {
  330. "label": "Sem mensagem",
  331. "value": "NONE"
  332. }
  333. ],
  334. "selected": "NONE"
  335. },
  336. "type": "SELECT",
  337. "status": "ACTIVE",
  338. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  339. },
  340. {
  341. "id": 15120,
  342. "label": "LAYOUT WEBVIEW (POR SUA CONTA E RISCO)",
  343. "name": "APP_LAYOUT_WEBVIEW",
  344. "value": "<!DOCTYPE html>
  345. <html lang="pt-BR">
  346. <head>
  347. <meta charset="UTF-8" />
  348. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  349. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  350. <title>DTunnel</title>
  351. <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/toastify-js/src/toastify.min.css">
  352. <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet"
  353. integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
  354. <script type="text/javascript"
  355. src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js"
  356. integrity="sha384-ENjdO4Dr2bkBIFxQpeoTz1HIcje39Wm4jDKdf19U8gI4ddQ3GYNS7NTKfAdVQSZe"
  357. crossorigin="anonymous"></script>
  358. <style>
  359. @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');
  360. :root {
  361. --background-img: linear-gradient(180deg, rgba(0,0,0,1) 0%, rgba(0,0,0,1) 35%, rgba(0, 148, 20, 1) 100%);
  362. --logo-img-url: url(https://plenonet.com.br/assets/images/plenonet-512512px-2-512x512.webp);
  363. --input-border-radius: 5px;
  364. --input-background-color: #0a091a55;
  365. --card-border-radius: 5px;
  366. --card-background-color: #0b092868;
  367. --btn-background-color: #0a091a55;
  368. --btn-border-radius: 5px;
  369. --modal-background-color: #0b092868;
  370. --text-color: #ffffff;
  371. --icon-color: #FFFFFF;
  372. }
  373. * {
  374. margin: 0;
  375. padding: 0;
  376. box-sizing: border-box;
  377. font-family: 'Roboto', sans-serif;
  378. }
  379. body {
  380. height: 100vh;
  381. display: flex;
  382. flex-direction: column;
  383. align-items: center;
  384. justify-content: center;
  385. background-repeat: no-repeat;
  386. background-size: cover;
  387. }
  388. .container {
  389. height: 100%;
  390. display: flex;
  391. flex-direction: column;
  392. justify-content: center;
  393. align-items: center;
  394. max-width: 465px;
  395. background: linear-gradient(180deg, rgba(0,0,0,1) 0%, rgba(0,0,0,1) 35%, rgba(0, 148, 20, 1) 100%);
  396. }
  397. .logo {
  398. width: 100%;
  399. margin-bottom: 10px;
  400. }
  401. .card {
  402. background: #080808;
  403. border-radius: 20px;
  404. border: 1px solid #1e1e1e !important;
  405. box-shadow: -8px 12px 20px 0 rgb(13 15 18 / 63%) !important;
  406. padding: 15px !important;
  407. max-width: 450px;
  408. height: auto;
  409. position: relative;
  410. }
  411. .btn-dark {
  412. border: none;
  413. background: linear-gradient( to top right, #00ad17, #121212 );
  414. border-radius: 15px;
  415. }
  416. .modal-content {
  417. background-color: transparent;
  418. backdrop-filter: blur(25px);
  419. }
  420. .tool {
  421. align-items: center;
  422. justify-content: center;
  423. text-align: center;
  424. }
  425. .tool-bt {
  426. background: linear-gradient( to top right, #00ad17, #121212 );
  427. border-radius: 20px;
  428. color: #ffffff !important;
  429. height: 35px;
  430. width: 100%;
  431. border: var(--btn-border);
  432. }
  433. .input-group, .form-control, .input-group-text {
  434. background: #00ad17;
  435. color: var(--icon-color);
  436. border: none;
  437. border-radius: 15px;
  438. outline: none;
  439. }
  440. .form-control::placeholder {
  441. color: var(--text-color);
  442. }
  443. .form-control:focus {
  444. color: var(--text-color);
  445. outline: none;
  446. box-shadow: none;
  447. }
  448. .input-group-text {
  449. padding-right: 0;
  450. }
  451. .fs-5 {
  452. font-size: 1rem!important;
  453. }
  454. nav {
  455. background: linear-gradient( to top right, #00ad17, #121212 );
  456. border-radius: 20px;
  457. font-size: 0;
  458. width: 100%;
  459. max-width: 450px;
  460. height: auto;
  461. position: relative;
  462. margin-top: 20px;
  463. margin-bottom: 10px;
  464. }
  465. nav a {
  466. line-height: 35px;
  467. height: 100%;
  468. font-size: 15px;
  469. display: inline-block;
  470. position: relative;
  471. z-index: 1;
  472. text-decoration: none;
  473. text-align: center;
  474. color: white !important;
  475. cursor: pointer;
  476. }
  477. nav .animation {
  478. position: absolute;
  479. height: 100%;
  480. top: 0;
  481. z-index: 0;
  482. transition: all .5s ease 0s;
  483. border-radius: 8px;
  484. }
  485. a:nth-child(1) {
  486. width: 30%;
  487. }
  488. a:nth-child(2) {
  489. width: 30%;
  490. }
  491. a:nth-child(3) {
  492. width: 40%;
  493. }
  494. nav .start-home, a:nth-child(1):hover~.animation {
  495. width: 30%;
  496. left: 0;
  497. background-color: #121212;
  498. border-radius: 20px;
  499. }
  500. nav .start-about, a:nth-child(2):hover~.animation {
  501. width: 30%;;
  502. left: 30%;
  503. background-color: #121212;
  504. border-radius: 20px;
  505. }
  506. nav .start-blog, a:nth-child(3):hover~.animation {
  507. width: 40%;
  508. left: 60%;
  509. background-color: #121212;
  510. border-radius: 20px;
  511. }
  512. body {
  513. font-size: 12px;
  514. font-family: sans-serif;
  515. background: linear-gradient(180deg, rgba(0,0,0,1) 0%, rgba(0,0,0,1) 35%, rgba(0, 148, 22, 1) 100%);
  516. }
  517. @media (min-width: 768px) {
  518. .container, .container-md, .container-sm {
  519. max-width: 100%;
  520. }
  521. }
  522. .rede {
  523. color: #007506;
  524. }
  525. .iplocal {
  526. color: #ffffff;
  527. }
  528. .containerlocal {
  529. background: #080808;
  530. border-radius: 20px;
  531. border: 1px solid #1e1e1e !important;
  532. padding: 15px !important;
  533. width: 95%;
  534. max-width: 450px;
  535. height: auto;
  536. position: relative;
  537. margin-top: 50px;
  538. margin-bottom: -70px;
  539. }
  540. .hidden {
  541. display: none;
  542. }
  543. </style>
  544. </head>
  545. <body>
  546. <div class="containerlocal">
  547. <span class="font-semibold text-xs mr-2" style="color: #ffffff;"">📢 IP Local da sua operadora:</span><span class="rede font-semibold text-xs mr-2" id="name">REDE</span> <span class="iplocal font-semibold text-xs" id="ip">127.0.0.1</span>
  548. </div>
  549. <div class="container">
  550. <div class="card border-0 p-2 shadow mb-3 w-100">
  551. <span style="color:#ffffff;font-size: 18px;border-radius: 15px;padding: 0px 0px 0px 5px;margin-bottom: 10px;display: block !important;text-align: start;">MatrixNet® - Versão: 10.1.1</span>
  552. <img class="logo" src="https://a.imagem.app/oJvM03.png">
  553. <div class="input-group mb-2 shadow" id="config-area">
  554. <input class="form-control" type="text" placeholder="CONFIGURAÇÃO" readonly title="configurações"
  555. id="config" style="background-color: #080808;" />
  556. <span class="input-group-text me-2">
  557. <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor"
  558. class="bi bi:bar-chart" viewBox="0 0 16 16">
  559. <path
  560. d="M4 11H2v3h2v-3zm5-4H7v7h2V7zm5-5v12h-2V2h2zm-2-1a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1h-2zM6 7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V7zm-5 4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1v-3z"/></svg>
  561. </span>
  562. </div>
  563. <div class="input-group input mb-2 shadow">
  564. <span class="input-group-text">
  565. <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor"
  566. class="bi bi:file-person" viewBox="0 0 16 16">
  567. <path
  568. d="M12 1a1 1 0 0 1 1 1v10.755S12 11 8 11s-5 1.755-5 1.755V2a1 1 0 0 1 1-1h8zM4 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H4z"/><path d="M8 10a3 3 0 1 0 0-6a3 3 0 0 0 0 6z"/></g></svg>
  569. </span>
  570. <input class="form-control" type="text" placeholder="usuario" id="username" style="background-color: #080808;" />
  571. </div>
  572. <div class="input-group input mb-2 shadow">
  573. <span class="input-group-text">
  574. <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" class="bi bi:file-earmark-lock"
  575. viewBox="0 0 16 16">
  576. <path
  577. d="M10 7v1.076c.54.166 1 .597 1 1.224v2.4c0 .816-.781 1.3-1.5 1.3h-3c-.719 0-1.5-.484-1.5-1.3V9.3c0-.627.46-1.058 1-1.224V7a2 2 0 1 1 4 0zM7 7v1h2V7a1 1 0 0 0-2 0zM6 9.3v2.4c0 .042.02.107.105.175A.637.637 0 0 0 6.5 12h3a.64.64 0 0 0 .395-.125c.085-.068.105-.133.105-.175V9.3c0-.042-.02-.107-.105-.175A.637.637 0 0 0 9.5 9h-3a.637.637 0 0 0-.395.125C6.02 9.193 6 9.258 6 9.3z"/><path d="M14 14V4.5L9.5 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2zM9.5 3A1.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.5v2z"/></g></svg>
  578. </span>
  579. <input class="form-control" type="password" placeholder="senha" id="password" style="background-color: #080808;" />
  580. <span class="input-group-text me-2"
  581. onclick="password.type==`text`?password.type = `password`:password.type = `text`">
  582. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye"
  583. viewBox="0 0 16 16">
  584. <path
  585. d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z" />
  586. <path
  587. d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z" />
  588. </svg>
  589. </span>
  590. </div>
  591. <div class="input-group input mb-2 shadow">
  592. <span class="input-group-text">
  593. <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="currentColor" class="bi bi-key"
  594. viewBox="0 0 16 16">
  595. <path
  596. 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" />
  597. <path d="M4 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0z" />
  598. </svg>
  599. </span>
  600. <input class="form-control" type="text" placeholder="V2ray UUID" id="uuid" style="background: #080808;" />
  601. <span class="input-group-text me-2"
  602. onclick="uuid.type==`text`?uuid.type = `password`:uuid.type = `text`">
  603. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye"
  604. viewBox="0 0 16 16">
  605. <path
  606. d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z" />
  607. <path
  608. d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z" />
  609. </svg>
  610. </span>
  611. </div>
  612. <button class="btn btn-dark w-100 shadow" id="start-stop">INICIAR</button>
  613. <nav>
  614. <a id="sync" onclick="DtStartAppUpdate.execute()">Atualizar</a>
  615. <a id="logger">Registro</a>
  616. <a onclick="ToolsModal.show()">Ajustes</a>
  617. <div class="animation start-home"></div>
  618. </nav>
  619. </div>
  620. <div class="card my-3 w-100 text-center border-0 p-2 shadow text-light fs-5 text-uppercase fw-bold" id="state" style="padding: 5px !important; font-size: 15px !important;">
  621. </div>
  622. <p style="color: #5e9ca0;"><span style="color: #ffffff; font-size: 17px;">MatrixNet®- Conex&otilde;es @2020-2024</span></p>
  623. </div>
  624. </div>
  625. <div class="modal fade" id="checkUserModal">
  626. <div class="modal-dialog modal-dialog-centered" role="document">
  627. <div class="modal-content rounded-3 shadow">
  628. <div class="modal-header border-bottom-0 pb-0">
  629. <h1 class="modal-title fs-5 chk-title text-light"></h1>
  630. <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"
  631. aria-label="Close"></button>
  632. </div>
  633. <div class="modal-body text-center">
  634. <p class="fs-5 mb-0 chk-message text-light"></p>
  635. </div>
  636. </div>
  637. </div>
  638. </div>
  639. <div class="modal fade" id="errorModal">
  640. <div class="modal-dialog modal-dialog-centered" role="document">
  641. <div class="modal-content rounded-3 shadow">
  642. <div class="modal-header border-bottom-0 pb-0">
  643. <h1 class="modal-title fs-5 err-title text-light"></h1>
  644. <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"
  645. aria-label="Close"></button>
  646. </div>
  647. <div class="modal-body text-center">
  648. <p class="fs-5 mb-0 err-message text-light"></p>
  649. </div>
  650. </div>
  651. </div>
  652. </div>
  653. <div class="modal fade" id="loggerModal">
  654. <div class="modal-dialog modal-dialog-centered" role="document">
  655. <div class="modal-content rounded-3 shadow">
  656. <div class="modal-body p-1 text-center">
  657. <ul class="list-group bg-transparent overflow-y-auto logger-content" style="max-height: 600px;">
  658. </ul>
  659. </div>
  660. <div class="modal-footer flex-nowrap p-0">
  661. <button type="button" class="btn btn-lg btn-dark text-light w-100 clear-logger">LIMPAR</button>
  662. <button type="button" class="btn btn-lg btn-dark text-light w-100"
  663. data-bs-dismiss="modal">FECHAR</button>
  664. </div>
  665. </div>
  666. </div>
  667. </div>
  668. <div class="tool webm modal fade" index="-1" id="ToolsModal">
  669. <div class="modal-dialog modal-dialog-centered" role="document">
  670. <div class="modal-content">
  671. <div class="tool modal-header">
  672. <h5 class="modal-title" style="color:#ffffff;">Configurações do aplicativo</h5>
  673. </div>
  674. <div class="modal-body">
  675. <button class="tool-bt rounded-2xl text-white" onclick="DtStartWebViewActivity.execute('https://painelwebatlas23.shop/renovar.php')"><i class="info2 bi bi-globe mr-2"></i>Renovar meu Plano</button>
  676. </div>
  677. <div class="modal-body">
  678. <button class="tool-bt rounded-2xl text-white" onclick="DtStartWebViewActivity.execute('https://docs.plenonet.com.br/instalacao-e-conexao/tutoriais-plenonet')"><i class="info2 bi bi-globe mr-2"></i>Acessar turoriais</button>
  679. </div>
  680. <div class="modal-body">
  681. <button class="tool-bt rounded-2xl text-white" onclick="DtStartApnActivity.execute()"><i class="info2 bi bi-wifi mr-2"></i>Alterar protocolo de APN</button>
  682. </div>
  683. <div class="modal-body">
  684. <button class="tool-bt rounded-2xl text-white" onclick="DtIgnoreBatteryOptimizations.execute()"><i class="info2 bi bi-battery-full mr-2"></i>Otimizar Bateria</button>
  685. </div>
  686. <div class="modal-body">
  687. <button class="tool-bt rounded-2xl text-white" onclick="DtCleanApp.execute()"><i class="info2 bi bi-trash3 mr-2"></i>Limpar cachê e dados</button>
  688. </div>
  689. <div class="modal-body">
  690. <button class="tool-bt rounded-2xl text-white" onclick="DtStartWebViewActivity.execute('https://docs.plenonet.com.br/termos-de-uso/termos-de-uso-do-aplicativo')"><i class="info2 bi bi-globe mr-2"></i>Termos de uso do aplicativo</button>
  691. </div>
  692. <div class="tool modal-footer">
  693. <button type="button" class="btn btn-primary" data-bs-dismiss="modal" style="background-color: var(--btn-modal);">FECHAR</button>
  694. </div>
  695. </div>
  696. </div>
  697. </div>
  698. <div class="modal fade" id="configModal">
  699. <div class="modal-dialog modal-dialog-centered" role="document">
  700. <div class="modal-content rounded-3 shadow">
  701. <div class="modal-header border-bottom-0 pb-0">
  702. <h1 class="modal-title fs-5 text-white">CONFIGURAÇÕES</h1>
  703. <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"
  704. aria-label="Close"></button>
  705. </div>
  706. <div class="modal-body p-1 text-center">
  707. <ul class="list-group bg-transparent overflow-y-auto config-body" style="max-height: 600px;">
  708. <li class="list-group-item bg-transparent text-white border-0">
  709. <p>CATEGORIA</p>
  710. <ul class="list-group bg-transparent overflow-y-auto text-start">
  711. <li
  712. class="list-group-item d-flex bg-transparent text-white border-0 border-bottom rounded-0">
  713. <img src="https://cdn-icons-png.flaticon.com/512/3686/3686811.png" width="40"
  714. height="40">
  715. <div class="d-flex flex-column ms-2 w-100">
  716. <span>CONFIG 01</span>
  717. <span>DESC 01</span>
  718. </div>
  719. <div class="d-flex flex-column ms-2 w-100">
  720. <span class="text-end">CONFIG_MODE</span>
  721. </div>
  722. </li>
  723. </ul>
  724. </li>
  725. </ul>
  726. </div>
  727. </div>
  728. </div>
  729. </div>
  730. <div class="modal fade" id="RenovarModal">
  731. <div class="modal-dialog modal-dialog-centered" role="document">
  732. <div class="modal-content rounded-3 shadow">
  733. <div class="modal-header border-bottom-0 py-3">
  734. <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"
  735. aria-label="Close"></button>
  736. </div>
  737. <div class="modal-body ratio rounded-bottom-3" style="height: 600px;">
  738. <div class="spinner d-flex w-100 h-100 align-items-center justify-content-center">
  739. <div class="spinner-border text-light p-5" role="status">
  740. <span class="visually-hidden">Loading...</span>
  741. </div>
  742. </div>
  743. <iframe class="rounded-bottom-3" id="RenovarFrame"></iframe>
  744. </div>
  745. </div>
  746. </div>
  747. </div>
  748. <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/toastify-js"></script>
  749. <script>
  750. class AndroidMock {
  751. static getLocalIP() {
  752. return '192.168.0.1';
  753. }
  754. static getConfig() {
  755. return JSON.stringify({
  756. urlCheckUser: ' http://134.65.228.107:5454'
  757. });
  758. }
  759. static getNetworkName() {
  760. return 'REDE';
  761. }
  762. static openRadioInfo() {
  763. console.log('openRadioInfo');
  764. }
  765. }
  766. </script>
  767. <script>
  768. function showLocalIP(android) {
  769. console.log(android.getNetworkName());
  770. document.getElementById('name').innerHTML = ' ' + android.getNetworkName() + ':';
  771. document.getElementById('ip').innerHTML = android.getLocalIP();
  772. setInterval(() => {
  773. document.getElementById('name').innerHTML =
  774. ' ' + android.getNetworkName() + ':';
  775. document.getElementById('ip').innerHTML = android.getLocalIP();
  776. }, 2000)
  777. }
  778. window.onload = function () {
  779. const android = window.Android || AndroidMock;
  780. showLocalIP(android);
  781. }
  782. function mostrar(id) {
  783. if (document.getElementById(id).style.display !== "none") {
  784. document.getElementById(id).style.display = "none";
  785. return;
  786. }
  787. Array.from(document.getElementsByClassName("hidden")).forEach(
  788. div => (div.style.display = "none")
  789. );
  790. document.getElementById(id).style.display = "block";
  791. }
  792. </script>
  793. <script>
  794. const configArea = document.querySelector('#config-area')
  795. const config = document.querySelector('#config')
  796. const username = document.querySelector('#username')
  797. const password = document.querySelector('#password')
  798. const uuid = document.querySelector('#uuid')
  799. const logger = document.querySelector('#logger')
  800. const networkStatus = document.querySelector('#section.local-ip')
  801. const startStopVpn = document.querySelector('#start-stop')
  802. const stateStatus = document.querySelector('#state')
  803. const loggerModal = new bootstrap.Modal(document.querySelector('#loggerModal'))
  804. const checkUserModal = new bootstrap.Modal(document.querySelector('#checkUserModal'))
  805. const errorModal = new bootstrap.Modal(document.querySelector('#errorModal'))
  806. const configModal = new bootstrap.Modal(document.querySelector('#configModal'))
  807. const ToolsModal = new bootstrap.Modal(document.querySelector('#ToolsModal'))
  808. const clearLogger = document.querySelector('.clear-logger')
  809. const RenovarModal = new bootstrap.Modal(document.querySelector('#RenovarModal'))
  810. configArea.addEventListener('click', e => showConfigsModal())
  811. username.addEventListener('input', e => DtUsername.set(e.target.value))
  812. password.addEventListener('input', e => DtPassword.set(e.target.value))
  813. uuid.addEventListener('input', e => DtUuid.set(e.target.value))
  814. logger.addEventListener('click', e => loggerModal.show())
  815. startStopVpn.addEventListener('click', (e) => {
  816. if (DtGetVpnState.execute() != 'DISCONNECTED') {
  817. DtExecuteVpnStop.execute()
  818. } else {
  819. DtExecuteVpnStart.execute()
  820. }
  821. })
  822. clearLogger.addEventListener('click', () => DtClearLogs.execute())
  823. RenovarModal._element.addEventListener('shown.bs.modal', () => {
  824. const iframe = document.querySelector('#RenovarFrame');
  825. if (!iframe.src) {
  826. iframe.src = 'https://painel.plenonet.com.br/renovar.php'
  827. iframe.addEventListener('load', () => {
  828. mp3Modal._element.querySelector('.spinner').classList.add('d-none')
  829. })
  830. }
  831. })
  832. RenovarModal._element.addEventListener('hide.bs.modal', () => {
  833. const iframe = document.querySelector('#RenovarFrame');
  834. iframe.src = '';
  835. })
  836. Object.defineProperty(String.prototype, 't', {
  837. value: function t() {
  838. return window?.DtTranslateText?.execute('' + this) ?? '' + this
  839. },
  840. writable: true,
  841. configurable: true,
  842. })
  843. const dtConfigClickListener = () => {
  844. const data = JSON.parse(window?.DtGetDefaultConfig?.execute() || `{ "auth": {}, "mode": "v2ray" }`)
  845. const isV2ray = data?.mode?.toLowerCase()?.startsWith('v2ray');
  846. config.placeholder = data.name ?? 'LBL_CHOOSE_CONFIG'.t()
  847. username.parentElement.style.display = !data?.auth?.username && !isV2ray ? 'flex' : 'none';
  848. password.parentElement.style.display = !data?.auth?.password && !isV2ray ? 'flex' : 'none';
  849. uuid.parentElement.style.display = !data?.auth?.v2ray_uuid && isV2ray ? 'flex' : 'none';
  850. }
  851. const dtVpnStateListener = state => {
  852. const isRunning = state != 'DISCONNECTED';
  853. stateStatus.innerHTML = ('LBL_STATE_' + state).t()
  854. startStopVpn.innerHTML = isRunning ? 'LBL_BTN_STOP'.t() : 'LBL_BTN_START'.t()
  855. if (isRunning) {
  856. username.setAttribute('readonly', 'true')
  857. password.setAttribute('readonly', 'true')
  858. } else {
  859. username.removeAttribute('readonly')
  860. password.removeAttribute('readonly')
  861. }
  862. if (state == 'CONNECTING') dtShowSuccessToastListener('Conectando...')
  863. }
  864. const dtCheckUserStartedListener = () => {
  865. const data = JSON.parse(window?.DtGetDefaultConfig?.execute() || `{}`)
  866. const isV2ray = data?.mode?.toLowerCase()?.startsWith('v2ray');
  867. if (isV2ray) return;
  868. const html = `
  869. <div class="d-flex justify-content-center">
  870. <div class="spinner-border p-5" role="status">
  871. <span class="visually-hidden">Loading...</span>
  872. </div>
  873. </div>
  874. `
  875. checkUserModal._element.querySelector('.chk-title').textContent = 'CHECK USER'
  876. checkUserModal._element.querySelector('.chk-message').innerHTML = html;
  877. checkUserModal.show()
  878. }
  879. const dtCheckUserModelListener = model => {
  880. const data = JSON.parse(model ?? `{"username": "test"}`)
  881. const html = `
  882. <div class="d-flex flex-column text-white">
  883. <span>👤Nome de usuario: ${data.username}</span>
  884. <span>📆Expira em: ${data.expiration_date}</span>
  885. <span>📆Dias restantes: ${data.expiration_days}</span>
  886. <span>🚫Conexoes: ${data.count_connections}|${data.limit_connections}</span>
  887. </div>
  888. `
  889. checkUserModal._element.querySelector('.chk-title').textContent = '📆 Olá, ' + data.username.toUpperCase() + '👤'
  890. checkUserModal._element.querySelector('.chk-message').innerHTML = html;
  891. checkUserModal.show()
  892. }
  893. const dtMessageErrorListener = message => {
  894. const data = JSON.parse(message)
  895. errorModal._element.querySelector('.err-title').textContent = data.title;
  896. errorModal._element.querySelector('.err-message').innerHTML = data.content;
  897. errorModal.show()
  898. }
  899. const dtOnNewLogListener = () => {
  900. const mock = [];
  901. for (let i = 0; i < 30; i++) {
  902. mock.push({ 'TIME': 'MESSAGE ' + i })
  903. }
  904. const log = window?.DtGetLogs?.execute() || JSON.stringify(mock)
  905. const data = JSON.parse(log)
  906. let content = '';
  907. data.forEach(item => {
  908. content += '<li class="list-group-item fs-6 bg-transparent text-white p-0 border-0 text-start ms-2 text-wrap">';
  909. content += Object.keys(item)[0] + " " + item[Object.keys(item)]
  910. content += '</li>';
  911. })
  912. loggerModal._element.querySelector('.logger-content').innerHTML = content;
  913. const listGroup = loggerModal._element.querySelector('.list-group')
  914. listGroup.scrollTo(0, listGroup.scrollHeight)
  915. }
  916. const dtVpnStartedSuccessListener = () => dtShowSuccessToastListener('Conectado com sucesso')
  917. const dtVpnStoppedSuccessListener = () => dtShowSuccessToastListener('Desconectado com sucesso')
  918. const dtShowSuccessToastListener = text => {
  919. Toastify({
  920. text: text,
  921. close: true,
  922. style: {
  923. background: 'linear-gradient(to right, #00b09b, #96c93d)',
  924. marginTop: '35px',
  925. }
  926. }).showToast()
  927. }
  928. const dtShowErrorToastListener = text => {
  929. Toastify({
  930. text: text,
  931. close: true,
  932. style: {
  933. background: 'linear-gradient(to right, #00610d, #75ff88)',
  934. marginTop: '35px',
  935. }
  936. }).showToast()
  937. }
  938. const showConfigsModal = () => {
  939. const mock = '[{"sorter":6,"color":"#6D08041C","name":"CONFIG","id":1393,"items":[{"mode":"V2RAY - VLESS","sorter":4,"tlsVersion":"TLSv1.2","name":"CONFIG 01","icon":"https://cdn-icons-png.flaticon.com/512/8187/8187143.png","id":11803,"status":"ACTIVE"},{"mode":"SSH_DIRECT","sorter":2,"tlsVersion":"TLSv1.2","name":"CONFIG 02","icon":"https://cdn-icons-png.flaticon.com/512/8187/8187143.png","id":28627,"status":"ACTIVE"},{"mode":"OVPN_PROXY","sorter":23,"tlsVersion":"TLSv1.2","name":"CONFIG 03","icon":"https://cdn-icons-png.flaticon.com/512/8187/8187143.png","id":30001,"status":"ACTIVE"}]},{"sorter":2,"color":"#6D08041C","name":"CONFIG 2","id":1846,"items":[{"mode":"SSH_PROXY","sorter":1,"tlsVersion":"TLSv1.2","name":"CONFIG 01","icon":"https://cdn-icons-png.flaticon.com/512/8187/8187143.png","id":26295,"status":"ACTIVE"}]},{"sorter":4,"color":"#80000000","name":"CONFIG 3","id":3310,"items":[{"mode":"SSH_PROXY","sorter":1,"tlsVersion":"TLSv1.2","name":"CONFIG. TEST","icon":"https://cdn-icons-png.flaticon.com/512/8187/8187143.png","id":29997,"status":"ACTIVE"},{"mode":"OVPN_PROXY","sorter":1,"tlsVersion":"TLSv1.2","name":"CONFIG. TEST 2","icon":"https://cdn-icons-png.flaticon.com/512/8187/8187143.png","id":29998,"status":"ACTIVE"}]}]'
  940. const data = JSON.parse(window?.DtGetConfigs?.execute() || mock)
  941. data.sort((a, b) => a.sorter - b.sorter)
  942. data.forEach(item => item.items.sort((a, b) => a.sorter - b.sorter))
  943. const body = configModal._element.querySelector('.config-body')
  944. body.innerHTML = ''
  945. data.forEach(category => {
  946. const categoryElement = document.createElement('li')
  947. categoryElement.classList.add('list-group-item', 'bg-transparent', 'text-white', 'border-0', 'mb-1', 'rounded-1', 'px-1')
  948. categoryElement.innerHTML = `<span class="fw-bold btn-dark w-100 d-block p-1 rounded-1 mb-1">${category.name}</span>`
  949. const configUlElement = document.createElement('ul')
  950. configUlElement.classList.add('list-group', 'bg-transparent', 'overflow-y-auto')
  951. category.items.forEach(item => {
  952. const configElement = document.createElement('li')
  953. configElement.classList.add('list-group-item', 'd-flex', 'btn-dark', 'text-white', 'border-0', 'rounded-2', 'px-1', 'py-2', 'mb-1')
  954. configElement.innerHTML = `
  955. <img src="${item.icon}" width="40" height="40">
  956. <div class="text-start d-flex flex-column ms-2 w-100 text-truncate">
  957. <span class="fw-bold text-uppercase" style="font-size: 0.8rem;">${item.name}</span>
  958. <span class="fst-italic fw-bold" style="font-size: 0.7rem;">${item.description || ''}</span>
  959. </div>
  960. <div class="d-flex flex-column ms-2">
  961. <span class="fst-italic fw-bold text-end text-uppercase text-nowrap" style="font-size: 0.8rem;">${item.mode}</span>
  962. </div>
  963. </li>
  964. `
  965. configElement.addEventListener('click', e => {
  966. window?.DtSetConfig?.execute(item.id)
  967. configModal.hide()
  968. })
  969. configUlElement.appendChild(configElement)
  970. })
  971. categoryElement.appendChild(configUlElement)
  972. body.appendChild(categoryElement)
  973. })
  974. configModal.show()
  975. }
  976. username.value = window?.DtUsername?.get() ?? ''
  977. password.value = window?.DtPassword?.get() ?? ''
  978. uuid.value = window?.DtUuid?.get() ?? ''
  979. username.placeholder = 'LBL_USERNAME'.t()
  980. password.placeholder = 'LBL_PASSWORD'.t()
  981. uuid.placeholder = 'LBL_UUID'.t()
  982. dtOnNewLogListener()
  983. dtVpnStateListener(window?.DtGetVpnState?.execute() ?? 'DISCONNECTED')
  984. dtConfigClickListener()
  985. console.log('Pleno Layouts!🚀')
  986. </script>
  987. </body>
  988. </html>",
  989. "type": "HTML",
  990. "status": "ACTIVE",
  991. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  992. },
  993. {
  994. "id": 8058,
  995. "label": "ANDROID WEBVIEW (POR SUA CONTA E RISCO)",
  996. "name": "APP_SUPPORT_BUTTON",
  997. "value": "<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n\n <title>5362162935 - @GRUPOCONECTASSH | @alexdsgmoura</title>\n\n <style>\n :root {\n font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n line-height: 1.5;\n font-weight: 420;\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n\n --space-status-bar: 10px;\n --space-navigation-android-bar: 33px;\n }\n\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n\n html,\n body,\n main {\n width: 100%;\n height: 100%;\n }\n\n main {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 35px;\n\n padding-top: var(--space-status-bar);\n padding-bottom: var(--space-navigation-android-bar);\n }\n\n section.container {\n width: 100%;\n max-width: 800px;\n height: aut0;\n\n margin-top: auto;\n }\n\n section.container div.container-button {\n width: 100%;\n height: auto;\n\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 5px;\n\n margin: 0px auto;\n padding: 0px 5px;\n }\n\n section.container div.container-button button {\n width: 20%;\n min-width: 30px;\n max-width: 60px;\n height: 50px;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-around;\n\n padding: 2px;\n\n border: 1px solid #ffffff;\n border-radius: 8px;\n\n background-color: transparent;\n }\n\n section.container div.container-button button svg {\n width: 20px;\n height: 27px;\n\n color: #ffffff;\n\n transform: scale(1.3);\n }\n\n section.container div.container-button button span {\n width: 100%;\n\n color: #ffffff;\n font-size: 6px;\n text-transform: uppercase;\n }\n\n section.container-network {\n width: 100%;\n height: auto;\n\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 5px;\n }\n\n section.container-network div {\n width: 100%;\n height: auto;\n\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 5px;\n }\n\n section.container-network span {\n color: #ffffff;\n }\n\n section.container-network div svg {\n color: #ffffff;\n }\n\n @media (min-width: 281px) {\n section.container div.container-button button span {\n font-size: 7px;\n }\n }\n\n @media (min-width: 361px) {\n section.container div.container-button button span {\n font-size: 9px;\n }\n }\n\n @media (min-width: 376px) {\n section.container div.container-button button svg {\n width: 25px;\n height: 25px;\n }\n\n section.container div.container-button button span {\n font-size: 9px;\n }\n }\n </style>\n </head>\n <body>\n <main>\n <section class=\"container\">\n <div class=\"container-button\">\n <button type=\"button\" title=\"Limpar dados do app\" id=\"clear-data-app\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-trash\"\n viewBox=\"0 0 16 16\"\n >\n <path\n d=\"M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5Zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5Zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6Z\"\n />\n <path\n d=\"M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1ZM4.118 4 4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118ZM2.5 3h11V2h-11v1Z\"\n />\n </svg>\n\n <span>Limpar APP</span>\n </button>\n\n <button type=\"button\" title=\"renovação\" id=\"renew\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-credit-card\"\n viewBox=\"0 0 16 16\"\n >\n <path\n d=\"M0 4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V4zm2-1a1 1 0 0 0-1 1v1h14V4a1 1 0 0 0-1-1H2zm13 4H1v5a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V7z\"\n />\n <path d=\"M2 10a1 1 0 0 1 1-1h1a1 1 0 0 1 1 1v1a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-1z\" />\n </svg>\n\n <span>RENOVAR</span>\n </button>\n\n <button type=\"button\" title=\"configurar apn\" id=\"configuration-apn\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-gear\"\n viewBox=\"0 0 16 16\"\n >\n <path\n d=\"M8 4.754a3.246 3.246 0 1 0 0 6.492 3.246 3.246 0 0 0 0-6.492zM5.754 8a2.246 2.246 0 1 1 4.492 0 2.246 2.246 0 0 1-4.492 0z\"\n />\n <path\n d=\"M9.796 1.343c-.527-1.79-3.065-1.79-3.592 0l-.094.319a.873.873 0 0 1-1.255.52l-.292-.16c-1.64-.892-3.433.902-2.54 2.541l.159.292a.873.873 0 0 1-.52 1.255l-.319.094c-1.79.527-1.79 3.065 0 3.592l.319.094a.873.873 0 0 1 .52 1.255l-.16.292c-.892 1.64.901 3.434 2.541 2.54l.292-.159a.873.873 0 0 1 1.255.52l.094.319c.527 1.79 3.065 1.79 3.592 0l.094-.319a.873.873 0 0 1 1.255-.52l.292.16c1.64.893 3.434-.902 2.54-2.541l-.159-.292a.873.873 0 0 1 .52-1.255l.319-.094c1.79-.527 1.79-3.065 0-3.592l-.319-.094a.873.873 0 0 1-.52-1.255l.16-.292c.893-1.64-.902-3.433-2.541-2.54l-.292.159a.873.873 0 0 1-1.255-.52l-.094-.319zm-2.633.283c.246-.835 1.428-.835 1.674 0l.094.319a1.873 1.873 0 0 0 2.693 1.115l.291-.16c.764-.415 1.6.42 1.184 1.185l-.159.292a1.873 1.873 0 0 0 1.116 2.692l.318.094c.835.246.835 1.428 0 1.674l-.319.094a1.873 1.873 0 0 0-1.115 2.693l.16.291c.415.764-.42 1.6-1.185 1.184l-.291-.159a1.873 1.873 0 0 0-2.693 1.116l-.094.318c-.246.835-1.428.835-1.674 0l-.094-.319a1.873 1.873 0 0 0-2.692-1.115l-.292.16c-.764.415-1.6-.42-1.184-1.185l.159-.291A1.873 1.873 0 0 0 1.945 8.93l-.319-.094c-.835-.246-.835-1.428 0-1.674l.319-.094A1.873 1.873 0 0 0 3.06 4.377l-.16-.292c-.415-.764.42-1.6 1.185-1.184l.292.159a1.873 1.873 0 0 0 2.692-1.115l.094-.319z\"\n />\n </svg>\n\n <span>Config APN</span>\n </button>\n\n <button type=\"button\" title=\"forçar 4G\" id=\"force-4g\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-lightning\"\n viewBox=\"0 0 16 16\"\n >\n <path\n d=\"M5.52.359A.5.5 0 0 1 6 0h4a.5.5 0 0 1 .474.658L8.694 6H12.5a.5.5 0 0 1 .395.807l-7 9a.5.5 0 0 1-.873-.454L6.823 9.5H3.5a.5.5 0 0 1-.48-.641l2.5-8.5zM6.374 1 4.168 8.5H7.5a.5.5 0 0 1 .478.647L6.78 13.04 11.478 7H8a.5.5 0 0 1-.474-.658L9.306 1H6.374z\"\n />\n </svg>\n\n <span>Forçar 4G</span>\n </button>\n </div>\n </section>\n\n <section class=\"container-network\">\n <span>Seu IP:</span>\n\n <div>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n fill=\"currentColor\"\n class=\"bi bi-bar-chart-fill\"\n viewBox=\"0 0 16 16\"\n >\n <path\n d=\"M1 11a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1v-3zm5-4a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v7a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V7zm5-5a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1V2z\"\n />\n </svg>\n\n <span id=\"local-ip\">192.168.0.1</span>\n </div>\n </section>\n </main>\n\n <!-- DOM WRAPPER -->\n <script>\n const Dom = (selector) => {\n const _elements = document.querySelectorAll(selector)\n\n const wrapper = {\n on(listeners) {\n for (const [event, listener] of Object.entries(listeners)) {\n _elements.forEach((element) => {\n element.addEventListener(event, listener)\n })\n }\n\n return wrapper\n },\n html(value) {\n _elements.forEach((element) => (element.innerHTML = value))\n return wrapper\n },\n }\n\n return wrapper\n }\n </script>\n\n <!-- FUNÇÕES DO APP -->\n <script>\n const dtStatusBarHeight = () => DtGetStatusBarHeight.execute()\n const dtNavHeight = () => DtGetNavigationBarHeight.execute()\n\n const dtApnConfig = () => DtStartApnActivity.execute()\n const dtBatteryOptimization = () => DtIgnoreBatteryOptimizations.execute()\n const dtCleanApp = () => DtCleanApp.execute()\n\n const dtRadioInfo = () => {\n if (typeof Android?.openRadioInfo === 'function') {\n Android.openRadioInfo()\n } else {\n DtStartRadioInfoActivity.execute()\n }\n }\n const dtGetNetworkName = () => Android.getNetworkName()\n const dtGetNetworkLocalIp = () => Android.getLocalIP()\n\n const dtWebView = () => DtStartWebViewActivity.execute()\n const dtUrlWebview = (url) => {\n if (typeof DtStartWebViewActivity?.execute === 'function') {\n DtStartWebViewActivity?.execute(url)\n } else {\n document.location.href = url\n }\n }\n </script>\n\n <!-- VARIAVEIS ROOT -->\n <script>\n document.documentElement.style.setProperty(\n '--space-status-bar',\n `${dtStatusBarHeight() + 10}px`\n )\n\n document.documentElement.style.setProperty(\n '--space-navigation-android-bar',\n `${dtNavHeight() + 25}px`\n )\n </script>\n\n <!-- VARIAVEIS -->\n <script>\n const clearDataAppButton = Dom('#clear-data-app')\n const renewButton = Dom('#renew')\n const speedtestButton = Dom('#speedtest')\n const apnConfigButton = Dom('#configuration-apn')\n const force4GButton = Dom('#force-4g')\n\n const localIp = Dom('#local-ip')\n </script>\n\n <!-- FUNÇÕES DO LAYOUT -->\n <script>\n const writeLocalIp = () => {\n let ip = 'Localizando IP'\n\n setInterval(() => {\n ip = dtGetNetworkLocalIp() ?? 'Localizando IP'\n localIp.html(dtGetNetworkLocalIp())\n }, 500)\n\n return ip\n }\n </script>\n\n <!-- AÇÕES -->\n <script>\n clearDataAppButton.on({ click: () => dtCleanApp() })\n renewButton.on({ click: () => dtUrlWebview('https://painelwebatlas23.shop/renovar.php') })\n speedtestButton.on({ click: () => dtUrlWebview('https://fast.com/pt/') })\n apnConfigButton.on({ click: () => dtApnConfig() })\n force4GButton.on({ click: () => dtRadioInfo() })\n\n localIp.html(writeLocalIp())\n </script>\n </body>\n</html>",
  998. "type": "HTML",
  999. "status": "ACTIVE",
  1000. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  1001. },
  1002. {
  1003. "id": 8059,
  1004. "label": "PAGINA WEBVIEW (POR SUA CONTA E RISCO)",
  1005. "name": "APP_WEB_VIEW",
  1006. "value": null,
  1007. "type": "HTML",
  1008. "status": "ACTIVE",
  1009. "user_id": "98512a31-3f84-4240-8919-957ca444cb66"
  1010. }
  1011. ]

comments powered by Disqus