Project Name Documentation

Similar documents
PHP XPDF Documentation

PHP-SwfTools Documentation

Using OAuth 2.0 to Access ionbiz APIs

KnpUGuard: Symfony Authentication with a Smile. With <3 from KnpUniversity

WEB API. Nuki Home Solutions GmbH. Münzgrabenstraße 92/ Graz Austria F

Firebase Admin SDK for PHP. Release

AEM Mobile: Setting up Google as an Identity Provider

Magister 6 API Documentation

PowerExchange for Facebook: How to Configure Open Authentication using the OAuth Utility

Bernard. Release latest

API Gateway. Version 7.5.1

Kinto Documentation. Release Mozilla Services Da French Team

Magister 6 API Documentation

django-oauth2-provider Documentation

Firebase Admin SDK for PHP

Instagram PHP Documentation

Chargify SDK for PHP Documentation

Protect Your API with OAuth 2. Rob Allen

Integrating with ClearPass HTTP APIs

Mobile Procurement REST API (MOBPROC): Access Tokens

SYMFONY2 WEB FRAMEWORK

Developing Solutions for Google Cloud Platform (CPD200) Course Agenda

Easy Social Feeds with the Migrate API. DrupalCampNJ, Feb. 3, 2018

Building a Django Twilio Programmable Chat Application

Avanan for G Suite. Technical Overview. Copyright 2017 Avanan. All rights reserved.

Composer Best Practices Nils Private Packagist

Integrating Salesforce and SharePoint Netwoven Inc.

ONE SOCIAL. A Writing Project. Presented to. The Faculty of the Department of Computer Science. San José State University

NIELSEN API PORTAL USER REGISTRATION GUIDE

Google GCP-Solution Architects Exam

(Frequently Asked Questions)

GitHub-Flask Documentation

Gmail Integration for Salesforce and Dynamics 365

Cloud Elements CRM Hub Provisioning and Usage Guide

Serverless Single Page Web Apps, Part Four. CSCI 5828: Foundations of Software Engineering Lecture 24 11/10/2016

How to social login with Aruba controller. Bo Nielsen, CCIE #53075 (Sec) December 2016, V1.00

70-487: Developing Windows Azure and Web Services

Using Twitter & Facebook API. INF5750/ Lecture 10 (Part II)

Lyna Framework Documentation

1. License. 2. Introduction. a. Read Leaderboard b. Write and Flush Leaderboards Custom widgets, 3D widgets and VR mode...

AT&T Developer Best Practices Guide

Code Sign Error Identity Doesn T Match Current Setting

DCLI User's Guide. Data Center Command-Line Interface

petfinder-api Documentation

Configuration Guide - Single-Sign On for OneDesk

Imgur.API Documentation

ForeScout Extended Module for Symantec Endpoint Protection

Drupal Drivers Documentation

DCLI User's Guide. Data Center Command-Line Interface 2.9.1

maxecurity Product Suite

SETTING UP YOUR.NET DEVELOPER ENVIRONMENT

SETTING UP YOUR.NET DEVELOPER ENVIRONMENT

git-pr Release dev2+ng5b0396a

Triveneto payment method for Magento 2

Neos Google Analytics Integration

DreamFactory Security Guide

BoxPacker Documentation

Navigator Documentation

Composer and Drupal. CIDUG Meeting December 13, 2018 John Rearick

RELEASE NOTES SHORETEL MS DYNAMICS CRM CLIENT VERSION 8

CuteFlow-V4 Documentation

The production version of your service API must be served over HTTPS.

Attacks Against Websites. Tom Chothia Computer Security, Lecture 11

Dogmatist. Release 1.0

DCLI User's Guide. Modified on 20 SEP 2018 Data Center Command-Line Interface

Contents in Detail. Foreword by Xavier Noria

Table of Contents Chapter 1: Migrating NIMS to OMS... 3 Index... 17

API Portal Version December User Guide

I hate money. Release 1.0

Understanding RESTful APIs and documenting them with Swagger. Presented by: Tanya Perelmuter Date: 06/18/2018

Firebase PHP SDK. Release

SCALING DRUPAL TO THE CLOUD WITH DOCKER AND AWS

CollabNet Desktop - Microsoft Windows Edition

