How to search for groups calling the Prot-On Rest API with PHP

See API Groups Demo in action

Search Groups Demo Controller


<?php

namespace ProtOn\Demos\Controllers;

use ProtOn\Demos\OAuthPHP;
use ProtOn\Demos\ApiGroupsDemo;

class DemosController extends Controller {
	
	public function getApiGroupsDemo(){
	
		return "Your app view";
	
	}
	
	public function postApiGroupsDemo(){
	
		$demo = new ApiGroupsDemo();
	
		$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->getGroups($access_token, $filter);
			} else {
				throw new \Exception('Invalid authentication');
			}
		} catch (\Exception $e){
			$response['error'] = 400;
			$response['error_description'] = $e->getMessage();
		}
	
		return self::getApiGroupsResult($response);
	
	}
	
	public function getApiGroupsResult($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;
	}

}

?>
			

Search Groups Demo Service


<?php

namespace ProtOn\Demos;

use ProtOn\Utils\BearerPest;

class ApiGroupsDemo {
	
	const PROTON_REST_API = 'https://dnd.prot-on.com/rest-api/api';
	const SERVICE_URL = '/groups/';
	
	public function getGroups($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 Groups Demo in action