!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/wincloud_gateway/node_modules/redis-lru/test/   drwxr-xr-x
Free 13.3 GB of 57.97 GB (22.94%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     redisMock.js (2.9 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
'use strict';

// none of the redis mock modules properly support zsets, so here goes a quick & dirty one

let db = {};

const redisMock = {
  get: (key, cb) => cb(null, db[key] || null),
  set: (key, value, px, ms, cb) => {
    if (!ms) {
      cb = px;
    } else if (px.toLowerCase() === 'px') {
      setTimeout(() => { delete db[key]; }, ms);
    }

    db[key] = value;
    cb(null);
  },
  del: (key, cb) => {
    const keys = Array.isArray(key) && key || [key];
    keys.forEach((k) => {
      delete db[k];
    });
    cb(null);
  },

  zadd: function (key, xx, ch, incr, score, member, cb) {
    const args = Array.from(arguments);
    const optXX = args.find((arg) => typeof arg === 'string' && arg.toLowerCase() === 'xx');
    const optCH = args.find((arg) => typeof arg === 'string' && arg.toLowerCase() === 'ch');
    const optINCR = args.find((arg) => typeof arg === 'string' && arg.toLowerCase() === 'incr');
    const required = args.slice(-3);
    score = required[0];
    member = required[1];
    cb = required[2];

    db[key] = db[key] || [];

    let result = 0;
    const index = db[key].findIndex((item) => item.member === member);
    if (index !== -1) {
      score = optINCR ? db[key][index].score + score : score;
      db[key][index] = {member, score};

      result = optCH ? 1 : 0; // if CH return changed
    } else if (!optXX) {
      db[key].push({member, score});
      result = optCH ? 0 : 1; // if not CH return added
    }

    db[key] = db[key].sort((a, b) => a.score - b.score);
    cb(null, result);
  },

  zrange: (key, start, end, cb) => {
    if (end === -1) {
      end = Infinity;
    } else {
      end = end + 1;
    }

    const result = (db[key] || []).slice(start, end).map((item) => item.member);
    return cb(null, result);
  },

  zscore: (key, member, cb) => {
    const item = db[key] && db[key].find((i) => i.member === member);
    cb(null, item && item.score || null);
  },

  zcard: (key, cb) => cb(null, db[key] && db[key].length || 0),

  zrem: (key, member, cb) => {
    const members = Array.isArray(member) && member || [member];

    members.forEach((m) => {
      db[key] = db[key].filter((item) => item.member !== m);
    });

    if (!db[key].length) {
      delete db[key]; // redis seems to do this
    }

    cb(null);
  },

  multi: function () {
    const client = this;
    const results = [];

    const multiObj = {};

    ['get', 'set', 'del', 'zadd', 'zrange', 'zrem']
      .forEach((method) => {
        multiObj[method] = function () {
          // take arguments and add a custom callback
          const args = Array.from(arguments).concat([(e, res) => results.push(res)]);
          client[method].apply(client, args);
          return multiObj;
        };
      });

    multiObj.exec = (cb) => cb(null, results);
    return multiObj;
  },

  flushdb: (cb) => {
    db = {};
    cb(null);
  },
  dbsize: (cb) => cb(null, Object.keys(db).length)
};

module.exports = redisMock;

:: 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.0704 ]--