!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)

/usr/local/lib/node_modules/homebridge-camera-ui/server/components/backup/   drwxr-xr-x
Free 13.34 GB of 57.97 GB (23.02%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


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

const fs = require('fs-extra');
const os = require('os');
const path = require('path');
const tar = require('tar');

const config = require('../../../services/config/config.service.js');
const logger = require('../../../services/logger/logger.service');
const lowdb = require('../../services/lowdb.service');
const packageFile = require('../../../package.json');

const database = () => lowdb.database().then((database_) => database_.get('settings'));

exports.createBackup = async (localStorage) => {
  const Settings = await database();

  const databasePath = path.join(config.ui.dbPath, 'db');
  const recPath = await Settings.get('recordings').get('path').value();
  const backupDirectory = await fs.mkdtemp(path.join(os.tmpdir(), 'cameraui-backup-'));
  const backupFileName = 'cameraui-backup.tar.gz';
  const backupPath = path.resolve(backupDirectory, backupFileName);

  logger.info(`Creating temporary backup archive at ${backupPath}`);

  // create a copy of the db and recordings dir
  await fs.copy(databasePath, path.resolve(backupDirectory, 'db'));
  await fs.copy(recPath, path.resolve(backupDirectory, 'recordings'));

  // create a info.json
  await fs.writeJson(path.resolve(backupDirectory, 'info.json'), {
    timestamp: new Date().toISOString(),
    platform: os.platform(),
    node: process.version,
    cameraUi: packageFile.version,
    database: databasePath,
    recordings: recPath,
    localStorage: {
      camviewLayout: JSON.parse(localStorage.camviewLayout),
      dashboardLayout: JSON.parse(localStorage.dashboardLayout),
      theme: localStorage.theme,
      themeColor: localStorage.themeColor,
    },
  });

  // create a tar with the copied files
  await tar.c(
    {
      portable: true,
      gzip: true,
      file: backupPath,
      cwd: backupDirectory,
      filter: (filePath, stat) => {
        if (stat.size > 5e7) {
          this.logger.warn(`Backup is skipping "${filePath}" because it is larger than 50MB.`);
          return false;
        }
        return true;
      },
    },
    ['db', 'recordings', 'info.json']
  );

  return {
    backupDirectory,
    backupPath,
    backupFileName,
  };
};

exports.restoreBackup = async (file) => {
  const Settings = await database();

  const databasePath = path.join(config.ui.dbPath, 'db');
  const recPath = await Settings.get('recordings').get('path').value();

  const backupDirectory = file.destination;
  const backupFileName = file.filename; // eslint-disable-line no-unused-vars
  const backupPath = file.path;

  logger.warn('Starting backup restore...');

  // extract the tar
  await tar.x({
    cwd: backupDirectory,
    file: backupPath,
  });

  const infoFile = await fs.readJSON(`${backupDirectory}/info.json`);

  // move the content to desired directories
  await fs.move(backupDirectory + '/db', databasePath, { overwrite: true });
  await fs.move(backupDirectory + '/recordings', recPath, { overwrite: true });

  // remove tmp
  logger.warn('Removing unnecessary files...');
  await fs.remove(backupDirectory);

  // refresh db
  await lowdb.refreshDatabase();
  await lowdb.refreshRecordingsDatabase();

  logger.info('Backup was successfully restored');

  return infoFile.localStorage;
};

exports.removeBackup = async (backup) => {
  logger.info(`Removing temporary backup directory at ${backup.backupDirectory}`);
  return await fs.remove(backup.backupDirectory);
};

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