How to get users calling the Prot-On Rest API with PHP

See API Users Demo in action

Search Users Demo Controller

<?php

namespace ProtOn\Demos\Controllers;

use ProtOn\Demos\OAuthPHP;
use ProtOn\Demos\ApiUsersPHPDemo;
use ProtOn\Utils\Constants;

class DemosController extends Controller {
	
	public function getApiUsersDemo(){
	
		return "Your app view";
	
	}
	
	public function postApiUsersDemo(){
	
		$demo = new ApiUsersPHPDemo();
	
		$client_id =     $_POST['client_id'];
		$client_secret = $_POST['client_secret'];
		$filter =        $_POST['filter'];
	
		/*
		 * 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->getUsers($access_token, $filter);
			} else {
				throw new \Exception('Invalid authentication');
			}
		} catch (\Exception $e){
			$response['error'] = 400;
			$response['error_description'] = $e->getMessage();
		}
	
		return self::getApiUsersResult($response);
	
	}
	
	public function getApiUsersResult($response){
	
		return "Your view result";
	
	}
	
}
?>
			
			

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;
	}

}

?>
			

Search Users Service

				
<?php

namespace ProtOn\Demos;

use ProtOn\Utils\BearerPest;

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

See API Users Demo in action