示例#1
0
 * astdb - tools for handeling the astdb
 */
$getopt = (function_exists('_getopt') ? '_' : '') . 'getopt';
$vars = $getopt($short = '', $long = array('opts::', 'id::', 'astdb::', 'data::'));
//if the id option was passed
if (isset($vars['id']) && $vars['id']) {
    //bu = backup settings
    //s= servers
    //b= backup object
    if ($bu = backup_get_backup($vars['id'])) {
        //dont run if no storage servers were found
        if (!isset($bu['storage_servers']) || count($bu['storage_servers']) < 1) {
            backup_log(_('No storage servers found! Aborting.'));
            exit;
        }
        $s = backup_get_server('all_detailed');
        $b = new FreePBX\modules\Backup\Backup($bu, $s);
        backup_log(_('Initializing Backup') . ' ' . $vars['id']);
        backup_clear_log();
        $b->init();
        if ($b->b['bu_server'] == "0") {
            // lock to prevent backups from being run concurrently
            while (!$b->acquire_lock()) {
                backup_log(_('waiting for lock...'));
                sleep(10);
            }
            backup_log(_('Backup Lock acquired!'));
            backup_log(_('Running pre-backup hooks...'));
            $b->run_hooks('pre-backup');
            backup_log(_('Adding items...'));
            $b->add_items();
示例#2
0
        break;
    default:
        //if backup_restore_path is already set, we probobly dont want that any more. delete it
        if (isset($_SESSION['backup_restore_path'])) {
            unset($_SESSION['backup_restore_path']);
        }
        break;
}
//view actions
switch ($var['action']) {
    case 'browseserver':
        $content = load_view(dirname(__FILE__) . '/views/restore/browseserver.php', $var);
        break;
    case 'upload':
    case 'backup_list':
        $var['servers'] = backup_get_server('all');
        $var['templates'] = backup_get_template('all_detailed');
        //transalate variables
        //TODO: make this anonymous once we require php 5.3
        function callback(&$var)
        {
            $var = backup__($var);
        }
        array_walk_recursive($var['servers'], 'callback');
        array_walk_recursive($var['templates'], 'callback');
        if (is_array($_SESSION['backup_restore_path'])) {
            //TODO: if $var['restore_path'] is an array, that means it contains an error + error
            // message. Do something with the error meesage
            echo _('Invalid backup for or undefined error');
            break;
        }
示例#3
0
 public function getRightNav($request)
 {
     $var = array();
     switch ($request['display']) {
         case 'backup':
             if (isset($request['action']) && $request['action'] == 'edit') {
                 $var['backup'] = backup_get_backup('all');
             }
             return load_view(dirname(__FILE__) . '/views/rnav/backup.php', $var);
             break;
         case 'backup_restore':
             $var['servers'] = backup_get_server('all');
             return load_view(dirname(__FILE__) . '/views/rnav/restore.php', $var);
             break;
         case 'backup_servers':
             if (isset($request['action']) && $request['action'] == 'edit') {
                 $var['servers'] = backup_get_server('all');
             }
             return load_view(dirname(__FILE__) . '/views/rnav/servers.php', $var);
             break;
         case 'backup_templates':
             if (isset($request['action']) && $request['action'] == 'edit') {
                 $var['templates'] = backup_get_template('all');
             }
             return load_view(dirname(__FILE__) . '/views/rnav/templates.php', $var);
             break;
     }
 }
        $var['maxsize'] = $maxsize;
        unset($var['maxtype']);
        $var['id'] = backup_put_server($var);
        break;
    case 'delete':
        $var['id'] = backup_del_server($var['id']);
        break;
}
//view action
switch ($var['action']) {
    case 'edit':
    case 'save':
        if (!$var['id']) {
            $var['id'] = $var['server_type'];
        }
        $var = array_merge($var, backup_get_server($var['id']));
        $content = load_view(dirname(__FILE__) . '/views/servers/' . $var['type'] . '.php', $var);
        break;
    default:
        $content = load_view(dirname(__FILE__) . '/views/servers/servers.php', $var);
        break;
}
$heading = _("Servers");
?>

<div class="container-fluid">
	<h1><?php 
echo $heading;
?>
</h1>
	<div class = "display full-border">
示例#5
0
function backup_get_server($id = '')
{
    global $db;
    //return a blank if no id was set, all servers if 'all' was passed
    //otherwise, a specifc server
    switch ($id) {
        case 'email':
        case 'ftp':
        case 'local':
        case 'mysql':
        case 'awss3':
        case 'ssh':
            global $backup_server_blanks;
            return $backup_server_blanks[$id];
            break;
        case 'all':
        case 'all_detailed':
            $ret = sql('SELECT * FROM backup_servers ORDER BY name', 'getAll', DB_FETCHMODE_ASSOC);
            foreach ($ret as $s) {
                //set index to server id for easy retrieval
                $servers[$s['id']] = $s;
                //default name in one is missing
                if (!$servers[$s['id']]['name']) {
                    switch ($s['type']) {
                        case 'email':
                            $sname = _('Email Server ');
                            break;
                        case 'ftp':
                            $sname = _('FTP Server ');
                            break;
                        case 'local':
                            $sname = _('Local Server ');
                            break;
                        case 'mysql':
                            $sname = _('Mysql Server ');
                            break;
                        case 'ssh':
                            $sname = _('SSH Server ');
                            break;
                        case 'awss3':
                            $sname = _('Amazon S3 Server ');
                            break;
                    }
                    $servers[$s['id']]['name'] = $sname . $s['id'];
                }
                //add details if requested
                if ($id == 'all_detailed') {
                    $servers[$s['id']] = backup_get_server($s['id']);
                }
            }
            return $servers;
            break;
        default:
            $sql = 'SELECT * FROM backup_servers WHERE id = ?';
            $ret = $db->getAll($sql, array($id), DB_FETCHMODE_ASSOC);
            if ($db->IsError($ret)) {
                die_freepbx($ret->getDebugInfo());
            }
            //return a blank set if an invalid id was entered
            if (!$ret) {
                return backup_get_server('');
            }
            $ret = $ret[0];
            $sql = 'SELECT `key`, value FROM backup_server_details WHERE server_id = ?';
            $ret1 = $db->getAll($sql, array($id), DB_FETCHMODE_ASSOC);
            if ($db->IsError($ret1)) {
                die_freepbx($ret1->getDebugInfo());
            }
            foreach ($ret1 as $key => $r) {
                $ret[$r['key']] = $r['value'];
            }
            //default a name
            switch ($ret['type']) {
                case 'email':
                    $sname = _('Email Server ');
                    break;
                case 'ftp':
                    $sname = _('FTP Server ');
                    break;
                case 'local':
                    $sname = _('Local Server ');
                    break;
                case 'mysql':
                    $sname = _('Mysql Server ');
                    break;
                case 'ssh':
                    $sname = _('SSH Server ');
                    break;
                case 'awss3':
                    $sname = _('AWS S3 Server ');
                    break;
            }
            $ret['name'] = $ret['name'] ? $ret['name'] : $sname . $ret['id'];
            //unserialize readonly
            $ret['readonly'] = $ret['readonly'] ? unserialize($ret['readonly']) : array();
            return $ret;
            break;
    }
}
示例#6
0
/**
 * make sure backup file is local, download it and make it local if necessary
 */
function backup_restore_locate_file($id, $path)
{
    global $amp_conf;
    $path = trim($path, '/');
    $path = str_replace(array('..', ':'), '', trim($path, '/'));
    $path = escapeshellcmd($path);
    $s = backup_get_server($id);
    if (!$s) {
        return array('error_msg' => _('Backup Server not found!'));
    }
    //dest is where we gona put backup files pulled infrom other servers
    $dest = $amp_conf['ASTSPOOLDIR'] . '/tmp/' . 'backuptmp-s' . $id . '-' . time() . '-' . basename($path);
    switch ($s['type']) {
        case 'local':
            $s['path'] = backup__($s['path']);
            $path = $s['path'] . '/' . $path;
            break;
        case 'ftp':
            //subsitute variables if nesesary
            $s['host'] = backup__($s['host']);
            $s['port'] = backup__($s['port']);
            $s['user'] = backup__($s['user']);
            $s['password'] = backup__($s['password']);
            $s['path'] = backup__($s['path']);
            $path = ltrim($path, '/');
            $connection = new Connection($s['host'], $s['user'], $s['password'], $s['port'], 90, $s['transfer'] == 'passive');
            try {
                $connection->open();
            } catch (\Exception $e) {
                $this->b['error'] = $e->getMessage();
                backup_log($this->b['error']);
                return;
            }
            $wrapper = new FTPWrapper($connection);
            $permFactory = new PermissionsFactory();
            $ftptype = $wrapper->systype();
            if (strtolower($ftptype) == "unix") {
                $fsFactory = new FilesystemFactory($permFactory);
            } else {
                $fsFactory = new WindowsFilesystemFactory();
            }
            $manager = new FTPFilesystemManager($wrapper, $fsFactory);
            $dlVoter = new DownloaderVoter();
            $dlVoter->addDefaultFTPDownloaders($wrapper);
            $ulVoter = new UploaderVoter();
            $ulVoter->addDefaultFTPUploaders($wrapper);
            $crVoter = new CreatorVoter();
            $crVoter->addDefaultFTPCreators($wrapper, $manager);
            $deVoter = new DeleterVoter();
            $deVoter->addDefaultFTPDeleters($wrapper, $manager);
            $ftp = new FTP($manager, $dlVoter, $ulVoter, $crVoter, $deVoter);
            if (!$ftp) {
                $this->b['error'] = _("Error creating the FTP object");
            }
            $ftpdirs = $ftp->findFilesystems(new \Touki\FTP\Model\Directory($s['path']));
            $file = null;
            foreach ($ftpdirs as $thisdir) {
                if ($ftp->fileExists(new \Touki\FTP\Model\File($thisdir->getRealPath() . '/' . $path))) {
                    $file = $ftp->findFileByName($thisdir->getRealPath() . '/' . $path);
                }
            }
            try {
                $options = array(FTP::NON_BLOCKING => false, FTP::TRANSFER_MODE => FTP_BINARY);
                $ftp->download($dest, $file, $options);
                $path = $dest;
            } catch (\Exception $e) {
                return array('error_msg' => _('Failed to retrieve file from server!'));
            }
            break;
        case 'ssh':
            $s['path'] = backup__($s['path']);
            $s['user'] = backup__($s['user']);
            $s['host'] = backup__($s['host']);
            $cmd[] = fpbx_which('scp');
            $cmd[] = '-o StrictHostKeyChecking=no -i';
            $cmd[] = $s['key'];
            $cmd[] = '-P ' . $s['port'];
            $cmd[] = $s['user'] . '\\@' . $s['host'] . ':' . $s['path'] . '/' . $path;
            $cmd[] = $dest;
            exec(implode(' ', $cmd), $foo, $ret);
            unset($cmd);
            if ($ret === 0) {
                $path = $dest;
            } else {
                return array('error_msg' => _('Failed to retrieve file from server!'));
            }
            break;
        case 'awss3':
            $s['bucket'] = backup__($s['bucket']);
            $s['awsaccesskey'] = backup__($s['awsaccesskey']);
            $s['awssecret'] = backup__($s['awssecret']);
            $awss3 = new S3($s['awsaccesskey'], $s['awssecret']);
            dbug('S3 Path: ' . $path);
            dbug('S3 Dest: ' . $dest);
            if ($awss3->getObject($s['bucket'], $path, $dest) !== false) {
                $path = $dest;
            } else {
                return array('error_msg' => _('Failed to retrieve file from server!'));
            }
            break;
    }
    if (file_exists($path)) {
        return $path;
    } else {
        return array('error_msg' => _('File not found! ' . $path));
    }
}
示例#7
0
文件: restore.php 项目: lidl/backup
/**
 * make sure backup file is local, download it and make it local if necessary
 */
function backup_restore_locate_file($id, $path)
{
    global $amp_conf;
    $path = trim($path, '/');
    $path = str_replace(array('..', ':'), '', trim($path, '/'));
    $path = escapeshellcmd($path);
    $s = backup_get_server($id);
    if (!$s) {
        return array('error_msg' => _('Backup Server not found!'));
    }
    //dest is where we gona put backup files pulled infrom other servers
    $dest = $amp_conf['ASTSPOOLDIR'] . '/tmp/' . 'backuptmp-s' . $id . '-' . time() . '-' . basename($path);
    switch ($s['type']) {
        case 'local':
            $s['path'] = backup__($s['path']);
            $path = $s['path'] . '/' . $path;
            break;
        case 'ftp':
            //subsitute variables if nesesary
            $s['host'] = backup__($s['host']);
            $s['port'] = backup__($s['port']);
            $s['user'] = backup__($s['user']);
            $s['password'] = backup__($s['password']);
            $s['path'] = backup__($s['path']);
            $ftp = ftp_connect($s['host'], $s['port']);
            if (ftp_login($ftp, $s['user'], $s['password'])) {
                ftp_pasv($ftp, $s['transfer'] == 'passive');
                if (ftp_get($ftp, $dest, $s['path'] . '/' . $path, FTP_BINARY)) {
                    $path = $dest;
                } else {
                    return array('error_msg' => _('Failed to retrieve file from server!'));
                }
                ftp_close($ftp);
            } else {
                dbug('ftp connect error');
            }
            break;
        case 'ssh':
            $s['path'] = backup__($s['path']);
            $s['user'] = backup__($s['user']);
            $s['host'] = backup__($s['host']);
            $cmd[] = fpbx_which('scp');
            $cmd[] = '-o StrictHostKeyChecking=no -i';
            $cmd[] = $s['key'];
            $cmd[] = '-P ' . $s['port'];
            $cmd[] = $s['user'] . '\\@' . $s['host'] . ':' . $s['path'] . '/' . $path;
            $cmd[] = $dest;
            exec(implode(' ', $cmd), $foo, $ret);
            unset($cmd);
            if ($ret === 0) {
                $path = $dest;
            } else {
                return array('error_msg' => _('Failed to retrieve file from server!'));
            }
            break;
        case 'awss3':
            $s['bucket'] = backup__($s['bucket']);
            $s['awsaccesskey'] = backup__($s['awsaccesskey']);
            $s['awssecret'] = backup__($s['awssecret']);
            $awss3 = new S3($s['awsaccesskey'], $s['awssecret']);
            dbug('S3 Path: ' . $path);
            dbug('S3 Dest: ' . $dest);
            if ($awss3->getObject($s['bucket'], $path, $dest) !== false) {
                $path = $dest;
            } else {
                return array('error_msg' => _('Failed to retrieve file from server!'));
            }
            break;
    }
    if (file_exists($path)) {
        return $path;
    } else {
        return array('error_msg' => _('File not found! ' . $path));
    }
}