Browse Source

Complete auto updater code

DSR! 3 years ago
parent
commit
5a1a5624b5

+ 1 - 3
src/etc/pineapple/changes

@@ -14,15 +14,13 @@
 
     <li>Recon</li>
     <ul>
-        <li>Code refactor in module.php</li>
         <li>Add results counter in titles with badges</li>
         <li>Fix column alignment</li>
     </ul>
 
     <li>PineAP</li>
     <ul>
-        <li>Configure used monitor interface (pineapd pineap_interface)</li>
-        <li>Configure used source interface (pineapd source_mac grabber)</li>
+        <li>Configure used monitor and source interfaces</li>
         <li>Show pineapd service errors</li>
     </ul>
 

+ 5 - 0
src/pineapple/api/Module.php

@@ -96,6 +96,11 @@ abstract class Module
         return \helper\getDevice();
     }
 
+    protected function getBoard()
+    {
+        return \helper\getBoard();
+    }
+
     protected function getMacFromInterface($interface)
     {
         return \helper\getMacFromInterface($interface);

+ 66 - 66
src/pineapple/api/pineapple.php

@@ -2,8 +2,8 @@
 
 function execBackground($command)
 {
-	exec("echo \"{$command}\" | /usr/bin/at now", $var);
-	return $var;
+    exec("echo \"{$command}\" | /usr/bin/at now", $var);
+    return $var;
 }
 
 function checkDependency($dependencyName)
@@ -19,127 +19,127 @@ function isSDAvailable()
 }
 
 function sdReaderPresent() {
-	return file_exists('/sd');
+    return file_exists('/sd');
 }
 
 function sdCardPresent() {
-	return !file_exists('/sd/NO_SD');
+    return !file_exists('/sd/NO_SD');
 }
 
 function checkRunning($processName)
 {
-	$processName = escapeshellarg($processName);
-	exec("/usr/bin/pgrep {$processName}", $output);
-	return count($output) > 0;
+    $processName = escapeshellarg($processName);
+    exec("/usr/bin/pgrep {$processName}", $output);
+    return count($output) > 0;
 }
 
 function checkRunningFull($processString) {
-	$processString = escapeshellarg($processString);
-	exec("/usr/bin/pgrep -f {$processString}", $output);
-	return count($output) > 0;
+    $processString = escapeshellarg($processString);
+    exec("/usr/bin/pgrep -f {$processString}", $output);
+    return count($output) > 0;
 }
 
 function udsSend($path, $message)
 {
-	$sock = stream_socket_client("unix://{$path}", $errno, $errstr);
-	fwrite($sock, $message);
-	fclose($sock);
-	return true;
+    $sock = stream_socket_client("unix://{$path}", $errno, $errstr);
+    fwrite($sock, $message);
+    fclose($sock);
+    return true;
 }
 
 function dgramUdsSend($path, $message)
 {
-	$sock = NULL;
-	if(!($sock = socket_create(AF_UNIX, SOCK_DGRAM, 0))) {
-	    return false;
-	}
-	socket_sendto($sock, $message, strlen($message), 0, $path);
-	return true;
+    $sock = NULL;
+    if(!($sock = socket_create(AF_UNIX, SOCK_DGRAM, 0))) {
+        return false;
+    }
+    socket_sendto($sock, $message, strlen($message), 0, $path);
+    return true;
 }
 
 function uciGet($uciString, $autoBool = true)
 {
-	$uciString = escapeshellarg($uciString);
-	$result = exec("uci get {$uciString}");
-	if ($autoBool && ($result === "0" || $result === "1")) {
-		return $result === "1";
-	}
+    $uciString = escapeshellarg($uciString);
+    $result = exec("uci get {$uciString}");
+    if ($autoBool && ($result === "0" || $result === "1")) {
+        return $result === "1";
+    }
 
-	return $result;
+    return $result;
 }
 
 function uciSet($settingString, $value)
 {
-	$settingString = escapeshellarg($settingString);
-	if (!empty($value)) {
-		$value = escapeshellarg($value);
-	}
+    $settingString = escapeshellarg($settingString);
+    if (!empty($value)) {
+        $value = escapeshellarg($value);
+    }
 
-	if ($value === "''" || $value === "") {
-		$value = "'0'";
-	}
+    if ($value === "''" || $value === "") {
+        $value = "'0'";
+    }
 
-	exec("uci set {$settingString}={$value}");
-	exec("uci commit {$settingString}");
+    exec("uci set {$settingString}={$value}");
+    exec("uci commit {$settingString}");
 }
 
 function uciAddList($settingString, $value)
 {
-	$settingString = escapeshellarg($settingString);
-	if (!empty($value)) {
-		$value = escapeshellarg($value);
-	}
+    $settingString = escapeshellarg($settingString);
+    if (!empty($value)) {
+        $value = escapeshellarg($value);
+    }
 
-	if ($value === "''") {
-		$value = "'0'";
-	}
+    if ($value === "''") {
+        $value = "'0'";
+    }
 
-	exec("uci add_list {$settingString}={$value}");
-	exec("uci commit {$settingString}");
+    exec("uci add_list {$settingString}={$value}");
+    exec("uci commit {$settingString}");
 }
 
 function downloadFile($file)
 {
-	$token = hash('sha256', $file . time());
+    $token = hash('sha256', $file . time());
 
-	require_once('DatabaseConnection.php');
-	$database = new \pineapple\DatabaseConnection("/etc/pineapple/pineapple.db");
-	$database->exec("CREATE TABLE IF NOT EXISTS downloads (token VARCHAR NOT NULL, file VARCHAR NOT NULL, time timestamp default (strftime('%s', 'now')));");
-	$database->exec("INSERT INTO downloads (token, file) VALUES ('%s', '%s')", $token, $file);
+    require_once('DatabaseConnection.php');
+    $database = new \pineapple\DatabaseConnection("/etc/pineapple/pineapple.db");
+    $database->exec("CREATE TABLE IF NOT EXISTS downloads (token VARCHAR NOT NULL, file VARCHAR NOT NULL, time timestamp default (strftime('%s', 'now')));");
+    $database->exec("INSERT INTO downloads (token, file) VALUES ('%s', '%s')", $token, $file);
 
-	return $token;
+    return $token;
 }
 
 function getFirmwareVersion()
 {
-	return trim(file_get_contents('/etc/pineapple/pineapple_version'));
+    return trim(file_get_contents('/etc/pineapple/pineapple_version'));
 }
 
 function getDevice()
 {
-	$data = file_get_contents('/proc/cpuinfo');
-	if (preg_match('/NANO/', $data)) {
-		return 'nano';
-	} elseif (preg_match('/TETRA/', $data)) {
-		return 'tetra';
-	}
-	return 'unknown';
+    $data = file_get_contents('/proc/cpuinfo');
+    if (preg_match('/NANO/', $data)) {
+        return 'nano';
+    } elseif (preg_match('/TETRA/', $data)) {
+        return 'tetra';
+    }
+    return 'unknown';
 }
 
 function getMacFromInterface($interface)
 {
-	$interface = escapeshellarg($interface);
-	return trim(exec("ifconfig {$interface} | grep HWaddr | awk '{print $5}'"));
+    $interface = escapeshellarg($interface);
+    return trim(exec("ifconfig {$interface} | grep HWaddr | awk '{print $5}'"));
 }
 
 function getBoard()
 {
-	$data = @file_get_contents('/tmp/sysinfo/board_name');
-	if (!empty($data)) {
-		$parts = explode(',', $data);
+    $data = file_get_contents('/tmp/sysinfo/board_name');
+    if (!empty($data)) {
+        $parts = explode(',', trim($data));
 
-		return isset($parts[1]) ? $parts[1] : $parts[0];
-	}
+        return isset($parts[1]) ? $parts[1] : $parts[0];
+    }
 
-	return false;
+    return false;
 }

