瀏覽代碼

Create authentication.php

FusionPBX 9 年之前
父節點
當前提交
6b4aced8e7
共有 1 個文件被更改,包括 154 次插入0 次删除
  1. 154 0
      core/authentication/resources/classes/authentication.php

+ 154 - 0
core/authentication/resources/classes/authentication.php

@@ -0,0 +1,154 @@
+<?php
+
+/**
+ * authentication 
+ *
+ * @method validate uses authentication plugins to check if a user is authorized to login
+ * @method get_domain used to get the domain name from the URL or username and then sets both domain_name and domain_uuid
+ */
+class authentication {
+
+	/**
+	 * Define variables and their scope
+	 */
+	public $debug;
+	public $db;
+	public $domain_uuid;
+	public $domain_name;
+	public $username;
+	public $password;
+	public $plugins;
+	public $key;
+
+	/**
+	 * Called when the object is created
+	 */
+	public function __construct() {
+
+	}
+
+	/**
+	 * Called when there are no references to a particular object
+	 * unset the variables used in the class
+	 */
+	public function __destruct() {
+		foreach ($this as $key => $value) {
+			unset($this->$key);
+		}
+	}
+
+	/**
+	 * validate uses authentication plugins to check if a user is authorized to login
+	 * @return array [plugin] => last plugin used to authenticate the user [authorized] => true or false
+	 */
+	public function validate() {
+
+		//set the default authentication method to the database
+			if (!is_array($_SESSION['authentication']['methods'])) {
+				$_SESSION['authentication']['methods'][]  = 'database';	
+			}
+
+		//get the domain_name and domain_uuid
+			if (!isset($this->domain_name) || !isset($this->domain_uuid)) {
+				$this->get_domain();
+			}
+
+		//use the authentication plugins
+			foreach ($_SESSION['authentication']['methods'] as $name) {
+				$class_name = "plugin_".$name;
+				$base = realpath(dirname(__FILE__)) . "/plugins";
+				$plugin = $base."/".$name.".php";
+				if (file_exists($plugin)) {
+					include_once $plugin;
+					$obj = new $class_name();
+					$obj->debug = $this->debug;
+					$obj->domain_name = $this->domain_name;
+					$obj->domain_uuid = $this->domain_uuid;
+					if (strlen($this->key) > 0) {
+						$obj->key = $this->key;
+					}
+					if (strlen($this->username) > 0) {
+						$obj->username = $this->username;
+						$obj->password = $this->password;
+					}
+					$array = $obj->$name();
+					$result['plugin'] = $array["plugin"];
+					$result['domain_name'] = $array["domain_name"];
+					$result['username'] = $array["username"];
+					if ($this->debug) {
+						$result["password"] = $this->password;
+					}
+					$result['user_uuid'] = $array["user_uuid"];
+					$result['contact_uuid'] = $array["contact_uuid"];
+					$result['domain_uuid'] = $array["domain_uuid"];
+					$result['authorized'] = $array["authorized"];
+					if (count($_SESSION['authentication']['methods']) > 1) {
+						$result['results'][] = $array;
+					}
+					if ($result["authorized"] == "true") {
+						break;
+					}
+				}
+			}
+
+		//return the result
+			return $result;
+	}
+
+	/**
+	 *  get_domain used to get the domain name from the URL or username and then sets both domain_name and domain_uuid
+	 */
+	function get_domain() {
+
+		//get the domain name
+			if (!($this->domain_name)) {
+				//get the domain from the url
+					$this->domain_name = $_SERVER["HTTP_HOST"];
+				//get the domain name from the username
+					if ($_SESSION["user"]["unique"]["text"] != "global") {
+						$username_array = explode("@", check_str($_REQUEST["username"]));
+						if (count($username_array) > 1) {
+							$this->domain_name = $username_array[count($username_array) -1];
+							$_REQUEST["username"] = substr(check_str($_REQUEST["username"]), 0, -(strlen($this->domain_name)+1));
+						}
+					}
+				//get the domain name from the http value
+					if (strlen(check_str($_REQUEST["domain_name"])) > 0) {
+						$this->domain_name = check_str($_REQUEST["domain_name"]);
+					}
+				//set 
+					$_SESSION['domain_name'] = $this->domain_name;
+			}
+
+		//get the domain uuid and domain settings
+			if (isset($this->domain_name)) {
+				foreach ($_SESSION['domains'] as $row) {
+					if (lower_case($row['domain_name']) == lower_case($this->domain_name)) {
+						$this->domain_uuid = $row['domain_uuid'];
+						$_SESSION['domain_uuid'] = $row['domain_uuid'];
+						break;
+					}
+				}
+			}
+
+		//set the setting arrays
+			$obj = new domains();
+			$obj->db = $db;
+			$obj->set();
+
+		//set the domain parent uuid
+			$_SESSION['domain_parent_uuid'] = $_SESSION["domain_uuid"];
+	}
+}
+
+/*
+$auth = new authentication;
+$auth->username = "user";
+$auth->password = "password";
+$auth->domain_name = "sip.fusionpbx.com";
+$auth->debug = false;
+$response = $auth->validate();
+print_r($response);
+*/
+
+?>