The authentication module is supported from the initial release, therefore the backwards compatible code can be removed.
		
			
				
	
	
		
			188 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php
 | |
| 
 | |
| require_once(BASE_PATH . 'server/includes/core/class.encryptionstore.php');
 | |
| 
 | |
| /**
 | |
|  * PluginMDMModule Module
 | |
|  */
 | |
| class PluginMDMModule extends Module
 | |
| {
 | |
| 	private $server = '';
 | |
| 	private $username = '';
 | |
| 	private $password = '';
 | |
| 
 | |
| 	/**
 | |
| 	 * Constructor
 | |
| 	 * @param int $id unique id.
 | |
| 	 * @param array $data list of all actions.
 | |
| 	 */
 | |
| 	function __construct($id, $data)
 | |
| 	{
 | |
| 		parent::__construct($id, $data);
 | |
| 
 | |
| 		$this->server = (PLUGIN_MDM_SERVER_SSL ? 'https://' : 'http://') . PLUGIN_MDM_SERVER;
 | |
| 
 | |
| 		// Get the username and password from the Encryption store
 | |
| 		$encryptionStore = EncryptionStore::getInstance();
 | |
| 		$this->username = $encryptionStore->get('username');
 | |
| 		$this->password = $encryptionStore->get('password');
 | |
| 
 | |
| 		$this->url = $this->server .'/Microsoft-Server-ActiveSync?Cmd=WebserviceDevice&DeviceId=webservice&DeviceType=webservice&User=' . $this->username;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Helper to setup a client.
 | |
| 	 */
 | |
| 	function getSoapClient()
 | |
| 	{
 | |
| 		return new SoapClient(null, array(
 | |
| 			'location' => $this->url,
 | |
| 			'uri' => $this->server,
 | |
| 			'trace' => 1,
 | |
| 			'login' => $this->username,
 | |
| 			'password' => $this->password
 | |
| 		));
 | |
| 	 }
 | |
| 
 | |
| 	/**
 | |
| 	 * Function which calls the soap call to do a full resync
 | |
| 	 * @param int $deviceid of phone which has to be resynced
 | |
| 	 * @return json $response object contains the response of the soap request from Z-Push
 | |
| 	 */
 | |
| 	function resyncDevice($deviceid)
 | |
| 	{
 | |
| 		$client = $this->getSoapClient();
 | |
| 		return $client->ResyncDevice($deviceid);
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * Function which calls the wipeDevice soap call
 | |
| 	 * @param int $deviceid of phone which has to be wiped
 | |
| 	 * @param string $password user password
 | |
| 	 * @return json $response object contains the response of the soap request from Z-Push
 | |
| 	 */
 | |
| 	function wipeDevice($deviceid, $password)
 | |
| 	{
 | |
| 		if ($password == $this->password) {
 | |
| 			$client = $this->getSoapClient();
 | |
| 			return $client->WipeDevice($deviceid);
 | |
| 		} else {
 | |
| 			return false;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * function which calls the ListDeviceDetails soap call
 | |
| 	 * @return array $response array contains a list of devices connected to the users account
 | |
| 	 */
 | |
| 	function getDevices()
 | |
| 	{	
 | |
| 		$client = $this->getSoapClient();
 | |
| 		return $client->ListDevicesDetails();
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	/**
 | |
| 	  function which calls the wipeDevice soap call
 | |
| 	 * @param int $deviceid of phone which has to be wiped
 | |
| 	 * @return json $response object contains the response of the soap request from Z-Push
 | |
| 	 */
 | |
| 	function removeDevice($deviceid)
 | |
| 	{
 | |
| 		$client = $this->getSoapClient();
 | |
| 		return $client->RemoveDevice($deviceid);
 | |
| 	}
 | |
| 	
 | |
| 	/**
 | |
| 	 * Executes all the actions in the $data variable.
 | |
| 	 * @return boolean true on success of false on fialure.
 | |
| 	 */
 | |
| 	function execute()
 | |
| 	{
 | |
| 		foreach($this->data as $actionType => $actionData)
 | |
| 		{
 | |
| 			if(isset($actionType)) {
 | |
| 				try {
 | |
| 					switch($actionType)
 | |
| 					{
 | |
| 						case 'wipe':
 | |
| 							$this->wipeDevice($actionData['deviceid'], $actionData['password']);
 | |
| 							$this->addActionData('wipe', array(
 | |
| 								'type' => 3, 
 | |
| 								'wipe' => $this->wipeDevice($actionData['deviceid'], $actionData['password'])
 | |
| 							));
 | |
| 							$GLOBALS['bus']->addData($this->getResponseData());
 | |
| 							break;
 | |
| 						case 'resync':
 | |
| 							$this->addActionData('resync', array(
 | |
| 								'type' => 3, 
 | |
| 								'resync' => $this->resyncDevice($actionData['deviceid'])
 | |
| 							));
 | |
| 							$GLOBALS['bus']->addData($this->getResponseData());
 | |
| 							break;
 | |
| 						case 'remove':
 | |
| 							$this->addActionData('remove', array(
 | |
| 								'type' => 3, 
 | |
| 								'remove' => $this->removeDevice($actionData['deviceid'])
 | |
| 							));
 | |
| 							$GLOBALS['bus']->addData($this->getResponseData());
 | |
| 							break;
 | |
| 						case 'list':
 | |
| 							$items = array();
 | |
| 							$date['page'] = array();
 | |
| 
 | |
| 							$rawData = $this->getDevices();
 | |
| 							foreach($rawData as $device){
 | |
| 								$device = $device->data;
 | |
| 								$item = array();
 | |
| 								$item['entryid'] = $device['deviceid'];
 | |
| 								$item['changed'] = $device['changed'];
 | |
| 								$item['deviceos'] = $device['deviceos'];
 | |
| 								$item['devicefriendlyname'] = $device['devicefriendlyname'];
 | |
| 								$item['devicetype'] = $device['devicetype'];
 | |
| 								$item['devicemodel'] = $device['devicemodel'];
 | |
| 								$item['hierarchyuuid'] = $device['hierarchyuuid'];
 | |
| 								$item['firstsynctime'] = $device['firstsynctime'];
 | |
| 								$item['lastupdatetime'] = $device['lastupdatetime'];
 | |
| 								$item['wipestatus'] = $device['wipestatus'];
 | |
| 								$item['useragent'] = $device['useragent'];
 | |
| 								$item['domain'] = $device['domain'];
 | |
| 								array_push($items, array('props' => $item));
 | |
| 							}
 | |
| 							$data['page']['start'] = 0;
 | |
| 							$data['page']['rowcount'] = count($rawData);
 | |
| 							$data['page']['totalrowcount'] = $data['page']['rowcount'];
 | |
| 							$data = array_merge($data, array('item' => $items));
 | |
| 
 | |
| 							$this->addActionData('list', $data);
 | |
| 							$GLOBALS['bus']->addData($this->getResponseData());
 | |
| 							break;
 | |
| 						default:
 | |
| 							$this->handleUnknownActionType($actionType);
 | |
| 					}
 | |
| 				} catch (SoapFault $fault) {
 | |
| 					$display_message = _('Something went wrong.', 'plugin_mdm');
 | |
| 					if ($fault->faultcode === 'HTTP') {
 | |
| 						if ($fault->getMessage() === "Unauthorized") {
 | |
| 							$display_message = _('Unable to connect to Z-Push Server. Unauthorized.', 'plugin_mdm');
 | |
| 						}
 | |
| 						if ($fault->getMessage() === "Could not connect to host") {
 | |
| 							$display_message = _('Unable to connect to Z-Push Server. Could not connect to host.', 'plugin_mdm');
 | |
| 						}
 | |
| 						if ($fault->getMessage() === "Not Found") {
 | |
| 							$display_message = _('Unable to connect to Z-Push Server. Not found.', 'plugin_mdm');
 | |
| 						}
 | |
| 					} else if ($fault->faultcode === "ERROR") {
 | |
| 						$display_message = _('Device ID could not be found', 'plugin_mdm');
 | |
| 					}
 | |
| 					$this->sendFeedback(false, array("type" => ERROR_GENERAL, "info" => array('display_message' => $display_message)));
 | |
| 				}
 | |
| 				catch (Exception $e) {
 | |
| 					$this->sendFeedback(true, array("type" => ERROR_GENERAL, "info" => array('display_message' => _('Something went wrong', 'plugin_mdm'))));
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
|  	}
 | |
| };
 | |
| ?>
 |