You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.0 KiB
118 lines
3.0 KiB
5 years ago
|
<?php
|
||
|
|
||
|
class wfImportExportController {
|
||
|
/**
|
||
|
* Returns the singleton wfImportExportController.
|
||
|
*
|
||
|
* @return wfImportExportController
|
||
|
*/
|
||
|
public static function shared() {
|
||
|
static $_shared = null;
|
||
|
if ($_shared === null) {
|
||
|
$_shared = new wfImportExportController();
|
||
|
}
|
||
|
return $_shared;
|
||
|
}
|
||
|
|
||
|
public function export() {
|
||
|
$export = array();
|
||
|
|
||
|
//Basic Options
|
||
|
$keys = wfConfig::getExportableOptionsKeys();
|
||
|
foreach ($keys as $key) {
|
||
|
$export[$key] = wfConfig::get($key, '');
|
||
|
}
|
||
|
|
||
|
//Serialized Options
|
||
|
$export['scanSched'] = wfConfig::get_ser('scanSched', array());
|
||
|
|
||
|
//Table-based Options
|
||
|
$export['blocks'] = wfBlock::exportBlocks();
|
||
|
|
||
|
//Make the API call
|
||
|
try {
|
||
|
$api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion());
|
||
|
$res = $api->call('export_options', array(), array('export' => json_encode($export)));
|
||
|
if ($res['ok'] && $res['token']) {
|
||
|
return array(
|
||
|
'ok' => 1,
|
||
|
'token' => $res['token'],
|
||
|
);
|
||
|
}
|
||
|
else if ($res['err']) {
|
||
|
return array('err' => __("An error occurred: ", 'wordfence') . $res['err']);
|
||
|
}
|
||
|
else {
|
||
|
throw new Exception(__("Invalid response: ", 'wordfence') . var_export($res, true));
|
||
|
}
|
||
|
}
|
||
|
catch (Exception $e) {
|
||
|
return array('err' => __("An error occurred: ", 'wordfence') . $e->getMessage());
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function import($token) {
|
||
|
try {
|
||
|
$api = new wfAPI(wfConfig::get('apiKey'), wfUtils::getWPVersion());
|
||
|
$res = $api->call('import_options', array(), array('token' => $token));
|
||
|
if ($res['ok'] && $res['export']) {
|
||
|
$totalSet = 0;
|
||
|
$import = @json_decode($res['export'], true);
|
||
|
if (!is_array($import)) {
|
||
|
return array('err' => __("An error occurred: Invalid options format received.", 'wordfence'));
|
||
|
}
|
||
|
|
||
|
//Basic Options
|
||
|
$keys = wfConfig::getExportableOptionsKeys();
|
||
|
$toSet = array();
|
||
|
foreach ($keys as $key) {
|
||
|
if (isset($import[$key])) {
|
||
|
$toSet[$key] = $import[$key];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (count($toSet)) {
|
||
|
$validation = wfConfig::validate($toSet);
|
||
|
$skipped = array();
|
||
|
if ($validation !== true) {
|
||
|
foreach ($validation as $error) {
|
||
|
$skipped[$error['option']] = $error['error'];
|
||
|
unset($toSet[$error['option']]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$totalSet += count($toSet);
|
||
|
wfConfig::save(wfConfig::clean($toSet));
|
||
|
}
|
||
|
|
||
|
//Serialized Options
|
||
|
if (isset($import['scanSched']) && is_array($import['scanSched'])) {
|
||
|
wfConfig::set_ser('scanSched', $import['scanSched']);
|
||
|
wfScanner::shared()->scheduleScans();
|
||
|
$totalSet++;
|
||
|
}
|
||
|
|
||
|
//Table-based Options
|
||
|
if (isset($import['blocks']) && is_array($import['blocks'])) {
|
||
|
wfBlock::importBlocks($import['blocks']);
|
||
|
$totalSet += count($import['blocks']);
|
||
|
}
|
||
|
|
||
|
return array(
|
||
|
'ok' => 1,
|
||
|
'totalSet' => $totalSet,
|
||
|
);
|
||
|
}
|
||
|
else if ($res['err']) {
|
||
|
return array('err' => "An error occurred: " . $res['err']);
|
||
|
}
|
||
|
else {
|
||
|
throw new Exception("Invalid response: " . var_export($res, true));
|
||
|
}
|
||
|
}
|
||
|
catch (Exception $e) {
|
||
|
return array('err' => "An error occurred: " . $e->getMessage());
|
||
|
}
|
||
|
}
|
||
|
}
|