Tombol Logout Melayang JS Guacamole Terminal

Cara Membuat Tombol Keluar (Logout) Melayang Kustom di Apache Guacamole

Salah satu masalah paling menjengkelkan saat menjadi administrator Apache Guacamole adalah menghadapi pengguna awam. Mereka sering kali langsung menutup paksa tab browser (tanda X) saat selesai menggunakan aplikasi remote, tanpa melakukan logout dengan benar. Akibat fatalnya adalah: sesi RDP di dalam server/komputer target akan terus dibiarkan menggantung (nyangkut) di latar belakang sehingga secara perlahan menguras dan mencekik kapasitas RAM server Anda!

Sebagai solusinya, kita bisa meracik sebuah ekstensi JavaScript khusus yang akan memunculkan tombol merah mencolok bertuliskan "Logout & Akhiri". Tombol ini akan senantiasa melayang (mengikuti scroll) di pojok layar pengguna selama mereka terhubung ke server.


Kode JavaScript: floating-exit.js

Buatlah sebuah paket ekstensi Guacamole kustom (.jar) dan masukkan kode berikut ke dalam file JavaScript Anda. Tombol ini dilengkapi logika cerdas untuk hanya muncul ketika pengguna sedang aktif berada di dalam sesi koneksi kanvas (berdasarkan deteksi URL /client/) dan akan hilang otomatis secara instan saat mereka kembali ke halaman menu utama.

setInterval(function() {
    var btn = document.getElementById('custom-exit-btn');
    if (!btn && document.body) {
        btn = document.createElement('div');
        btn.id = 'custom-exit-btn';
        btn.innerHTML = '✖ Logout & Akhiri';
        
        // CSS Inline untuk mendesain tombol melayang (posisi di Kanan Atas)
        btn.style.position = 'fixed';
        btn.style.top = '30px';
        btn.style.right = '30px';
        btn.style.backgroundColor = 'rgba(220, 53, 69, 0.9)';
        btn.style.color = 'white';
        btn.style.padding = '12px 20px';
        btn.style.borderRadius = '50px';
        btn.style.cursor = 'pointer';
        btn.style.zIndex = '9999999';
        btn.style.fontFamily = 'Arial, sans-serif';
        btn.style.fontWeight = 'bold';
        btn.style.display = 'none';
        // Logika pembersihan cache sesi dan pemaksaan logout
        btn.onclick = function() {
            if(confirm("Apakah Anda yakin ingin Logout dan mengakhiri sesi server ini?")) {
                localStorage.removeItem('GUAC_AUTH');
                sessionStorage.removeItem('GUAC_AUTH');
                document.cookie = "GUAC_AUTH=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
                window.location.href = window.location.pathname;
            }
        };
        document.body.appendChild(btn);
    }
    
    // Logika deteksi cerdas: Hanya merender tombol jika berada di layar /client/
    if (btn) {
        btn.style.display = window.location.hash.indexOf('/client/') !== -1 ? 'block' : 'none';
    }
}, 1000);

Tombol ini tidak hanya indah dan menonjol secara visual, tetapi eksekusi kliknya juga dirancang untuk membersihkan token autentikasi secara destruktif pada Local Storage, Session Storage, dan Cookie Browser. Trik ini memaksa web server untuk memutuskan sesi RDP pengguna dengan sangat bersih dan elegan.

Tidak ada komentar:

Posting Komentar