!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 

uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/var/www/html/billing/sysinfo/lib/   drwxr-xr-x
Free 13.26 GB of 57.97 GB (22.87%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     class.out_ncurses.php (6.58 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

/**
 * This file is part of Linfo (c) 2011 Joseph Gillotti.
 * 
 * Linfo is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * Linfo is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with Linfo.  If not, see <http://www.gnu.org/licenses/>.
*/

/**
 * Keep out hackers...
 */
defined('IN_INFO') or exit;

/**
 * Output in ncurses format for client side CLI functionality
 * @author Joseph Gillotti
 */
class out_ncurses {

    
// Localize fun shit
    
private 

        
// Store our windows here
        
$_windows = array(),
        
$_max_dims = array(),
        
        
// ncurses loaded?
        
$loaded true;

    
// Start us off by checking important shit and starting it
    
public function __construct() {

        
// We obviously need this
        
if (!extension_loaded('ncurses')) {
            echo 
"ncurses extension not loaded\n";
            
$this->loaded false;
            exit(
1);
        }

        
// Start ncurses
        
ncurses_init();
        
ncurses_timeout(0);
    }

    
// Make sure ncurses_end() always gets called no matter what;
    // not doing so will leave the terminal messed up until the user 
    // runs 'reset'
    
public function __destruct() {
        if (
$this->loaded)
            
ncurses_end();    
    }

    
// Handle the shit
    
public function work($info$settings$getter) {
        
        
// Gain access to translations
        
global $lang;

        
// Say we're called more than once. Kill previous remnants
        
if (count($this->_windows) > 0)
            
$this->_kill_windows();
        
        
// Get dimensions and give lovely header text
        
$fullscreen ncurses_newwin(0000);
        
ncurses_wrefresh($fullscreen);
        
ncurses_getmaxyx ($fullscreen$x$y);
        
ncurses_mvwaddstr($fullscreen00'Generated by '.AppName.' ('.VERSION.') on '.date('m/d/Y @ h:i:s A (T)'));
        
ncurses_wrefresh($fullscreen);
        
$this->_max_dims = array($x$y);

        
// Some important windows
        
$core_wins = array(
            array(
                
'name' => $lang['core'],
                
'content' => array(
                    array(
$lang['os'], $info['OS']),
                    
array_key_exists('Distro'$info) ? array($lang['distro'], $info['Distro']['name'] . ($info['Distro']['version'] ? ' '.$info['Distro']['version'] : '') ) : false,
                    array(
$lang['kernel'], $info['Kernel']),
                    
array_key_exists('Model'$info) && !empty($info['Model']) ? array($lang['model'], $info['Model']) : false,
                    array(
$lang['uptime'], str_ireplace(array(' ''days''minutes''hours''seconds'), array('''d''m''h''s'), reset(explode(';'$info['UpTime'])))),
                    array(
$lang['hostname'], $info['HostName']),

                    
array_key_exists('CPUArchitecture'$info) ? array($lang['cpu_arch'], $info['CPUArchitecture']) : false,

                    array(
$lang['load'], implode(' ', (array) $info['Load']))
                )
            ),
            array(
                
'name' => $lang['memory'],
                
'content' => array(
                    array(
$lang['size'], byte_convert($info['RAM']['total'])),
                    array(
$lang['used'], byte_convert($info['RAM']['total'] - $info['RAM']['free'])),
                    array(
$lang['free'], byte_convert($info['RAM']['free'])),
                )
            )
        );

        
// Show them
        
$h 1;
        foreach (
$core_wins as $win) {
            list(
$width$height) = $this->_window_with_lines($win['name'], $win['content'], $h0);
            
$h += $height 1;
        }

        
// Makeshift event loop
        
while (true) {

            
// Die on input
            
$getch ncurses_getch();
            if (
$getch && $getch == 113) {
                
$this->__destruct();
                echo 
"\nEnding at your request.\n";
                exit(
0);
            }

            
// Stop temporariy
            
ncurses_napms(1000);

            
// Call ourselves
            
$this->work($getter->getAll(), $settings$getter);
        }
    }

    
// Create a window with various lines as content
    
private function _window_with_lines($name$lines$x 5$y 5$set_width false) {

        
// Need an array of lines. 
        
$lines = (array) $lines;

        
// Ignore disabled liens
        
$lines array_filter($lines);

        
// Do we not have a specific set width? Calculate the longest line
        
if (!is_numeric($set_width)) {
            
$longest_line strlen($name) + 10;
            foreach (
$lines as $line) {
                
$length strlen(implode(''$line));
                
$longest_line $length $longest_line $length $longest_line;
            }
            
$width $longest_line 4;
        }

        
// Otherwise we do have a set with
        
else
            
$width $set_width;

        
// Calculate window hight
        
$height count($lines);

        
// Create window
        
$win =  ncurses_newwin($height$width$x$y);

        
// This character will be the side borders
        
$side ord('|');

        
// Do the borders of the window
        
ncurses_wborder($win$side$sideord('-'), ord('-'), ord('/'), ord('\\'), ord('\\'), ord('/'));

        
// Add window title string
        
ncurses_mvwaddstr($win11$this->_charpad($name$width'c''='));

        
// Keep track of vertical position for each line
        
$v 1;

        
// Go through and output each line, while incrementing line position counter
        
foreach ($lines as $line) {
            
ncurses_mvwaddstr($win$v 11$this->_charpad($line[0] . $this->_charpad($line[1], $width strlen($line[0]), 'r''.'), $width'n'));
            
$v++;
        }

        
// Show it
        
ncurses_wrefresh($win);

        
// Store it so we can kill it later
        
$this->_windows[] = &$win;

        
// Return window dimensions
        
return array($width$height);
    }

    
// Kill all windows
    
private function _kill_windows() {
        foreach (
$this->_windows as $win) {
            
is_resource($win) &&
                
ncurses_delwin($win);
        }
    }

    
// Because I got tired of sprintf
    
private function _charpad($string$length$direction$filler ' ') {
        
        
// Keep length of string handy here
        
$strlen strlen($string);

        
// Difference between max length and string length
        
$difference $length $strlen;

        
// If the string length is bigger than the max, just return string truncated to the max length
        
if ($difference 0)
            return 
substr($string0$length);

        
// Deal with direction
        
switch ($direction) {

            
// Right aligned (padded to the left)
            
case 'r':
                return 
str_repeat($filler$difference 2) . $string;
            break;

            
// Left aligned (padded to the right)
            
case 'l':
                return 
$string str_repeat($filler$difference 2);
            break;

            
// Centered (padded left and right)
            
case 'c':
                
$cdiff floor($difference 2) - ($difference == 0);
                return 
str_repeat($filler$cdiff 1) . $string str_repeat($filler$cdiff);
            break;

            
// Not padded; returned as is (provided not longer than max, as tested above)
            
case 'n':
                return 
$string;
            break;

            
// Uhh not sure?
            
default:
                return 
'';
            break;
        }
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0432 ]--