summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSteve Beaver <sbeaver@netgate.com>2017-07-20 13:34:59 -0400
committerSteve Beaver <sbeaver@netgate.com>2017-07-20 13:34:59 -0400
commitb96b6d3ba3e89155449bb3efc807ae14ccc36684 (patch)
treeafe0683052a504b2f7990654d9a64ba7fa97acbd /src
parent31fd94b302730fd9f298c7def2c2a624dc38b5e0 (diff)
downloadpfsense-b96b6d3ba3e89155449bb3efc807ae14ccc36684.zip
pfsense-b96b6d3ba3e89155449bb3efc807ae14ccc36684.tar.gz
Add customer support widget
Diffstat (limited to 'src')
-rw-r--r--src/usr/local/www/widgets/widgets/support.widget.php109
1 files changed, 109 insertions, 0 deletions
diff --git a/src/usr/local/www/widgets/widgets/support.widget.php b/src/usr/local/www/widgets/widgets/support.widget.php
new file mode 100644
index 0000000..9955f65
--- /dev/null
+++ b/src/usr/local/www/widgets/widgets/support.widget.php
@@ -0,0 +1,109 @@
+<?php
+/*
+ * support.widget.php
+ *
+ * part of pfSense (https://www.pfsense.org)
+ * Copyright (c) 2004-2016 Rubicon Communications, LLC (Netgate)
+ * All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ This widget transmits the device ID to Netgate's REST API and retrieves the support information.
+ The connection is made using HTTPS/TLS. No other data is transmitted. If the widget
+ is not enabled, then no transmission is made
+*/
+
+$nocsrf = true;
+$supportfile = "/var/db/support.json";
+$idfile = "/var/db/uniqueid";
+$FQDN = "https://ews.netgate.com/support";
+
+// Write a dummy support file containg an error message
+function nosupportdata() {
+ global $supportfile;
+
+ file_put_contents($supportfile, sprintf(gettext("%sSupport information unavailable%s"),
+ "{\"summary\":\"<div class=\\\"alert alert-danger\\\">", "</div>\",\"htmltext\":\"\"}"));
+}
+
+// Poll the Netgate server to obtain the JSON/HTML formatted support information
+// and write it to the file /var/db/support.json
+function updateSupport() {
+ global $g, $supportfile, $idfile, $FQDN;
+
+ $success = false;
+
+ if (file_exists($idfile)) {
+ if (function_exists('curl_version')) {
+ $post = ['uid' => file_get_contents($idfile), 'language' => '0'];
+ $url = $FQDN;
+
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_HEADER, 0);
+ curl_setopt($ch, CURLOPT_VERBOSE, 0);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_USERAGENT, $g['product_name'] . '/' . $g['product_version']);
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_POST, true);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
+ $response = curl_exec($ch);
+ $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
+ curl_close($ch);
+
+ if ($status == 200) {
+ file_put_contents($supportfile, $response);
+ $success = true;
+ }
+ }
+ }
+
+ if (!$success) {
+ nosupportdata();
+ }
+}
+
+// If the widget is called with act=refresh, delete the support.json file and reload hte page, thereby forcing the
+// widget to get a fresh copy of hte support information
+if ($_REQUEST['act'] == "refresh") {
+ unlink($supportfile);
+ header("Location: /");
+ exit;
+}
+
+// Retrieve the support data from Netgate.com if the supprt data file does not exist,
+// or if it is more than a day old
+if (!file_exists($supportfile) || ( time()-filemtime($supportfile) > (24 * 3600))) {
+ updateSupport();
+}
+
+$str = file_get_contents($supportfile);
+$json = json_decode($str, true);
+
+print("<div>");
+print($json['summary']);
+
+if (strlen($json['htmltext']) > 0) {
+ print('<div class="panel-body" style="padding-left:15px; padding-right:15px;">');
+ print('<hr style="margin-top:0px">');
+ print($json['htmltext']);
+ print('</div>');
+}
+
+// Print a low-key refresh link
+print('<div style="text-align:right;padding-right:15px;"><a href="/widgets/widgets/support.widget.php?act=refresh" usepost>Refresh</a></div>');
+
+print("</div>");
+
+?>
OpenPOWER on IntegriCloud