+ 8 - 6
src/pineapple/modules/Advanced/api/module.php

@@ -151,17 +151,19 @@ class Advanced extends SystemModule
     {
         $upgradeData = @file_get_contents(self::REMOTE_URL . "/json/upgrades.json");
         if ($upgradeData !== false) {
-            $upgradeData = json_decode($upgradeData);
+            $upgradeData = json_decode($upgradeData, true);
             if (json_last_error() === JSON_ERROR_NONE) {
-                if ($this->compareFirmwareVersion($upgradeData->version) === true) {
+                if ($this->compareFirmwareVersion($upgradeData['version']) === true) {
                     $board = $this->getBoard();
-                    if ($upgradeData->hotpatch != null) {
-                        $hotpatch = base64_decode($upgradeData->hotpatch);
+                    if ($upgradeData['hotpatch'] != null) {
+                        $hotpatch = base64_decode($upgradeData['hotpatch']);
                         file_put_contents($hotpatch, self::UP_PATCH);
-                    } else if (isset($upgradeData->{$board})) {
-                        $upgradeData = $upgradeData->{$board};
+                    } else if ($board && isset($upgradeData['updates'][ $board ])) {
+                        $download = $upgradeData['updates'][ $board ];
+                        $upgradeData = array_merge($upgradeData, $download);
                     }
 
+                    unset($upgradeData['updates']);
                     $this->response = array("upgrade" => true, "upgradeData" => $upgradeData);
                 } else {
                     $this->error = "No upgrade found.";

+ 2 - 3
src/pineapple/modules/Advanced/module.html

@@ -184,7 +184,7 @@
                             <p ng-bind-html="upgradeData['changelog'] | rawHTML">
                                 Changelog:
                             </p>
-                            <p>
+                            <p ng-if="upgradeData['upgradeUrl']">
                                 <button class="btn btn-default center-block" ng-click="downloadUpgrade()">Perform Upgrade</button>
                             </p>
                         </div>
@@ -211,8 +211,7 @@
                         <h3 class="panel-title">Manual upgrade</h3>
                     </div>
                     <div class="panel-body">
-                        <div ng-hide="upgradeFound">
-                            <p class="alert well-sm alert-success" ng-show="showPasswordSuccess">Password changed successfully.</p>
+                        <div ng-hide="isManualUpgrade && upgradeFound">
                             <p class="alert well-sm alert-danger" ng-show="showManualUpgradeUrlError">Please check the url entered are correct.</p>
                             <div class="input-group">
                                 <span class="input-group-addon">Firmware URL</span>

+ 4 - 4
src/pineapple/modules/Dashboard/api/module.php

@@ -33,11 +33,11 @@ class Dashboard extends SystemModule
 
     private function getOverviewData()
     {
-        $this->response = array(
+        $this->response = [
             "cpu" => $this->getCpu(),
             "uptime" => $this->getUptime(),
             "clients" => $this->getClients()
-        );
+        ];
     }
 
     private function getCpu()
@@ -73,7 +73,7 @@ class Dashboard extends SystemModule
     private function getLandingPageData()
     {
         if ($this->dbConnection !== false) {
-            $stats = array();
+            $stats = [];
             $stats['Chrome'] = count($this->dbConnection->query('SELECT browser FROM user_agents WHERE browser=\'chrome\';'));
             $stats['Safari'] = count($this->dbConnection->query('SELECT browser FROM user_agents WHERE browser=\'safari\';'));
             $stats['Firefox'] = count($this->dbConnection->query('SELECT browser FROM user_agents WHERE browser=\'firefox\';'));
@@ -91,10 +91,10 @@ class Dashboard extends SystemModule
     {
         $bulletinData = @file_get_contents(self::REMOTE_URL . "/json/news.json");
         if ($bulletinData !== false) {
+            $this->response = json_decode($bulletinData);
             if (json_last_error() === JSON_ERROR_NONE) {
                 return;
             }
-            $this->response = json_decode($bulletinData);
         }
         
         $this->error = "Error connecting to " . self::REMOTE_NAME . ". Please check your connection.";