Просмотр исходного кода

Added method to login with API

causefx 7 лет назад
Родитель
Сommit
8797ccf2ba
2 измененных файлов с 82 добавлено и 16 удалено
  1. 55 3
      api/functions/api-functions.php
  2. 27 13
      api/index.php

+ 55 - 3
api/functions/api-functions.php

@@ -3,6 +3,56 @@
 /** @noinspection SqlResolve */
 /** @noinspection SqlResolve */
 /** @noinspection SyntaxError */
+function apiLogin()
+{
+	$array = array(
+		'data' => array(
+			array(
+				'name' => 'username',
+				'value' => (isset($_POST['username'])) ? $_POST['username'] : false
+			),
+			array(
+				'name' => 'password',
+				'value' => (isset($_POST['password'])) ? $_POST['password'] : false
+			),
+			array(
+				'name' => 'remember',
+				'value' => (isset($_POST['remember'])) ? true : false
+			),
+			array(
+				'name' => 'oAuth',
+				'value' => (isset($_POST['oAuth'])) ? $_POST['oAuth'] : false
+			),
+			array(
+				'name' => 'oAuthType',
+				'value' => (isset($_POST['oAuthType'])) ? $_POST['oAuthType'] : false
+			),
+			array(
+				'name' => 'tfaCode',
+				'value' => (isset($_POST['tfaCode'])) ? $_POST['tfaCode'] : false
+			),
+			array(
+				'name' => 'output',
+				'value' => true
+			),
+		)
+	);
+	foreach ($array['data'] as $items) {
+		foreach ($items as $key => $value) {
+			if ($key == 'name') {
+				$newKey = $value;
+			}
+			if ($key == 'value') {
+				$newValue = $value;
+			}
+			if (isset($newKey) && isset($newValue)) {
+				$$newKey = $newValue;
+			}
+		}
+	}
+	return login($array);
+}
+
 function login($array)
 {
 	// Grab username and Password from login form
@@ -23,6 +73,7 @@ function login($array)
 	$username = (strpos($GLOBALS['authBackend'], 'emby') !== false) ? $username : strtolower($username);
 	$days = (isset($remember)) ? $GLOBALS['rememberMeDays'] : 1;
 	$oAuth = (isset($oAuth)) ? $oAuth : false;
+	$output = (isset($output)) ? $output : false;
 	try {
 		$database = new Dibi\Connection([
 			'driver' => 'sqlite3',
@@ -71,7 +122,7 @@ function login($array)
 					}
 					break;
 				default:
-					return 'error';
+					return ($output) ? 'No oAuthType defined' : 'error';
 					break;
 			}
 			$result = ($authSuccess) ? $database->fetch('SELECT * FROM users WHERE username = ? COLLATE NOCASE OR email = ? COLLATE NOCASE', $authSuccess['username'], $authSuccess['email']) : '';
@@ -124,12 +175,13 @@ function login($array)
 				}
 				// End 2FA
 				// authentication passed - 1) mark active and update token
-				if (createToken($result['username'], $result['email'], $result['image'], $result['group'], $result['group_id'], $GLOBALS['organizrHash'], $days)) {
+				$createToken = createToken($result['username'], $result['email'], $result['image'], $result['group'], $result['group_id'], $GLOBALS['organizrHash'], $days);
+				if ($createToken) {
 					writeLoginLog($username, 'success');
 					writeLog('success', 'Login Function - A User has logged in', $username);
 					$ssoUser = (empty($result['email'])) ? $result['username'] : (strpos($result['email'], 'placeholder') !== false) ? $result['username'] : $result['email'];
 					ssoCheck($ssoUser, $password, $token); //need to work on this
-					return true;
+					return ($output) ? array('name' => $GLOBALS['cookieName'], 'token' => (string)$createToken) : true;
 				} else {
 					return 'Token Creation Error';
 				}

+ 27 - 13
api/index.php

@@ -22,6 +22,7 @@ $approvedFunctionsBypass = array(
 	'v1_wizard_config',
 	'v1_login',
 	'v1_wizard_path',
+	'v1_login_api'
 );
 if (!in_array($function, $approvedFunctionsBypass)) {
 	if (isApprovedRequest($method) === false) {
@@ -649,6 +650,19 @@ switch ($function) {
 				break;
 		}
 		break;
+	case 'v1_login_api':
+		switch ($method) {
+			case 'POST':
+				$result['status'] = 'success';
+				$result['statusText'] = 'success';
+				$result['data'] = apiLogin();
+				break;
+			default:
+				$result['status'] = 'error';
+				$result['statusText'] = 'The function requested is not defined for method: ' . $method;
+				break;
+		}
+		break;
 	case 'v1_register':
 		switch ($method) {
 			case 'POST':
@@ -1232,19 +1246,19 @@ switch ($function) {
 				break;
 		}
 		break;
-		case 'v1_emby_join':
-			switch ($method) {
-				case 'POST':
-					$result['status'] = 'success';
-					$result['statusText'] = 'success';
-					$result['data'] = embyJoinAPI($_POST);
-					break;
-				default:
-					$result['status'] = 'error';
-					$result['statusText'] = 'The function requested is not defined for method: ' . $method;
-					break;
-			}
-			break;
+	case 'v1_emby_join':
+		switch ($method) {
+			case 'POST':
+				$result['status'] = 'success';
+				$result['statusText'] = 'success';
+				$result['data'] = embyJoinAPI($_POST);
+				break;
+			default:
+				$result['status'] = 'error';
+				$result['statusText'] = 'The function requested is not defined for method: ' . $method;
+				break;
+		}
+		break;
 	case 'v1_token_revoke':
 		switch ($method) {
 			case 'POST':