How to search users by e-mail filter calling the Prot-On Rest API with PHP

See API Users Demo in action

Get User Groups Demo Controller


<?php

namespace ProtOn\Demos\Controllers;

use ProtOn\Demos\ApiUsersEmailDemo;

class UserEmailController extends Controller {
	
	public function getApiUsersEmailDemo(){
	
		return "Your app view";
	
	}
	
	public function postApiUsersEmailDemo(){
	
		$demo = new ApiUsersEmailDemo();
	
		$client_id =     $_POST['client_id'];
		$client_secret = $_POST['client_secret'];
		$email =         $_POST['email'];
	
		/*
		 * This is an example. You have to get your stored token from session,
		 * database or by calling your own oauth authentication service.
		 * Please check http://developers.prot-on.com/php-examples/oauth
		 * if you want to know how to implement an OAuth authentication system
		 */
		 $access_token = $_SESSION['access_token'];
	
		try{
			if($access_token!=NULL){
				$response = $demo->getUsersByEmail($access_token, $email);
			} else {
				throw new \Exception('Invalid authentication');
			}
		} catch (\Exception $e){
			$response['error'] = 400;
			$response['error_description'] = $e->getMessage();
		}
	
		return self::getApiUsersEmailResult($response);
	
	}
	
	public function getApiUsersEmailResult($response){
	
		return "Your app result view";
	
	}
	
}
?>
			
			

BearerPest is a wrapper class that adds the Bearer authentication to Pest class, which is an external library in this example that allows to create an OAuth client.

You can get Pest class from its Github project, here, or use your own.

BearerPest Wrapper Code

<?php
namespace ProtOn\Utils;

use ProtOn\Utils\Pest;

class BearerPest extends Pest {

	protected $bearerHeader;
	
	public function setupAuth($user, $pass, $auth = 'basic'){
		if ($auth == 'bearer') {
			$this->bearerHeader = 'Authorization: Bearer ' . $user;
		} else {
			parent::setupAuth($user, $pass, $auth);
		}
	}
	
	public function prepData($data) {
		if (is_array ( $data )) {
			$multipart = false;
			
			foreach ( $data as $item ) {
				if (is_string ( $item ) && strncmp ( $item, "@", 1 ) == 0 && is_file ( substr ( $item, 1 ) )) {
					$multipart = true;
					break;
				} elseif ($item instanceof \CURLFile) {
					$multipart = true;
					break;
				}
			}
			
			return ($multipart) ? $data : http_build_query ( $data );
		} else {
			return $data;
		}
	}
	
	protected function prepHeaders($headers) {
		$headers = parent::prepHeaders($headers);
		if (!empty($this->bearerHeader)) {
			$headers[] = $this->bearerHeader;
		}
		return $headers;
	}

}

?>
			

Protect Service Demo


<?php

namespace ProtOn\Demos;

use ProtOn\Utils\BearerPest;

class ApiUsersEmailDemo {
	
	const PROTON_REST_API = 'https://dnd.prot-on.com/rest-api/api';
	
	public function getUsersByEmail($token, $email){
		
		$response = NULL;
		
		$service_url = '/users/email/{email}?email='.urlencode($email);
		
		$httpHeaders = array('Content-Type' => 'text/html; charset=utf-8');
		$data = array();
		
		$pest = new BearerPest(self::PROTON_REST_API);
		$pest->setupAuth($token, '', 'bearer');
		try {
			$body = $pest->get($service_url, $data, $httpHeaders);
			$response = $body;
		} catch (Pest_Exception $e) {
			$response = $e->getMessage();
		}
		
		return $response;
		
	}
	
}
?>
			
			

See API Users Demo in action