Enhancing cloud applications by using external authentication services. 2015, 2016 IBM Corporation

SUN Sun Cert Bus Component Developer Java EE Platform 5, Upgrade. Download Full Version :

for Salesforce Question-to-Case Connector

DEVELOPING WEB AZURE AND WEB SERVICES MICROSOFT WINDOWS AZURE

Software Development I

[GSoC Proposal] Securing Airavata API

Infoblox Authenticated DHCP

crane Documentation Release Globo.com

Identity management. Tuomas Aura CSE-C3400 Information security. Aalto University, autumn 2014

PHP-Einführung - Lesson 8 - Composer (Dependency manager) and JSON. Alexander Lichter June 27, 2017

Beginners Guide to Lazada Open Platform

Introducing the New Globus CLI (alpha)

INTEGRATION MANUAL DOCUMENTATION E-COMMERCE

Vingd API for PHP Documentation

Coveo Platform 7.0. Yammer Connector Guide

Akana API Platform: Upgrade Guide

DCLI User's Guide. Data Center Command-Line Interface 2.7.0

Magento 2 Certified Professional Developer. Exam Study Guide

Administering Jive Mobile Apps for ios and Android

Authorization and Authentication

EGit/Gerrit Hands-on training #1: Installation and Configuration

Modern SharePoint and Office 365 Development

Advanced API Security

API Security Management SENTINET

PowerShell-Module Documentation. Release docs

ForgeRock Access Management Customization and APIs

Working with Database Connections. Version: 18.1

Transcription:

Project Name Documentation Release 0.1 Copyright holder December 01, 2016

Contents 1 Introduction 3 2 Design 5 3 Installation 7 4 The SDK 9 4.1 Phraseanet SDK client.......................................... 9 4.1.1 Authentication......................................... 9 Use developer Token....................................... 10 Full authentication flow..................................... 10 4.2 Entity Manager.............................................. 10 4.2.1 Repositories........................................... 10 4.2.2 Entities............................................. 11 4.3 Fetching datas from API......................................... 12 4.4 Lazy Loading............................................... 13 4.5 Recipes.................................................. 13 4.5.1 Recipes............................................. 13 How to check if you are connected to the API?......................... 13 Retrieve the last twenty Feed entries............................... 14 Search for records........................................ 14 Retrieve all validation basket................................... 15 oauth2 Authentication Flow................................... 15 Store clients token in session................................... 16 4.6 Handling Exceptions........................................... 17 5 Report a bug 19 6 Ask for a feature 21 7 Contribute 23 8 Run tests 25 9 About 27 10 License 29 i

ii

This documentation is out of date, please refer to the repository Phraseanet-PHP-SDK <https://github.com/alchemyfr/phraseanet-php-sdk Contents 1

2 Contents

CHAPTER 1 Introduction Phraseanet PHP SDK is an object oriented PHP library that gives you access to the your Phraseanet ressources from your PHP application/website. 3

4 Chapter 1. Introduction

CHAPTER 2 Design This library has been strongly inspired by Doctrine ORM design and sits on top of Phraseanet API<https://docs.phraseanet.com/Devel>. The aim is to let you build your application/mashup as if you were connected to a database. This library provide a set of entities mapped to the logical structure of the API and a set of related repositories to fetch this entities in various ways. This is a read only library ; current version only allow read from the API. 5

6 Chapter 2. Design

