aboutsummaryrefslogtreecommitdiffstats
path: root/packages/autoconfigbackup/autoconfigbackup.php
diff options
context:
space:
mode:
authorScott Ullrich <sullrich@pfsense.org>2008-10-06 03:17:29 +0000
committerScott Ullrich <sullrich@pfsense.org>2008-10-06 03:17:29 +0000
commite06b65ef00232340d995d3031458bc6607114ebb (patch)
treea13b94b7c2e0d05d2fac36ad958161dcedaa1f12 /packages/autoconfigbackup/autoconfigbackup.php
parented1aa9b89dee7e9349a7a23390ca78f72a72f5e5 (diff)
downloadpfsense-packages-e06b65ef00232340d995d3031458bc6607114ebb.tar.gz
pfsense-packages-e06b65ef00232340d995d3031458bc6607114ebb.tar.bz2
pfsense-packages-e06b65ef00232340d995d3031458bc6607114ebb.zip
Adding restore client
Diffstat (limited to 'packages/autoconfigbackup/autoconfigbackup.php')
-rw-r--r--packages/autoconfigbackup/autoconfigbackup.php165
1 files changed, 165 insertions, 0 deletions
diff --git a/packages/autoconfigbackup/autoconfigbackup.php b/packages/autoconfigbackup/autoconfigbackup.php
new file mode 100644
index 00000000..49dd2ac0
--- /dev/null
+++ b/packages/autoconfigbackup/autoconfigbackup.php
@@ -0,0 +1,165 @@
+<?php
+/* $Id$ */
+/*
+ autoconfigbackup.php
+ Copyright (C) 2005 Colin Smith
+ Originally based on diag_confbak.php
+ Copyright (C) 2005 Colin Smith
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+require("guiconfig.inc");
+
+// Seperator used during client / server communications
+$oper_sep = "||";
+
+// URL to restore.php
+$get_url = "https://portal.pfsense.org/pfSconfigbackups/restore.php";
+
+// Encryption password
+$decrypt_password = $config['installedpackages']['autoconfigbackup']['config']['decrypt_password'];
+
+if($_GET['newver'] != "") {
+ // Phone home and obtain backups
+ $curl_Session = curl_init($get_url);
+ curl_setopt($curl_Session, CURLOPT_POST, 1);
+ curl_setopt($curl_Session, CURLOPT_POSTFIELDS, "action=restore&username={$username}&password={$password}&revision={$_GET['newver']}");
+ curl_setopt($curl_Session, CURLOPT_FOLLOWLOCATION, 1);
+ $data = curl_exec($curl_Session);
+ if (!tagfile_deformat($data, $data, "config.xml"))
+ $input_errors[] = "The downloaded file does not appear to contain an encrypted pfSense configuration.";
+ $data = decrypt_data($data, $decrypt_password);
+ $fd = fopen("/tmp/config_restore.xml", "w");
+ fwrite($fd, $data);
+ fclose($fd);
+ curl_close($curl_Session);
+ $confvers = unserialize(file_get_contents($g['cf_conf_path'] . '/backup/backup.cache'));
+ unlink("/tmp/config_restore.xml");
+ if(config_restore("/tmp/config_restore.xml") == 0) {
+ $savemsg = "Successfully reverted to timestamp " . date("n/j/y H:i:s", $_GET['newver']) . " with description \"" . $confvers[$_GET['newver']]['description'] . "\".";
+ } else {
+ $savemsg = "Unable to revert to the selected configuration.";
+ }
+} else {
+ // Grab username and password from config.xml
+ $username = $config['installedpackages']['autoconfigbackup']['config']['username'];
+ $password = $config['installedpackages']['autoconfigbackup']['config']['password'];
+ // Phone home and obtain backups
+ $curl_Session = curl_init($get_url);
+ curl_setopt($curl_Session, CURLOPT_POST, 1);
+ curl_setopt($curl_Session, CURLOPT_POSTFIELDS, "action=showbackups&username={$username}&password={$password}");
+ curl_setopt($curl_Session, CURLOPT_FOLLOWLOCATION, 1);
+ $data = curl_exec($curl_Session);
+ curl_close($curl_Session);
+}
+
+if($_GET['rmver'] != "") {
+ $confvers = unserialize(file_get_contents($g['cf_conf_path'] . '/backup/backup.cache'));
+ unlink_if_exists($g['conf_path'] . '/backup/config-' . $_GET['rmver'] . '.xml');
+ $savemsg = "Deleted backup with timestamp " . date("n/j/y H:i:s", $_GET['rmver']) . " and description \"" . $confvers[$_GET['rmver']]['description'] . "\".";
+}
+
+// Loop through and create new confvers
+$data_split = split($data, "\n");
+$confvers = array();
+$tmp_array = array();
+foreach($data_split as $ds) {
+ $ds_split = split($ds, $oper_sep);
+ $tmp_array['username'] = $ds_split[0];
+ $tmp_array['reason'] = $ds_split[1];
+ $tmp_array['time'] = $ds_split[2];
+ $confvers[] = $tmp_array();
+}
+
+$pgtitle = "Diagnostics: Auto Backup";
+include("head.inc");
+
+?>
+
+<body link="#0000CC" vlink="#0000CC" alink="#0000CC">
+<?php include("fbegin.inc"); ?>
+<p class="pgtitle"><?=$pgtitle?></p>
+<?php if($savemsg) print_info_box($savemsg); ?>
+<?php if ($input_errors) print_input_errors($input_errors); ?>
+<table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr><td>
+<?php
+ $tab_array = array();
+ $tab_array[0] = array("Settings", false, "/pkg_edit.php?xml=autoconfigbackup.xml&amp;id=0");
+ $tab_array[1] = array("Restore", true, "/autoconfigbackup.php");
+ display_top_tabs($tab_array);
+?>
+ </td></tr>
+ <tr>
+ <td>
+ <div id="mainarea">
+ <table class="tabcont" align="center" width="100%" border="0" cellpadding="6" cellspacing="0">
+<?php
+if(is_array($confvers)) {
+ ?>
+ <tr>
+ <td width="30%" class="listhdrr">Date</td>
+ <td width="70%" class="listhdrr">Configuration Change</td>
+ </tr>
+ <tr valign="top">
+ <td class="listlr"> <?= date("n/j/y H:i:s", $config['revision']['time']) ?></td>
+ <td class="listlr"> <?= $config['revision']['description'] ?></td>
+ <td colspan="2" valign="middle" class="list" nowrap><b>Current</b></td>
+ </tr>
+ <?php
+ foreach($confvers as $version) {
+ if($version['time'] != 0) {
+ $date = date("n/j/y H:i:s", $version['time']);
+ } else {
+ $date = "Unknown";
+ }
+ $desc = $version['description'];
+ ?>
+ <tr valign="top">
+ <td class="listlr"> <?= $date ?></td>
+ <td class="listlr"> <?= $desc ?></td>
+ <td valign="middle" class="list" nowrap>
+ <a href="diag_confbak.php?newver=<?=$version['time'];?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_plus.gif" width="17" height="17" border="0"></a>
+ </td>
+ <td valign="middle" class="list" nowrap>
+ <!--
+ <a href="diag_confbak.php?rmver=<?=$version['time'];?>"><img src="/themes/<?= $g['theme']; ?>/images/icons/icon_x.gif" width="17" height="17" border="0"></a>
+ -->
+ </tr>
+ <?php
+ } ?>
+<?php } else { ?>
+ <tr><td>
+ <?php print_info_box("No backups found at http://portal.pfsense.org for username {$username}"); ?>
+ </td></tr>
+<?php }
+?>
+ </table>
+ </div>
+ </td>
+ </tr>
+</table>
+</form>
+<?php include("fend.inc"); ?>
+</body>
+</html>