Browse Source

Fix Unifi cookie to be loaded on first api call

CauseFX 6 years ago
parent
commit
e79837f43b
3 changed files with 20 additions and 59 deletions
  1. 19 17
      api/functions/homepage-connect-functions.php
  2. 0 15
      api/functions/homepage-functions.php
  3. 1 27
      js/functions.js

+ 19 - 17
api/functions/homepage-connect-functions.php

@@ -2336,13 +2336,26 @@ function unifiConnect()
 	if ($GLOBALS['homepageUnifiEnabled'] && !empty($GLOBALS['unifiURL']) && !empty($GLOBALS['unifiSiteName']) && !empty($GLOBALS['unifiCookie']) && !empty($GLOBALS['unifiUsername']) && !empty($GLOBALS['unifiPassword']) && qualifyRequest($GLOBALS['homepageUnifiAuth'])) {
 		$api['content']['unifi'] = array();
 		$url = qualifyURL($GLOBALS['unifiURL']);
-		$url = $url . '/api/s/' . $GLOBALS['unifiSiteName'] . '/stat/health';
+		$urlStat = $url . '/api/s/' . $GLOBALS['unifiSiteName'] . '/stat/health';
 		try {
 			$options = array('verify' => false, 'verifyname' => false, 'follow_redirects' => false);
+			$data = array(
+				'username' => $GLOBALS['unifiUsername'],
+				'password' => decrypt($GLOBALS['unifiPassword']),
+				'remember' => true,
+				'strict' => true
+			);
+			$response = Requests::post($url . '/api/login', array(), json_encode($data), $options);
+			if ($response->success) {
+				$cookie['unifises'] = ($response->cookies['unifises']->value) ?? false;
+				$cookie['csrf_token'] = ($response->cookies['csrf_token']->value) ?? false;
+			}else{
+				return false;
+			}
 			$headers = array(
-				'cookie' => $GLOBALS['unifiCookie']
+				'cookie' => 'unifises=' . $cookie['unifises'] . ';' . 'csrf_token=' . $cookie['csrf_token'] . ';'
 			);
-			$response = Requests::get($url, $headers, $options);
+			$response = Requests::get($urlStat, $headers, $options);
 			if ($response->success) {
 				$api['content']['unifi'] = json_decode($response->body, true);
 			}
@@ -2358,8 +2371,8 @@ function unifiConnect()
 function testAPIConnection($array)
 {
 	switch ($array['data']['action']) {
-		case 'unifiCookie':
-			if (!empty($GLOBALS['unifiURL'])  && !empty($GLOBALS['unifiUsername'])  && !empty($GLOBALS['unifiPassword'])) {
+		case 'unifiSite':
+			if (!empty($GLOBALS['unifiURL'])  && !empty($GLOBALS['unifiCookie']) && !empty($GLOBALS['unifiUsername'])  && !empty($GLOBALS['unifiPassword'])) {
 				$url = qualifyURL($GLOBALS['unifiURL']);
 				try {
 					$options = array('verify' => false, 'verifyname' => false, 'follow_redirects' => false);
@@ -2373,22 +2386,11 @@ function testAPIConnection($array)
 					if ($response->success) {
 						$cookie['unifises'] = ($response->cookies['unifises']->value) ?? false;
 						$cookie['csrf_token'] = ($response->cookies['csrf_token']->value) ?? false;
-						return $cookie;
 					}else{
 						return false;
 					}
-				} catch (Requests_Exception $e) {
-					writeLog('error', 'Unifi Connect Function - Error: ' . $e->getMessage(), 'SYSTEM');
-				};
-			}
-			break;
-		case 'unifiSite':
-			if (!empty($GLOBALS['unifiURL'])  && !empty($GLOBALS['unifiCookie']) && !empty($GLOBALS['unifiUsername'])  && !empty($GLOBALS['unifiPassword'])) {
-				$url = qualifyURL($GLOBALS['unifiURL']);
-				try {
-					$options = array('verify' => false, 'verifyname' => false, 'follow_redirects' => false);
 					$headers = array(
-						'cookie' => $GLOBALS['unifiCookie']
+						'cookie' => 'unifises=' . $cookie['unifises'] . ';' . 'csrf_token=' . $cookie['csrf_token'] . ';'
 					);
 					$response = Requests::get($url . '/api/self/sites', $headers, $options);
 					if ($response->success) {

+ 0 - 15
api/functions/homepage-functions.php

@@ -2260,21 +2260,6 @@ function getHomepageList()
 						'label' => 'Password',
 						'value' => $GLOBALS['unifiPassword']
 					),
-					array(
-						'type' => 'input',
-						'name' => 'unifiCookie',
-						'label' => 'Cookie',
-						'value' => $GLOBALS['unifiCookie'],
-						'help' => 'Cookie for Unifi - Save username and password before clicking get cookie button',
-						'placeholder' => 'Click help button'
-					),
-					array(
-						'type' => 'button',
-						'label' => 'Grab Unifi Cookie',
-						'icon' => 'fa fa-globe',
-						'text' => 'Get Unifi Cookie',
-						'attr' => 'onclick="getUnifiCookie(\'unifiCookie\')"'
-					),
 					array(
 						'type' => 'input',
 						'name' => 'unifiSiteName',

+ 1 - 27
js/functions.js

@@ -5753,7 +5753,7 @@ function buildUnifiItem(array){
                     </div>
                 </div>
             </div>-->
-            <div class="col-lg-4 col-md-6">
+            <div class="col-lg-4 col-md-6 col-center">
                 <div class="panel panel-`+panelColor+`">
                     <div class="panel-heading"> <span class="text-uppercase">`+name+`</span>
                         <div class="pull-right"><a href="#" data-perform="panel-collapse"><i class="ti-minus"></i></a> <a href="#" data-perform="panel-dismiss"><i class="ti-close"></i></a> </div>
@@ -6104,32 +6104,6 @@ function testAPIConnection(service, data = ''){
         message('',' Organizr Error',activeInfo.settings.notifications.position,'#FFF','error','10000');
     });
 }
-function getUnifiCookie(service, data = ''){
-    messageSingle('',' Grabbing now...',activeInfo.settings.notifications.position,'#FFF','info','10000');
-    organizrAPI('POST','api/?v1/test/api/connection',{action:service, data:data}).success(function(data) {
-        try {
-            var response = JSON.parse(data);
-        }catch(e) {
-            console.log(e + ' error: ' + data);
-            orgErrorAlert('<h4>' + e + '</h4>' + formatDebug(data));
-            return false;
-        }
-        if(response.data !== false){
-            var unifises = response.data.unifises;
-            var csrf_token = response.data.csrf_token;
-            var cookie = 'unifises=' + unifises + ';' + 'csrf_token=' + csrf_token + ';';
-            $('#homepage-Unifi-form [name=unifiCookie]').val(cookie);
-            $('#homepage-Unifi-form [name=unifiCookie]').change();
-            messageSingle('', ' Grabbed Cookie - Please Save Now',activeInfo.settings.notifications.position,'#FFF','success','10000');
-        }else{
-            messageSingle('API Connection Failed',response.data,activeInfo.settings.notifications.position,'#FFF','error','10000');
-        }
-        console.log(response);
-    }).fail(function(xhr) {
-        console.error("Organizr Function: API Connection Failed");
-        message('',' Organizr Error',activeInfo.settings.notifications.position,'#FFF','error','10000');
-    });
-}
 function getUnifiSite(service, data = ''){
     messageSingle('',' Grabbing now...',activeInfo.settings.notifications.position,'#FFF','info','10000');
     organizrAPI('POST','api/?v1/test/api/connection',{action:service, data:data}).success(function(data) {