CHAPTER 3 Installation We rely on composer to use this library. If you do no still use composer for your project, you can start with this composer.json at the root of your project: { "require": { "phraseanet/php-sdk": "~0.2" Install composer : # Install composer curl -s http://getcomposer.org/installer php # Upgrade your install php composer.phar install You now just have to autoload the library to use it : require 'vendor/autoload.php'; This is a very short intro to composer. If you ever experience an issue or want to know more about composer, you will find help on their website http://getcomposer.org/. 7

8 Chapter 3. Installation

CHAPTER 4 The SDK To use the SDK, you will need an Entity Manager. This EntityManager, provides methods to access repositories, delegating all work to an HTTP client. Most of the time, you ll only have to set your credentials to this client. If you want to customize it (use a configuration for your credentials, add Memcached or Redis cache...) see the dedicated section. 4.1 Phraseanet SDK client The Client object is the heart of the SDK, it performs HTTP requests and handles authentication flow as well. Get a Phraseanet client For the following example we will use Guzzle Http Client Adapter which use Guzzle http://guzzlephp.org/index.html, highly customizable library. use PhraseanetSDK\Client; use PhraseanetSDK\HttpAdapter\Guzzle as GuzzleAdapter; $HttpAdapter = GuzzleAdapter::create(); $HttpAdapter->setBaseUrl('http://url-to-phraseanet.net/'); $client = new Client('Your API Key', 'Your API Secret', $HttpAdapter); Note: You have to create an application in Phraseanet to get credentials. This application will be created in Account => Applications. 4.1.1 Authentication All requests performed on Phraseanet API are authenticated requests. Phraseanet API implements OAuth2.0 http://oauth.net/2/ authentication flow, this means you MUST provide an oauth ACCESS_TOKEN to request the API otherwise you will get a PhraseanetSDK\Exception\UnauthorizedException. There are two ways to use the SDK in your application. Either you will use the same token for every request, either you will use a custom token using the whole oauth2 authentication flow. If you want to use this second way, please read the dedicated article in the recipes. 9

Use developer Token $client->setaccesstoken('your_access_token'); Full authentication flow If you do not want to use the developer token and prefer the oauth2 full authentication flow, read the dedicated doc in the recipes. 4.2 Entity Manager Once you have a client, you ll have access to the EntityManager ; it is the central access point to Phraseanet ressources. use PhraseanetSDK\EntityManager; $entitymanager = new EntityManager($client); // retrieve a collection of all feeds available $feeds = $entitymanager->getrepository('feed')->findall(); 4.2.1 Repositories Repositories are access point to entities. To get a repository instance use the Entity Manager // $em is an Entity Manager instance $recordrepository = $em->getrepository('record'); // return the 20 latest records $recordrepository->find(0, 20); $basketrepository = $em->getrepository('basket'); // return all the active baskets of the user $basketrepository->findall(); Repositories methods depend of the repository. Here is the list of all available repositories and a link to the related API documentation. Basket repository BasketElement repository Caption repository Databox repository DataboxCollection repository DataboxDocumentStructure repository DataboxStatus repository Entry repository Feed repository 10 Chapter 4. The SDK

Metadatas repository Quarantine repository Record repository RecordStatus repository Subdef repository 4.2.2 Entities Entities are ressources with identity. Their identity has a conceptual meaning inside the Phraseanet API Domain. Since the SDK is a read only library, you will never have the need to create a new entity object but just getting them trought the API. // $em is an Entity Manager instance $recordrepository = $em->getrepository('record'); // return the 20 latest records as record entities $records = $recordrepository->find(0, 20); foreach($records as $record) { // $record is an entity // return the title of the record $record->gettitle(); // return a Subdef entity corresponding to the thumbnail $thumbnail = $record->getthumbnail(); if($thumbnail) { $url = $thumbnail->getpermalink()->geturl(); Here is a complete list of all entities provided by the API and a link to their API doc. Basket BasketElement BasketValidationChoice BasketValidationParticipant Databox DataboxCollection DataboxDocumentStructure DataboxStatus Feed FeedEntry FeedEntryItem Metadatas 4.2. Entity Manager 11

Permalink Quarantine QuarantineSession Query QuerySuggestion Record RecordCaption Subdef Technical 4.3 Fetching datas from API Now you have your entity manager, it is very easy to fetch datas. You have to get the repository type that relies on the data type you want. Let s say you want records, then you need the Record Repository. Look at the Record Repository API, and see that there are three ways to retrieve records : findbyid find search Some of the repository methods will fetch one entity and some others will retrieve a collection of entities. Fetching one element // $em is an Entity Manager instance $recordrepository = $em->getrepository('record'); $databoxid = 1; $recordid = 234; // Fetch one record identified by its databox id ans its own id // Return a Record Entity object $record = recordrepository->findbyid($databoxid, $recordid); Fetching a collection of elements // $em is an Entity Manager instance $recordrepository = $em->getrepository('record'); $offsetstart = 1; $perpage = 20; // Fetch 20 records // Return a Doctrine Array Collection object $records = recordrepository->find($offsetstart, $perpage); foreach($records as $record) { 12 Chapter 4. The SDK

echo $record->gettitle(). "\n"; 4.4 Lazy Loading Whenever you have an entity instance at hand, you can traverse and use any associations of that entity to retrieve the associated objects. // Fetch one record $record = $recordrepository->findbyid(1, 87); // Will execute a request to the api to load the record status $status = $record->getstatus(); // performs another request to get subdefs foreach($record->getsubdefs() as $subdef) { echo "Sub definition ". $subdef->getname(). " has URL ". $subdef->getpermalink()->geturl(). " Note: Try to avoid lazy loading in a loop unless you have some cache implementation to reduce the number of requests. 4.5 Recipes You ll find usefull recipes in our Recipes 4.5.1 Recipes How to check if you are connected to the API? There is not a dedicated method to test if you are actually connected to the API. However if you want to test if the connection can be established you must perform a dummy request to the remote instance and check if the response is ok. use PhraseanetSDK\EntityManager; use PhraseanetSDK\Client; use PhraseanetSDK\HttpAdapter\Guzzle as GuzzleAdapter; use PhraseanetSDK\Exception\UnauthorizedException; $HttpAdapter = GuzzleAdapter::create(); $HttpAdapter->setBaseUrl('http://url-to-phraseanet.net/'); $client = new Client($apikey, $apisecret, $HttpAdapter); $client->setaccesstoken($token); $em = new EntityManager($client); 4.4. Lazy Loading 13

$databoxrepository = $em->getrepository('databox'); try { $databoxrepository->findall(); catch (UnauthorizedException $e) { // Connection is not valid, handle it catch (\Exception $e) { // Something else went wrong Retrieve the last twenty Feed entries This code retrieves the 20 latest feed entries and print some informations about it. use PhraseanetSDK\EntityManager; use PhraseanetSDK\Client; use PhraseanetSDK\HttpAdapter\Guzzle as GuzzleAdapter; $HttpAdapter = GuzzleAdapter::create(); $HttpAdapter->setBaseUrl('http://url-to-phraseanet.net/'); $client = new Client($apikey, $apisecret, $HttpAdapter); $client->setaccesstoken($developertoken); $em = new EntityManager($client); $entries = $em->getrepository('entry')->findinaggregatedfeed(0, 20); foreach($entries as $entry) { $output = "======================\n"; $output.= $entry->getauthorname(). "\n"; $output.= $entry->gettitle(). "\n"; $output.= $entry->getsubtitle(). "\n"; $output.= $entry->getcreatedon()->format('d/m/y H:i:s'). "\n"; Search for records The following code search for records use PhraseanetSDK\EntityManager; use PhraseanetSDK\Client; use PhraseanetSDK\HttpAdapter\Guzzle as GuzzleAdapter; $HttpAdapter = GuzzleAdapter::create(); $HttpAdapter->setBaseUrl('http://url-to-phraseanet.net/'); $client = new Client($apikey, $apisecret, $HttpAdapter); $client->setaccesstoken($token); $_SESSION['token_phrasea'] = $token; $em = new EntityManager($client); 14 Chapter 4. The SDK

$recordrepository = $em->getrepository('record'); $query = $recordrepository->search(array( 'query' => 'animals', 'offset_start' => 0, 'per_page' => 20, 'bases' => array(1, 4), 'record_type' => 'image' )); echo $query->gettotalresults(). " items found in ". $query->getquerytime(). " seconds\n"; foreach($query->getresults() as $record) { $output = "======================\n"; $output.= $record->gettitle(). "\n"; $output.= $record->getoriginalname(). "\n"; Note: See documentation for possible query parameters https://docs.phraseanet.com/en/devel/ Retrieve all validation basket use PhraseanetSDK\EntityManager; $em = new EntityManager($myClient); $basketrepository = $em->getrepository('basket'); $baskets = $basketrepository->findall(); foreach($query->getresults()->filter(function($basket){ return $baket->isvalidationbasket(); ) as $basket) { $output = "======================\n"; $output.= $basket->getname(). "\n"; $output.= $record->getdescription(). "\n"; Note: ArrayCollection object provides many useful function take a look Doctrine\Common\Collections\ArrayCollection oauth2 Authentication Flow How to get a token from the API? Phraseanet API only supports Token Grant Type. With this grant type you redirect the user to an authorization page on Phraseanet, and your script is called back once the end-user authorized your API key to access the Phraseanet service on its behalf. Authorization page 4.5. Recipes 15

$client->setgranttype(client::grant_type_authorization, array('redirect_uri' => 'YOUR_REDIRECT_URI')) // output the authentication url to the end user echo $client->getauthorizationurl(); Note: In case your authorization page is the same that your callback page Callback page use Symfony\Component\HttpFoundation\Request; use PhraseanetSDK\Exception\AuthenticationException; use PhraseanetSDK\Exception\RuntimeException; $request = Request::createFromGlobals(); // retrieve the access token from current request try { $client->retrieveaccesstoken($request); catch (AuthenticationException $e) { // Something went wrong during the authentication flow catch (RuntimeException $e) { // Something went wrong for obscur reasons during the retrieval of the token Note: ACCESS_TOKEN does not expire. So once you have an ACCESS_TOKEN associated to your current user, you can manage user s token with your own storage system on top of the library or you can just extends the PhraseanetSDKClient object an override the getaccesstoken and setaccesstoken method. See the next example to store token. Store clients token in session In some case you would probably store clients token in the session or database. SDK provide a StoreInterface for that : Let s store our token in session. namespace Acme\Application\Phrasea use PhraseanetSDK\Authentication\StoreInterface; class SessionStore implements StoreInterface { protected $token; public function construct() { $this->initsession(); public function savetoken($token) 16 Chapter 4. The SDK

{ $this->token = $token; public function gettoken() { return $this->token; private function initsession() { if (! session_id()) { session_start(); $this->token = &$_SESSION['phrasea_oauth_token']; Usage use Acme\Application\Phrasea\SessionStore; use PhraseanetSDK\HttpAdapter\Guzzle as GuzzleAdapter; use PhraseanetSDK\Client; $HttpAdapter = GuzzleAdapter::create(); $HttpAdapter->setBaseUrl('http://url-to-phraseanet.net/'); $client = new Client('Your API Key', 'Your API Secret', $HttpAdapter); $client->settokenstore(new SessionStore()); if(null!== $client->getaccesstoken()) { //user is still authenticated else { //force user to authenticate by providing the clicking authorization url echo $client->getauthorizationurl(); 4.6 Handling Exceptions The PHP SDK throws 3 different types of exception : PhraseanetSDK\Exception\Runtime is thrown when something went wrong most of the time you can get more informations by getting the previous exception. PhraseanetSDK\Exception\UnauthorizedException which is thrown when request is not authenticated PhraseanetSDK\Exception\NotFoundException which is thrown when the requested ressource can not be found All these Exception implements \PhraseanetSDK\Exception\ExceptionInterface so you can catch any of these exceptions by catching this exception interface. 4.6. Handling Exceptions 17

18 Chapter 4. The SDK

CHAPTER 5 Report a bug If you experience an issue, please report it in our issue tracker. Before reporting an issue, please be sure that it is not already reported by browsing open issues. When reporting, please give us information to reproduce it by giving your platform (Linux / MacOS / Windows) and its version, the version of PHP you use (the output of php --version) 19

20 Chapter 5. Report a bug

CHAPTER 6 Ask for a feature We would be glad you ask for a feature! Feel free to add a feature request in the issues manager on GitHub! 21

22 Chapter 6. Ask for a feature

CHAPTER 7 Contribute You find a bug and resolved it? You added a feature and want to share? You found a typo in this doc and fixed it? Feel free to send a Pull Request on GitHub, we will be glad to merge your code. 23

24 Chapter 7. Contribute

CHAPTER 8 Run tests Phraseanet-PHP-SDK relies on PHPUnit for unit tests. To run tests on your system, ensure you have PHPUnit installed, and, at the root of the project, execute it : phpunit 25

26 Chapter 8. Run tests

CHAPTER 9 About Phraseanet-PHP-SDK has been written by the Alchemy Dev Team for Phraseanet, our DAM software. Try it, it s awesome! 27

28 Chapter 9. About

CHAPTER 10 License Phraseanet-PHP-SDK is licensed under the MIT License 29