admin.html 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. {% extends 'base.html' %}
  2. {% block head %}
  3. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/xterm@5.3.0/css/xterm.css" />
  4. <script src="https://cdn.jsdelivr.net/npm/xterm@5.3.0/lib/xterm.js"></script>
  5. <script src="https://cdn.jsdelivr.net/npm/xterm-addon-fit@0.8.0/lib/xterm-addon-fit.js"></script>
  6. <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js"></script>
  7. {% endblock %}
  8. {% block content %}
  9. <div class="container-fluid mt-4">
  10. <div class="row">
  11. <div class="col-md-8">
  12. <div class="card">
  13. <div class="card-header bg-dark text-white">
  14. SSH Console
  15. </div>
  16. <div class="card-body p-0">
  17. <div id="terminal" style="height: 500px;"></div>
  18. </div>
  19. </div>
  20. </div>
  21. <div class="col-md-4">
  22. <div class="card mb-3">
  23. <div class="card-header bg-info text-white">
  24. Conexión SSH
  25. </div>
  26. <div class="card-body">
  27. <form id="ssh-form">
  28. <div class="mb-2">
  29. <label>Host</label>
  30. <input type="text" class="form-control" id="host" value="localhost">
  31. </div>
  32. <div class="mb-2">
  33. <label>Port</label>
  34. <input type="number" class="form-control" id="port" value="22">
  35. </div>
  36. <div class="mb-2">
  37. <label>Username</label>
  38. <input type="text" class="form-control" id="username" placeholder="root">
  39. </div>
  40. <div class="mb-2">
  41. <label>Password</label>
  42. <input type="password" class="form-control" id="password">
  43. </div>
  44. <button type="submit" class="btn btn-primary w-100">Conectar</button>
  45. </form>
  46. <div id="status" class="mt-2"></div>
  47. </div>
  48. </div>
  49. <div class="card">
  50. <div class="card-header bg-warning">
  51. Credenciales
  52. </div>
  53. <div class="card-body">
  54. <h2>IP: 167.99.161.63</h2>
  55. <h6>Credenciales SSH</h6>
  56. <p><strong>User:</strong> root<br>
  57. <strong>Pass:</strong>solarEn2026EsTodo</p>
  58. <hr>
  59. <h6>Credenciales PostgreSQL</h6>
  60. <p><strong>User:</strong> postgres<br>
  61. <strong>Pass:</strong>solarEn2026EsTodo</p>
  62. <hr>
  63. <h6>Comandos PostgreSQL</h6>
  64. <ul class="list-unstyled">
  65. <li><code>psql -U postgres -h localhost -d solarcalc</code> - Conectar a DB</li>
  66. <li><code>\dt</code> - Listar tablas (dentro de psql)</li>
  67. <li><code>select * from casas;</code> - Ver casas</li>
  68. <li><code>systemctl status postgresql</code> - Estado del servicio</li>
  69. </ul>
  70. </div>
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. <script>
  76. const socket = io('/ssh');
  77. const term = new Terminal({
  78. cursorBlink: true,
  79. theme: {
  80. background: '#1e1e1e'
  81. }
  82. });
  83. const fitAddon = new FitAddon.FitAddon();
  84. term.loadAddon(fitAddon);
  85. term.open(document.getElementById('terminal'));
  86. fitAddon.fit();
  87. window.addEventListener('resize', () => fitAddon.fit());
  88. term.onData(data => {
  89. socket.emit('ssh_input', {data: data});
  90. });
  91. socket.on('ssh_output', function(msg) {
  92. term.write(msg.data);
  93. });
  94. socket.on('ssh_status', function(msg) {
  95. const statusDiv = document.getElementById('status');
  96. if (msg.status === 'connected') {
  97. statusDiv.innerHTML = '<span class="text-success">Conectado</span>';
  98. term.focus();
  99. } else {
  100. statusDiv.innerHTML = '<span class="text-danger">Error: ' + msg.message + '</span>';
  101. }
  102. });
  103. document.getElementById('ssh-form').addEventListener('submit', function(e) {
  104. e.preventDefault();
  105. const host = document.getElementById('host').value;
  106. const port = document.getElementById('port').value;
  107. const username = document.getElementById('username').value;
  108. const password = document.getElementById('password').value;
  109. document.getElementById('status').innerHTML = '<span class="text-warning">Conectando...</span>';
  110. term.clear();
  111. socket.emit('start_ssh', {
  112. host: host,
  113. port: port,
  114. username: username,
  115. password: password
  116. });
  117. });
  118. </script>
  119. {% endblock %}