Path: blob/master/extensions/admin_ui/media/javascript/ui/panel/PanelViewer.js
1154 views
//1// Copyright (c) 2006-2025 Wade Alcorn - [email protected]2// Browser Exploitation Framework (BeEF) - https://beefproject.com3// See the file 'doc/COPYING' for copying permission4//56PanelViewer = {};7var mainPanel, zombiesTreeLists, zombieTabs, zombiesManager;89Ext.onReady(function() {1011Ext.QuickTips.init();1213zombiesTreeLists = {14'basic' : new zombiesTreeList('basic'),15'requester' : new zombiesTreeList('requester')16};1718zombieTabs = new ZombieTabs(zombiesTreeLists);19zombiesManager = new ZombiesMgr(zombiesTreeLists);20mainPanel = new MainPanel();2122var viewport = new Ext.Viewport({23layout:'border',24items:[25new Ext.BoxComponent({26region:'north',27el: 'header',28height: 3229}),30zombieTabs,31mainPanel32]33});34setTimeout("locationHashChanged()", 1000);3536new DoLogout();37});3839/*40* Panel Events Updater41*42* This event updater retrieves zombie updates every periodically.43* The poll timer is specified in befe.extension.admin_ui.panel_update_interval44* These updates are then pushed to various managers (i.e. the zombie manager).45*/46var lastpoll = new Date().getTime();4748Ext.TaskMgr.start({49run: function() {50Ext.Ajax.request({51url: '/api/hooks/?token=' + beefwui.get_rest_token(),52method: 'GET',53success: function(response) {54var updates;55try {56updates = Ext.util.JSON.decode(response.responseText);57} catch (e) {58//The framework has probably been reset and you're actually logged out59var hr = document.getElementById("header-right");60hr.innerHTML = "You appear to be logged out. <a href='<%= @base_path %>/panel/'>Login</a>";61}62var hooked_browsers = (updates['hooked-browsers']) ? updates['hooked-browsers'] : null;6364if(zombiesManager && hooked_browsers) {65zombiesManager.updateZombies(hooked_browsers);66}67lastpoll = new Date().getTime();68var hr = document.getElementById("header-right");69hr.innerHTML = "";70},71failure: function(response) {72var timenow = new Date().getTime();7374if ((timenow - lastpoll) > 60000) {75var hr = document.getElementById("header-right");76hr.innerHTML = "Framework is down";77}78}79});80},8182interval: <%= (BeEF::Core::Configuration.instance.get("beef.extension.admin_ui.panel_update_interval") || 10).to_i * 1_000 %>83});8485/*86* Allow selecting a browser with #id=<session> in the /ui/panel URL87*/88function locationHashChanged() {89var id = location_hash('id');9091if (id === null) return;9293var zombie = Object.values(beefwui.hooked_browsers).find(hb => hb.session === id);9495id = id.replace(/[^a-z0-9]/gi, '');96console.log("Loading hooked browser with ID: " + id);97mainPanel.remove(mainPanel.getComponent('current-browser'));98if(!mainPanel.getComponent('current-browser')) {99mainPanel.add(new ZombieTab(zombie));100}101102mainPanel.activate(mainPanel.getComponent('current-browser'));103//removeHash();104}105106function location_hash(key) {107var matches = location.hash.match(new RegExp(key+'=([^&]*)'));108return matches ? matches[1] : null;109}110111function removeHash () {112history.pushState("", document.title, window.location.pathname + window.location.search);113}114115window.onhashchange = locationHashChanged;116117118119