2024-02-21 18:14:29 +01:00
< ? php
2024-10-04 09:40:05 +02:00
/* Copyright ( C ) 2024 MDW < mdeweerd @ users . noreply . github . com >
* Copyright ( C ) 2024 Frédéric France < frederic . france @ free . fr >
2024-03-19 23:38:26 +01:00
*/
2024-02-21 18:14:29 +01:00
// phpcs:disable PEAR.Commenting,Generic.NamingConventions,PEAR.NamingConventions,Squiz.Scope.MethodScope.Missing
2024-03-19 23:38:26 +01:00
2024-02-21 18:14:29 +01:00
namespace Luracast\Restler {
/**
* Interface for the cache system that manages caching of given data
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
interface iCache
{
/**
* store data in the cache
*
* @ abstract
*
* @ param string $name
* @ param mixed $data
*
* @ return boolean true if successful
*/
public function set ( $name , $data );
/**
* retrieve data from the cache
*
* @ abstract
*
* @ param string $name
* @ param bool $ignoreErrors
*
* @ return mixed
*/
public function get ( $name , $ignoreErrors = false );
/**
* delete data from the cache
*
* @ abstract
*
* @ param string $name
* @ param bool $ignoreErrors
*
* @ return boolean true if successful
*/
public function clear ( $name , $ignoreErrors = false );
/**
* check if the given name is cached
*
* @ abstract
*
* @ param string $name
*
* @ return boolean true if cached
*/
public function isCached ( $name );
}
/**
* Class ApcCache provides an APC based cache for Restler
*
* @ category Framework
* @ package Restler
* @ author Joel R . Simpson < joel . simpson @ gmail . com >
* @ copyright 2013 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class ApcCache implements \Luracast\Restler\iCache
{
/**
* The namespace that all of the cached entries will be stored under . This allows multiple APIs to run concurrently .
*
* @ var string
*/
public static $namespace = 'restler' ;
/**
* store data in the cache
*
*
* @ param string $name
* @ param mixed $data
*
* @ return boolean true if successful
*/
public function set ( $name , $data )
{
}
/**
* retrieve data from the cache
*
*
* @ param string $name
* @ param bool $ignoreErrors
*
* @ throws \Exception
* @ return mixed
*/
public function get ( $name , $ignoreErrors = false )
{
}
/**
* delete data from the cache
*
*
* @ param string $name
* @ param bool $ignoreErrors
*
* @ throws \Exception
* @ return boolean true if successful
*/
public function clear ( $name , $ignoreErrors = false )
{
}
/**
* check if the given name is cached
*
*
* @ param string $name
*
* @ return boolean true if cached
*/
public function isCached ( $name )
{
}
}
/**
* Class that implements spl_autoload facilities and multiple
* conventions support .
* Supports composer libraries and 100 % PSR - 0 compliant .
* In addition we enable namespace prefixing and class aliases .
*
* @ category Framework
* @ package Restler
* @ subpackage Helper
* @ author Nick Lombard < github @ jigsoft . co . za >
* @ copyright 2012 Luracast
*
*/
class AutoLoader
{
2024-03-19 23:38:26 +01:00
protected static $instance ;
protected static $perfectLoaders ;
protected static $rogueLoaders = array ();
protected static $classMap = array ();
protected static $aliases = array (
2024-02-21 18:14:29 +01:00
// aliases and prefixes instead of null list aliases
'Luracast\\Restler' => null ,
'Luracast\\Restler\\Format' => null ,
'Luracast\\Restler\\Data' => null ,
'Luracast\\Restler\\Filter' => null ,
);
/**
* Singleton instance facility .
*
* @ static
* @ return AutoLoader the current instance or new instance if none exists .
*/
public static function instance ()
{
}
/**
* Helper function to add a path to the include path .
* AutoLoader uses the include path to discover classes .
*
* @ static
*
* @ param $path string absolute or relative path .
*
* @ return bool false if the path cannot be resolved
* or the resolved absolute path .
*/
public static function addPath ( $path )
{
}
/**
* Other autoLoaders interfere and cause duplicate class loading .
* AutoLoader is capable enough to handle all standards so no need
* for others stumbling about .
*
* @ return callable the one true auto loader .
*/
public static function thereCanBeOnlyOne ()
{
}
/**
* Seen this before cache handler .
* Facilitates both lookup and persist operations as well as convenience ,
* load complete map functionality . The key can only be given a non falsy
* value once , this will be truthy for life .
*
* @ param $key mixed class name considered or a collection of
* classMap entries
* @ param $value mixed optional not required when doing a query on
* key . Default is false we haven ' t seen this
* class . Most of the time it will be the filename
* for include and is set to true if we are unable
* to load this class iow true == it does not exist .
* value may also be a callable auto loader function .
*
* @ return mixed The known value for the key or false if key has no value
*/
public static function seen ( $key , $value = false )
{
}
/**
* Protected constructor to enforce singleton pattern .
* Populate a default include path .
* All possible includes cant possibly be catered for and if you
* require another path then simply add it calling set_include_path .
*/
protected function __construct ()
{
}
/**
* Auto loader callback through __invoke object as function .
*
* @ param $className string class / interface name to auto load
*
* @ return mixed | null the reference from the include or null
*/
public function __invoke ( $className )
{
}
}
/**
* Parses the PHPDoc comments for metadata . Inspired by `Documentor` code base .
*
* @ category Framework
* @ package Restler
* @ subpackage Helper
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class CommentParser
{
/**
* name for the embedded data
*
* @ var string
*/
public static $embeddedDataName = 'properties' ;
/**
* Regular Expression pattern for finding the embedded data and extract
* the inner information . It is used with preg_match .
*
* @ var string
*/
public static $embeddedDataPattern = '/```(\\w*)[\\s]*(([^`]*`{0,2}[^`]+)*)```/ms' ;
/**
* Pattern will have groups for the inner details of embedded data
* this index is used to locate the data portion .
*
* @ var int
*/
public static $embeddedDataIndex = 2 ;
/**
* Delimiter used to split the array data .
*
* When the name portion is of the embedded data is blank auto detection
* will be used and if URLEncodedFormat is detected as the data format
* the character specified will be used as the delimiter to find split
* array data .
*
* @ var string
*/
public static $arrayDelimiter = ',' ;
/**
* @ var array annotations that support array value
*/
public static $allowsArrayValue = array ( 'choice' => true , 'select' => true , 'properties' => true );
/**
* character sequence used to escape \ @
*/
const escapedAtChar = '\\@' ;
/**
* character sequence used to escape end of comment
*/
const escapedCommendEnd = '{@*}' ;
/**
* Instance of Restler class injected at runtime .
*
* @ var Restler
*/
public $restler ;
/**
* Parse the comment and extract the data .
*
* @ static
*
* @ param $comment
* @ param bool $isPhpDoc
*
* @ return array associative array with the extracted values
*/
public static function parse ( $comment , $isPhpDoc = true )
{
}
/**
* Removes the comment tags from each line of the comment .
*
* @ static
*
* @ param string $comment PhpDoc style comment
*
* @ return string comments with out the tags
*/
public static function removeCommentTags ( $comment )
{
}
}
}
2024-03-19 23:38:26 +01:00
2024-02-21 18:14:29 +01:00
namespace {
/**
* Interface iAuthenticate only exists for compatibility mode for Restler 2 and below , it should
* not be used otherwise .
*/
interface iAuthenticate
{
public function __isAuthenticated ();
}
}
2024-03-19 23:38:26 +01:00
2024-02-21 18:14:29 +01:00
namespace Luracast\Restler {
/**
* Interface for composing response
*
* @ category Framework
* @ package Restler
* @ subpackage result
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
interface iCompose
{
/**
* Result of an api call is passed to this method
* to create a standard structure for the data
*
* @ param mixed $result can be a primitive or array or object
*/
public function response ( $result );
/**
* When the api call results in RestException this method
* will be called to return the error message
*
* @ param RestException $exception exception that has reasons for failure
*
* @ return
*/
public function message ( \Luracast\Restler\RestException $exception );
}
/**
* Default Composer to provide standard structure for all HTTP responses
*
* @ category Framework
* @ package Restler
* @ subpackage result
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Compose implements \Luracast\Restler\iCompose
{
/**
* @ var bool When restler is not running in production mode , this value will
* be checked to include the debug information on error response
*/
public static $includeDebugInfo = true ;
/**
* Current Restler instance
* Injected at runtime
*
* @ var Restler
*/
public $restler ;
/**
* Result of an api call is passed to this method
* to create a standard structure for the data
*
* @ param mixed $result can be a primitive or array or object
*
* @ return mixed
*/
public function response ( $result )
{
}
/**
* When the api call results in RestException this method
* will be called to return the error message
*
* @ param RestException $exception exception that has reasons for failure
*
* @ return array
*/
public function message ( \Luracast\Restler\RestException $exception )
{
}
}
}
2024-03-19 23:38:26 +01:00
2024-02-21 18:14:29 +01:00
namespace Luracast\Restler\Data {
/**
* Restler is using many ValueObjects across to make it easy for the developers
* to use them with the help of code hinting etc . ,
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
interface iValueObject
{
/**
* This static method is called for creating an instance of the class by
* passing the initiation values as an array .
*
* @ static
* @ abstract
*
* @ param array $properties
*
* @ return iValueObject
*/
public static function __set_state ( array $properties );
/**
* This method provides a string representation for the instance
*
* @ return string
*/
public function __toString ();
}
/**
* ValueObject base class , you may use this class to create your
* iValueObjects quickly
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class ValueObject implements \Luracast\Restler\Data\iValueObject
{
public function __toString ()
{
}
public static function __set_state ( array $properties )
{
}
public function __toArray ()
{
}
}
/**
* ValueObject for api method info . All needed information about a api method
* is stored here
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class ApiMethodInfo extends \Luracast\Restler\Data\ValueObject
{
/**
* @ var string target url
*/
public $url ;
/**
* @ var string
*/
public $className ;
/**
* @ var string
*/
public $methodName ;
/**
* @ var array parameters to be passed to the api method
*/
public $parameters = array ();
/**
* @ var array information on parameters in the form of array ( name => index )
*/
public $arguments = array ();
/**
* @ var array default values for parameters if any
* in the form of array ( index => value )
*/
public $defaults = array ();
/**
* @ var array key => value pair of method meta information
*/
public $metadata = array ();
/**
* @ var int access level
* 0 - @ public - available for all
* 1 - @ hybrid - both public and protected ( enhanced info for authorized )
* 2 - @ protected comment - only for authenticated users
* 3 - protected method - only for authenticated users
*/
public $accessLevel = 0 ;
}
/**
* Convenience class for Array manipulation
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Arr
{
/**
* Deep copy given array
*
* @ param array $arr
*
* @ return array
*/
public static function copy ( array $arr )
{
}
}
/**
* Invalid Exception
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Invalid extends \Exception
{
}
/**
* Validation classes should implement this interface
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
interface iValidate
{
/**
* method used for validation .
*
* @ param mixed $input
* data that needs to be validated
* @ param ValidationInfo $info
* information to be used for validation
* @ return boolean false in case of failure or fixed value in the expected
* type
* @ throws \Luracast\Restler\RestException 400 with information about the
* failed
* validation
*/
public static function validate ( $input , \Luracast\Restler\Data\ValidationInfo $info );
}
/**
* Convenience class that converts the given object
* in to associative array
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Obj
{
/**
* @ var bool | string | callable
*/
public static $stringEncoderFunction = false ;
/**
* @ var bool | string | callable
*/
public static $numberEncoderFunction = false ;
/**
* @ var array key value pairs for fixing value types using functions .
* For example
*
* 'id' => 'intval' will make sure all values of the id properties
* will be converted to integers intval function
* 'password' => null will remove all the password entries
*/
public static $fix = array ();
/**
* @ var string character that is used to identify sub objects
*
* For example
*
* when Object :: $separatorChar = '.' ;
*
* array ( 'my.object' => true ) will result in
*
* array (
* 'my' => array ( 'object' => true )
* );
*/
public static $separatorChar = null ;
/**
* @ var bool set it to true when empty arrays , blank strings , null values
* to be automatically removed from response
*/
public static $removeEmpty = false ;
/**
* @ var bool set it to true to remove all null values from the result
*/
public static $removeNull = false ;
/**
* Convenience function that converts the given object
* in to associative array
*
* @ static
*
* @ param mixed $object that needs to be converted
*
* @ param bool $forceObjectTypeWhenEmpty when set to true outputs
* actual type ( array or
* object ) rather than
* always an array when the
* array / object is empty
*
* @ return array
*/
public static function toArray ( $object , $forceObjectTypeWhenEmpty = false )
{
}
public function __get ( $name )
{
}
public function __set ( $name , $function )
{
}
public function __isset ( $name )
{
}
public function __unset ( $name )
{
}
}
/**
* Convenience class for String manipulation
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Text
{
/**
* Given haystack contains the needle or not ?
*
* @ param string $haystack
* @ param string $needle
* @ param bool $caseSensitive
*
* @ return bool
*/
public static function contains ( $haystack , $needle , $caseSensitive = true )
{
}
/**
* Given haystack begins with the needle or not ?
*
* @ param string $haystack
* @ param string $needle
*
* @ return bool
*/
public static function beginsWith ( $haystack , $needle )
{
}
/**
* Given haystack ends with the needle or not ?
*
* @ param string $haystack
* @ param string $needle
*
* @ return bool
*/
public static function endsWith ( $haystack , $needle )
{
}
/**
* Convert camelCased or underscored string in to a title
*
* @ param string $name
*
* @ return string
*/
public static function title ( $name )
{
}
/**
* Convert given string to be used as a slug or css class
*
* @ param string $name
* @ return string
*/
public static function slug ( $name )
{
}
}
/**
* ValueObject for validation information . An instance is created and
* populated by Restler to pass it to iValidate implementing classes for
* validation
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class ValidationInfo implements \Luracast\Restler\Data\iValueObject
{
/**
* @ var mixed given value for the parameter
*/
public $value ;
/**
* @ var string proper name for given parameter
*/
public $label ;
/**
* @ var string html element that can be used to represent the parameter for
* input
*/
public $field ;
/**
* @ var mixed default value for the parameter
*/
public $default ;
/**
* Name of the variable being validated
*
* @ var string variable name
*/
public $name ;
/**
* @ var bool is it required or not
*/
public $required ;
/**
* @ var string body or header or query where this parameter is coming from
* in the http request
*/
public $from ;
/**
* Data type of the variable being validated .
* It will be mostly string
*
* @ var string | array multiple types are specified it will be of
* type array otherwise it will be a string
*/
public $type ;
/**
* When the type is array , this field is used to define the type of the
* contents of the array
*
* @ var string | null when all the items in an array are of certain type , we
* can set this property . It will be null if the items can be of any type
*/
public $contentType ;
/**
* Should we attempt to fix the value ?
* When set to false validation class should throw
* an exception or return false for the validate call .
* When set to true it will attempt to fix the value if possible
* or throw an exception or return false when it cant be fixed .
*
* @ var boolean true or false
*/
public $fix = false ;
/**
* @ var array of children to be validated
*/
public $children = null ;
// ==================================================================
//
// VALUE RANGE
//
// ------------------------------------------------------------------
/**
* Given value should match one of the values in the array
*
* @ var array of choices to match to
*/
public $choice ;
/**
* If the type is string it will set the lower limit for length
* else will specify the lower limit for the value
*
* @ var number minimum value
*/
public $min ;
/**
* If the type is string it will set the upper limit limit for length
* else will specify the upper limit for the value
*
* @ var number maximum value
*/
public $max ;
// ==================================================================
//
// REGEX VALIDATION
//
// ------------------------------------------------------------------
/**
* RegEx pattern to match the value
*
* @ var string regular expression
*/
public $pattern ;
// ==================================================================
//
// CUSTOM VALIDATION
//
// ------------------------------------------------------------------
/**
* Rules specified for the parameter in the php doc comment .
* It is passed to the validation method as the second parameter
*
* @ var array custom rule set
*/
public $rules ;
/**
* Specifying a custom error message will override the standard error
* message return by the validator class
*
* @ var string custom error response
*/
public $message ;
// ==================================================================
//
// METHODS
//
// ------------------------------------------------------------------
/**
* Name of the method to be used for validation .
* It will be receiving two parameters $input , $rules ( array )
*
* @ var string validation method name
*/
public $method ;
/**
* Instance of the API class currently being called . It will be null most of
* the time . Only when method is defined it will contain an instance .
* This behavior is for lazy loading of the API class
*
* @ var null | object will be null or api class instance
*/
public $apiClassInstance = null ;
public static function numericValue ( $value )
{
}
public static function arrayValue ( $value )
{
}
public static function stringValue ( $value , $glue = ',' )
{
}
public static function booleanValue ( $value )
{
}
public static function filterArray ( array $data , $keepNumericKeys )
{
}
public function __toString ()
{
}
public function __construct ( array $info )
{
}
/**
* Magic Method used for creating instance at run time
*/
public static function __set_state ( array $info )
{
}
}
/**
* Default Validator class used by Restler . It can be replaced by any
* iValidate implementing class by setting Defaults :: $validatorClass
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Validator implements \Luracast\Restler\Data\iValidate
{
public static $holdException = false ;
public static $exceptions = array ();
public static $preFilters = array (
//'*' => 'some_global_filter', //applied to all parameters
'string' => 'trim' ,
);
/**
* Validate alphabetic characters .
*
* Check that given value contains only alphabetic characters .
*
* @ param $input
* @ param ValidationInfo $info
*
* @ return string
*
* @ throws Invalid
*/
public static function alpha ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* Validate UUID strings .
*
* Check that given value contains only alpha numeric characters and the length is 36 chars .
*
* @ param $input
* @ param ValidationInfo $info
*
* @ return string
*
* @ throws Invalid
*/
public static function uuid ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* Validate alpha numeric characters .
*
* Check that given value contains only alpha numeric characters .
*
* @ param $input
* @ param ValidationInfo $info
*
* @ return string
*
* @ throws Invalid
*/
public static function alphanumeric ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* Validate printable characters .
*
* Check that given value contains only printable characters .
*
* @ param $input
* @ param ValidationInfo $info
*
* @ return string
*
* @ throws Invalid
*/
public static function printable ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* Validate hexadecimal digits .
*
* Check that given value contains only hexadecimal digits .
*
* @ param $input
* @ param ValidationInfo $info
*
* @ return string
*
* @ throws Invalid
*/
public static function hex ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* Color specified as hexadecimals
*
* Check that given value contains only color .
*
* @ param $input
* @ param ValidationInfo | null $info
*
* @ return string
* @ throws Invalid
*/
public static function color ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* Validate Telephone number
*
* Check if the given value is numeric with or without a `+` prefix
*
* @ param $input
* @ param ValidationInfo $info
*
* @ return string
*
* @ throws Invalid
*/
public static function tel ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* Validate Email
*
* Check if the given string is a valid email
*
* @ param String $input
* @ param ValidationInfo $info
*
* @ return string
* @ throws Invalid
*/
public static function email ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* Validate IP Address
*
* Check if the given string is a valid ip address
*
* @ param String $input
* @ param ValidationInfo $info
*
* @ return string
* @ throws Invalid
*/
public static function ip ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* Validate Url
*
* Check if the given string is a valid url
*
* @ param String $input
* @ param ValidationInfo $info
*
* @ return string
* @ throws Invalid
*/
public static function url ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* MySQL Date
*
* Check if the given string is a valid date in YYYY - MM - DD format
*
* @ param String $input
* @ param ValidationInfo $info
*
* @ return string
* @ throws Invalid
*/
public static function date ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* MySQL DateTime
*
* Check if the given string is a valid date and time in YYY - MM - DD HH : MM : SS format
*
* @ param String $input
* @ param ValidationInfo $info
*
* @ return string
* @ throws Invalid
*/
public static function datetime ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* Alias for Time
*
* Check if the given string is a valid time in HH : MM : SS format
*
* @ param String $input
* @ param ValidationInfo $info
*
* @ return string
* @ throws Invalid
*/
public static function time24 ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* Time
*
* Check if the given string is a valid time in HH : MM : SS format
*
* @ param String $input
* @ param ValidationInfo $info
*
* @ return string
* @ throws Invalid
*/
public static function time ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* Time in 12 hour format
*
* Check if the given string is a valid time 12 hour format
*
* @ param String $input
* @ param ValidationInfo $info
*
* @ return string
* @ throws Invalid
*/
public static function time12 ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* Unix Timestamp
*
* Check if the given value is a valid timestamp
*
* @ param String $input
* @ param ValidationInfo $info
*
* @ return int
* @ throws Invalid
*/
public static function timestamp ( $input , \Luracast\Restler\Data\ValidationInfo $info = null )
{
}
/**
* Validate the given input
*
* Validates the input and attempts to fix it when fix is requested
*
* @ param mixed $input
* @ param ValidationInfo $info
* @ param null $full
*
* @ throws \Exception
* @ return array | bool | float | int | mixed | null | number | string
*/
public static function validate ( $input , \Luracast\Restler\Data\ValidationInfo $info , $full = null )
{
}
}
}
2024-03-19 23:38:26 +01:00
2024-02-21 18:14:29 +01:00
namespace Luracast\Restler {
/**
* Static class to hold all restler defaults , change the values to suit your
* needs in the gateway file ( index . php ), you may also allow the api users to
* change them per request by adding the properties to Defaults :: $overridables
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Defaults
{
// ==================================================================
//
// Class Mappings
//
// ------------------------------------------------------------------
/**
* @ var string of name of the class that implements
* \Luracast\Restler\iCache the cache class to be used
*/
public static $cacheClass = 'Luracast\\Restler\\HumanReadableCache' ;
/**
* @ var string full path of the directory where all the generated files will
* be kept . When set to null ( default ) it will use the cache folder that is
* in the same folder as index . php ( gateway )
*/
public static $cacheDirectory ;
/**
* @ var string of name of the class that implements
* \Luracast\Restler\Data\iValidate the validator class to be used
*/
public static $validatorClass = 'Luracast\\Restler\\Data\\Validator' ;
/**
* @ var string name of the class that implements \Luracast\Restler\iCompose
* the class to be used to compose the response
*/
public static $composeClass = 'Luracast\\Restler\\Compose' ;
// ==================================================================
//
// Routing
//
// ------------------------------------------------------------------
/**
* @ var bool should auto routing for public and protected api methods
* should be enabled by default or not . Set this to false to get
* Restler 1.0 style behavior
*/
public static $autoRoutingEnabled = true ;
/**
* @ var boolean avoids creating multiple routes that can increase the
* ambiguity when set to true . when a method parameter is optional it is
* not mapped to the url and should only be used in request body or as
* query string `/resource?id=value` . When a parameter is required and is
* scalar , it will be mapped as part of the url `/resource/{id}`
*/
public static $smartAutoRouting = true ;
/**
* @ var boolean enables more ways of finding the parameter data in the request .
* If you need backward compatibility with Restler 2 or below turn this off
*/
public static $smartParameterParsing = true ;
// ==================================================================
//
// API Version Management
//
// ------------------------------------------------------------------
/**
* @ var null | string name that is used for vendor specific media type and
* api version using the Accept Header for example
* application / vnd . { vendor } - v1 + json
*
* Keep this null if you do not want to use vendor MIME for specifying api version
*/
public static $apiVendor = null ;
/**
* @ var bool set it to true to force vendor specific MIME for versioning .
* It will be automatically set to true when Defaults :: $vendor is not
* null and client is requesting for the custom MIME type
*/
public static $useVendorMIMEVersioning = false ;
/**
* @ var bool set it to true to use enableUrl based versioning
*/
public static $useUrlBasedVersioning = false ;
// ==================================================================
//
// Request
//
// ------------------------------------------------------------------
/**
* @ var string name to be used for the method parameter to capture the
* entire request data
*/
public static $fullRequestDataName = 'request_data' ;
/**
* @ var string name of the property that can sent through $_GET or $_POST to
* override the http method of the request . Set it to null or
* blank string to disable http method override through request
* parameters .
*/
public static $httpMethodOverrideProperty = 'http_method' ;
/**
* @ var bool should auto validating api parameters should be enabled by
* default or not . Set this to false to avoid validation .
*/
public static $autoValidationEnabled = true ;
/**
* @ var string name of the class that implements iUser interface to identify
* the user for caching purposes
*/
public static $userIdentifierClass = 'Luracast\\Restler\\User' ;
// ==================================================================
//
// Response
//
// ------------------------------------------------------------------
/**
* @ var bool HTTP status codes are set on all responses by default .
* Some clients ( like flash , mobile ) have trouble dealing with non - 200
* status codes on error responses .
*
* You can set it to true to force a HTTP 200 status code on all responses ,
* even when errors occur . If you suppress status codes , look for an error
* response to determine if an error occurred .
*/
public static $suppressResponseCode = false ;
public static $supportedCharsets = array ( 'utf-8' , 'iso-8859-1' );
public static $supportedLanguages = array ( 'en' , 'en-US' );
public static $charset = 'utf-8' ;
public static $language = 'en' ;
/**
* @ var bool when set to true , it will exclude the response body
*/
public static $emptyBodyForNullResponse = true ;
/**
* @ var bool when set to true , the response will not be outputted directly into the buffer .
* If set , Restler :: handle () will return the response as a string .
*/
public static $returnResponse = false ;
/**
* @ var bool enables CORS support
*/
public static $crossOriginResourceSharing = false ;
public static $accessControlAllowOrigin = '*' ;
public static $accessControlAllowMethods = 'GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD' ;
// ==================================================================
//
// Header
//
// ------------------------------------------------------------------
/**
* @ var array default Cache - Control template that used to set the
* Cache - Control header and has two values , first one is used when
* Defaults :: $headerExpires is 0 and second one when it has some time
* value specified . When only one value is specified it will be used for
* both cases
*/
public static $headerCacheControl = array (
'no-cache, must-revalidate' ,
/* " public, " or " private, " will be prepended based on api method
* called ( public or protected )
*/
'max-age={expires}, must-revalidate' ,
);
/**
* @ var int sets the content to expire immediately when set to zero
* alternatively you can specify the number of seconds the content will
* expire . This setting can be altered at api level using php doc comment
* with @ expires numOfSeconds
*/
public static $headerExpires = 0 ;
// ==================================================================
//
// Access Control
//
// ------------------------------------------------------------------
/**
* @ var null | callable if the api methods are under access control mechanism
* you can attach a function here that returns true or false to determine
* visibility of a protected api method . this function will receive method
* info as the only parameter .
*/
public static $accessControlFunction = null ;
/**
* @ var int set the default api access mode
* value of 0 = public api
* value of 1 = hybrid api using `@access hybrid` comment
* value of 2 = protected api using `@access protected` comment
* value of 3 = protected api using `protected function` method
*/
public static $apiAccessLevel = 0 ;
/**
* @ var string authentication method to be called in iAuthenticate
* Interface
*/
public static $authenticationMethod = '__isAllowed' ;
/**
* @ var int time in milliseconds for bandwidth throttling ,
* which is the minimum response time for each api request . You can
* change it per api method by setting `@throttle 3000` in php doc
* comment either at the method level or class level
*/
public static $throttle = 0 ;
// ==================================================================
//
// Overrides for API User
//
// ------------------------------------------------------------------
/**
* @ var array use 'alternativeName' => 'actualName' to set alternative
* names that can be used to represent the api method parameters and / or
* static properties of Defaults
*/
public static $aliases = array (
/**
* suppress_response_codes = true as an URL parameter to force
* a HTTP 200 status code on all responses
*/
'suppress_response_codes' => 'suppressResponseCode' ,
);
/**
* @ var array determines the defaults that can be overridden by the api
* user by passing them as URL parameters
*/
public static $overridables = array ( 'suppressResponseCode' );
/**
* @ var array contains validation details for defaults to be used when
* set through URL parameters
*/
public static $validation = array ( 'suppressResponseCode' => array ( 'type' => 'bool' ), 'headerExpires' => array ( 'type' => 'int' , 'min' => 0 ));
// ==================================================================
//
// Overrides API Developer
//
// ------------------------------------------------------------------
/**
* @ var array determines what are the phpdoc comment tags that will
* override the Defaults here with their values
*/
public static $fromComments = array (
/**
* use PHPDoc comments such as the following
* `
*
* @ cache no - cache , must - revalidate ` to set the Cache - Control header
* for a specific api method
*/
'cache' => 'headerCacheControl' ,
/**
* use PHPDoc comments such as the following
* `
*
* @ expires 50 ` to set the Expires header
* for a specific api method
*/
'expires' => 'headerExpires' ,
/**
* use PHPDoc comments such as the following
* `
*
* @ throttle 300 `
* to set the bandwidth throttling for 300 milliseconds
* for a specific api method
*/
'throttle' => 'throttle' ,
/**
* enable or disable smart auto routing from method comments
* this one is hardwired so cant be turned off
* it is placed here just for documentation purpose
*/
'smart-auto-routing' => 'smartAutoRouting' ,
);
// ==================================================================
//
// Util
//
// ------------------------------------------------------------------
/**
* Use this method to set value to a static properly of Defaults when
* you want to make sure only proper values are taken in with the help of
* validation
*
* @ static
*
* @ param string $name name of the static property
* @ param mixed $value value to set the property to
*
* @ return bool
*/
public static function setProperty ( $name , $value )
{
}
}
class EventDispatcher
{
protected static $_waitList = array ();
public static $self ;
protected $events = array ();
public function __construct ()
{
}
public static function __callStatic ( $eventName , $params )
{
}
public function __call ( $eventName , $params )
{
}
public static function addListener ( $eventName , \Closure $callback )
{
}
public function on ( array $eventHandlers )
{
}
/**
* Fire an event to notify all listeners
*
* @ param string $eventName name of the event
* @ param array $params event related data
*/
protected function dispatch ( $eventName , array $params = array ())
{
}
}
/**
* Interface iProvideMultiVersionApi
* @ package Luracast\Restler
*
*
*/
interface iProvideMultiVersionApi
{
/**
* Maximum api version supported by the api class
* @ return int
*/
public static function __getMaximumSupportedVersion ();
}
/**
* Class Explorer
*
* @ package Luracast\Restler
*
* @ access hybrid
* @ version 3.0 . 0 rc6
*/
class Explorer implements \Luracast\Restler\iProvideMultiVersionApi
{
const SWAGGER = '2.0' ;
/**
* @ var array http schemes supported . http or https or both http and https
*/
public static $schemes = array ();
/**
* @ var bool should protected resources be shown to unauthenticated users ?
*/
public static $hideProtected = true ;
/**
* @ var bool should we use format as extension ?
*/
public static $useFormatAsExtension = true ;
/*
* @ var bool can we accept scalar values ( string , int , float etc ) as the request body ?
*/
public static $allowScalarValueOnRequestBody = false ;
/**
* @ var array all http methods specified here will be excluded from
* documentation
*/
public static $excludedHttpMethods = array ( 'OPTIONS' );
/**
* @ var array all paths beginning with any of the following will be excluded
* from documentation
*/
public static $excludedPaths = array ();
/**
* @ var bool
*/
public static $placeFormatExtensionBeforeDynamicParts = true ;
/**
* @ var bool should we group all the operations with the same url or not
*/
public static $groupOperations = false ;
/**
* @ var string class that holds metadata as static properties
*/
public static $infoClass = 'Luracast\\Restler\\ExplorerInfo' ;
/**
* Injected at runtime
*
* @ var Restler instance of restler
*/
public $restler ;
/**
* @ var string when format is not used as the extension this property is
* used to set the extension manually
*/
public $formatString = '' ;
/**
* @ var array type mapping for converting data types to JSON - Schema Draft 4
* Which is followed by swagger 1.2 spec
*/
public static $dataTypeAlias = array (
//'string' => 'string',
'int' => 'integer' ,
'number' => 'number' ,
'float' => array ( 'number' , 'float' ),
'bool' => 'boolean' ,
//'boolean' => 'boolean',
//'NULL' => 'null',
'array' => 'array' ,
//'object' => 'object',
'stdClass' => 'object' ,
'mixed' => 'string' ,
'date' => array ( 'string' , 'date' ),
'datetime' => array ( 'string' , 'date-time' ),
);
/**
* @ var array configurable symbols to differentiate public , hybrid and
* protected api
*/
public static $apiDescriptionSuffixSymbols = array (
0 => ' 🔓' ,
//' <i class="fa fa-lg fa-unlock-alt"></i>', //public api
1 => ' ◑' ,
//' <i class="fa fa-lg fa-adjust"></i>', //hybrid api
2 => ' 🔐' ,
);
protected $models = array ();
/**
* @ var bool | stdClass
*/
protected $_fullDataRequested = false ;
protected $crud = array ( 'POST' => 'create' , 'GET' => 'retrieve' , 'PUT' => 'update' , 'DELETE' => 'delete' , 'PATCH' => 'partial update' );
protected static $prefixes = array ( 'get' => 'retrieve' , 'index' => 'list' , 'post' => 'create' , 'put' => 'update' , 'patch' => 'modify' , 'delete' => 'remove' );
protected $_authenticated = false ;
protected $cacheName = '' ;
/**
* Serve static files for exploring
*
* Serves explorer html , css , and js files
*
* @ url GET *
*/
public function get ()
{
}
/**
* @ return stdClass
*/
public function swagger ()
{
}
/**
* Maximum api version supported by the api class
* @ return int
*/
public static function __getMaximumSupportedVersion ()
{
}
}
/**
* Class ExplorerInfo
* @ package Luracast\Restler
*
* @ version 3.0 . 0 rc6
*/
class ExplorerInfo
{
public static $title = 'Restler API Explorer' ;
public static $description = 'Live API Documentation' ;
public static $termsOfService = null ;
public static $contact = array ( 'name' => 'Restler Support' , 'url' => 'luracast.com/products/restler' , 'email' => 'arul@luracast.com' );
public static $license = array ( 'name' => 'LGPL-2.1' , 'url' => 'https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html' );
}
/**
* Interface for creating classes that perform authentication / access
* verification
*
* @ category Framework
* @ package Restler
* @ subpackage auth
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
interface iFilter
{
/**
* Access verification method .
*
* API access will be denied when this method returns false
*
* @ abstract
* @ return boolean true when api access is allowed false otherwise
*/
public function __isAllowed ();
}
/**
* Api classes or filter classes can implement this interface to know about
* authentication status
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
interface iUseAuthentication
{
/**
* This method will be called first for filter classes and api classes so
* that they can respond accordingly for filer method call and api method
* calls
*
* @ abstract
*
* @ param bool $isAuthenticated passes true when the authentication is
* done false otherwise
*
* @ return mixed
*/
public function __setAuthenticationStatus ( $isAuthenticated = false );
}
}
2024-03-19 23:38:26 +01:00
2024-02-21 18:14:29 +01:00
namespace Luracast\Restler\Filter {
/**
* Describe the purpose of this class / interface / trait
*
* @ category Framework
* @ package restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class RateLimit implements \Luracast\Restler\iFilter , \Luracast\Restler\iUseAuthentication
{
/**
* @ var \Luracast\Restler\Restler ;
*/
public $restler ;
/**
* @ var int
*/
public static $usagePerUnit = 1200 ;
/**
* @ var int
*/
public static $authenticatedUsagePerUnit = 5000 ;
/**
* @ var string
*/
public static $unit = 'hour' ;
/**
* @ var string group the current api belongs to
*/
public static $group = 'common' ;
protected static $units = array (
'second' => 1 ,
'minute' => 60 ,
'hour' => 3600 ,
// 60*60 seconds
'day' => 86400 ,
// 60*60*24 seconds
'week' => 604800 ,
// 60*60*24*7 seconds
'month' => 2592000 ,
);
/**
* @ var array all paths beginning with any of the following will be excluded
* from documentation
*/
public static $excludedPaths = array ( 'explorer' );
/**
* @ param string $unit
* @ param int $usagePerUnit
* @ param int $authenticatedUsagePerUnit set it to false to give unlimited access
*
* @ throws \InvalidArgumentException
* @ return void
*/
public static function setLimit ( $unit , $usagePerUnit , $authenticatedUsagePerUnit = null )
{
}
public function __isAllowed ()
{
}
public function __setAuthenticationStatus ( $isAuthenticated = false )
{
}
}
}
2024-03-19 23:38:26 +01:00
2024-02-21 18:14:29 +01:00
namespace Luracast\Restler {
/**
* Storing and retrieving a message or array of key value pairs for one time use using $_SESSION
*
* They are typically used in view templates when using HtmlFormat
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Flash implements \ArrayAccess
{
const SUCCESS = 'success' ;
const INFO = 'info' ;
const WARNING = 'warning' ;
const DANGER = 'danger' ;
/**
* Flash a success message to user
*
* @ param string $message
* @ param string $header
*
* @ return Flash
*/
public static function success ( $message , $header = '' )
{
}
/**
* Flash a info message to user
*
* @ param string $message
* @ param string $header
*
* @ return Flash
*/
public static function info ( $message , $header = '' )
{
}
/**
* Flash a warning message to user
*
* @ param string $message
* @ param string $header
*
* @ return Flash
*/
public static function warning ( $message , $header = '' )
{
}
/**
* Flash a error message to user
*
* @ param string $message
* @ param string $header
*
* @ return Flash
*/
public static function danger ( $message , $header = '' )
{
}
/**
* Flash a message to user
*
* @ param string $text message text
* @ param string $header
* @ param string $type
*
* @ return Flash
*/
public static function message ( $text , $header = '' , $type = \Luracast\Restler\Flash :: WARNING )
{
}
/**
* Set some data for one time use
*
* @ param array $data array of key value pairs { @ type associative }
*
* @ return Flash
*/
public static function set ( array $data )
{
}
public function __get ( $name )
{
}
public function __isset ( $name )
{
}
public function __destruct ()
{
}
/**
* Specify data which should be serialized to JSON
* @ link http :// php . net / manual / en / jsonserializable . jsonserialize . php
* @ return mixed data which can be serialized by < b > json_encode </ b > ,
* which is a value of any type other than a resource .
*/
public function jsonSerialize ()
{
}
public function offsetExists ( $offset )
{
}
public function offsetGet ( $offset )
{
}
public function offsetSet ( $offset , $value )
{
}
public function offsetUnset ( $offset )
{
}
}
}
2024-03-19 23:38:26 +01:00
2024-02-21 18:14:29 +01:00
namespace Luracast\Restler\Format {
/**
* Interface for creating custom data formats
* like xml , json , yaml , amf etc
* @ category Framework
* @ package Restler
* @ subpackage format
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
interface iFormat
{
/**
* Get MIME type => Extension mappings as an associative array
*
* @ return array list of mime strings for the format
* @ example array ( 'application/json' => 'json' );
*/
public function getMIMEMap ();
/**
* Set the selected MIME type
*
* @ param string $mime
* MIME type
*/
public function setMIME ( $mime );
/**
* Content - Type field of the HTTP header can send a charset
* parameter in the HTTP header to specify the character
* encoding of the document .
* This information is passed
* here so that Format class can encode data accordingly
* Format class may choose to ignore this and use its
* default character set .
*
* @ param string $charset
* Example utf - 8
*/
public function setCharset ( $charset );
/**
* Content - Type accepted by the Format class
*
* @ return string $charset Example utf - 8
*/
public function getCharset ();
/**
* Get selected MIME type
*/
public function getMIME ();
/**
* Set the selected file extension
*
* @ param string $extension
* file extension
*/
public function setExtension ( $extension );
/**
* Get the selected file extension
*
* @ return string file extension
*/
public function getExtension ();
/**
* Encode the given data in the format
*
* @ param array $data
* resulting data that needs to
* be encoded in the given format
* @ param boolean $humanReadable
* set to TRUE when restler
* is not running in production mode . Formatter has to
* make the encoded output more human readable
* @ return string encoded string
*/
public function encode ( $data , $humanReadable = false );
/**
* Decode the given data from the format
*
* @ param string $data
* data sent from client to
* the api in the given format .
* @ return array associative array of the parsed data
*/
public function decode ( $data );
/**
* @ return boolean is parsing the request supported ?
*/
public function isReadable ();
/**
* @ return boolean is composing response supported ?
*/
public function isWritable ();
}
/**
* Abstract class to implement common methods of iFormat
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
abstract class Format implements \Luracast\Restler\Format\iFormat
{
/**
* override in the extending class
*/
const MIME = 'text/plain' ;
/**
* override in the extending class
*/
const EXTENSION = 'txt' ;
/**
* @ var string charset encoding defaults to UTF8
*/
protected $charset = 'utf-8' ;
/**
* Injected at runtime
*
* @ var \Luracast\Restler\Restler
*/
public $restler ;
/**
* Get MIME type => Extension mappings as an associative array
*
* @ return array list of mime strings for the format
* @ example array ( 'application/json' => 'json' );
*/
public function getMIMEMap ()
{
}
/**
* Set the selected MIME type
*
* @ param string $mime
* MIME type
*/
public function setMIME ( $mime )
{
}
/**
* Content - Type field of the HTTP header can send a charset
* parameter in the HTTP header to specify the character
* encoding of the document .
* This information is passed
* here so that Format class can encode data accordingly
* Format class may choose to ignore this and use its
* default character set .
*
* @ param string $charset
* Example utf - 8
*/
public function setCharset ( $charset )
{
}
/**
* Content - Type accepted by the Format class
*
* @ return string $charset Example utf - 8
*/
public function getCharset ()
{
}
/**
* Get selected MIME type
*/
public function getMIME ()
{
}
/**
* Set the selected file extension
*
* @ param string $extension
* file extension
*/
public function setExtension ( $extension )
{
}
/**
* Get the selected file extension
*
* @ return string file extension
*/
public function getExtension ()
{
}
/**
* @ return boolean is parsing the request supported ?
*/
public function isReadable ()
{
}
/**
* @ return boolean is composing response supported ?
*/
public function isWritable ()
{
}
public function __toString ()
{
}
}
abstract class DependentFormat extends \Luracast\Restler\Format\Format
{
/**
* override in the extending class
*
* @ example symfony / yaml :*
*/
const PACKAGE_NAME = 'vendor/project:version' ;
/**
* override in the extending class
*
* fully qualified class name
*/
const EXTERNAL_CLASS = 'Namespace\\ClassName' ;
/**
* Get external class = > packagist package name as an associative array
*
* @ return array list of dependencies for the format
*/
public function getDependencyMap ()
{
}
protected function checkDependency ( $class = null )
{
}
public function __construct ()
{
}
}
/**
* AMF Binary Format for Restler Framework .
* Native format supported by Adobe Flash and Adobe AIR
*
* @ category Framework
* @ package Restler
* @ subpackage format
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class AmfFormat extends \Luracast\Restler\Format\DependentFormat
{
const MIME = 'application/x-amf' ;
const EXTENSION = 'amf' ;
const PACKAGE_NAME = 'zendframework/zendamf:dev-master' ;
const EXTERNAL_CLASS = 'ZendAmf\\Parser\\Amf3\\Deserializer' ;
public function encode ( $data , $humanReadable = false )
{
}
public function decode ( $data )
{
}
}
/**
* Interface for creating formats that accept steams for decoding
*
* @ category Framework
* @ package Restler
* @ subpackage format
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
interface iDecodeStream
{
/**
* Decode the given data stream
*
* @ param string $stream A stream resource with data
* sent from client to the api
* in the given format .
*
* @ return array associative array of the parsed data
*/
public function decodeStream ( $stream );
}
/**
* Comma Separated Value Format
*
* @ category Framework
* @ package Restler
* @ subpackage format
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class CsvFormat extends \Luracast\Restler\Format\Format implements \Luracast\Restler\Format\iDecodeStream
{
const MIME = 'text/csv' ;
const EXTENSION = 'csv' ;
public static $delimiter = ',' ;
public static $enclosure = '"' ;
public static $escape = '\\' ;
public static $haveHeaders = null ;
/**
* Encode the given data in the csv format
*
* @ param array $data
* resulting data that needs to
* be encoded in the given format
* @ param boolean $humanReadable
* set to TRUE when restler
* is not running in production mode . Formatter has to
* make the encoded output more human readable
*
* @ return string encoded string
*
* @ throws RestException 500 on unsupported data
*/
public function encode ( $data , $humanReadable = false )
{
}
protected static function putRow ( $data )
{
}
/**
* Decode the given data from the csv format
*
* @ param string $data
* data sent from client to
* the api in the given format .
*
* @ return array associative array of the parsed data
*/
public function decode ( $data )
{
}
protected static function getRow ( $data , $keys = false )
{
}
/**
* Decode the given data stream
*
* @ param string $stream A stream resource with data
* sent from client to the api
* in the given format .
*
* @ return array associative array of the parsed data
*/
public function decodeStream ( $stream )
{
}
}
/**
* Describe the purpose of this class / interface / trait
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
abstract class MultiFormat implements \Luracast\Restler\Format\iFormat
{
/**
* override in the extending class
*/
const MIME = 'text/plain,text/html' ;
/**
* override in the extending class
*/
const EXTENSION = 'txt,html' ;
/**
* @ var string charset encoding defaults to UTF8
*/
protected $charset = 'utf-8' ;
public static $mime ;
public static $extension ;
/**
* Injected at runtime
*
* @ var \Luracast\Restler\Restler
*/
public $restler ;
/**
* Get MIME type => Extension mappings as an associative array
*
* @ return array list of mime strings for the format
* @ example array ( 'application/json' => 'json' );
*/
public function getMIMEMap ()
{
}
/**
* Set the selected MIME type
*
* @ param string $mime
* MIME type
*/
public function setMIME ( $mime )
{
}
/**
* Content - Type field of the HTTP header can send a charset
* parameter in the HTTP header to specify the character
* encoding of the document .
* This information is passed
* here so that Format class can encode data accordingly
* Format class may choose to ignore this and use its
* default character set .
*
* @ param string $charset
* Example utf - 8
*/
public function setCharset ( $charset )
{
}
/**
* Content - Type accepted by the Format class
*
* @ return string $charset Example utf - 8
*/
public function getCharset ()
{
}
/**
* Get selected MIME type
*/
public function getMIME ()
{
}
/**
* Set the selected file extension
*
* @ param string $extension
* file extension
*/
public function setExtension ( $extension )
{
}
/**
* Get the selected file extension
*
* @ return string file extension
*/
public function getExtension ()
{
}
/**
* @ return boolean is parsing the request supported ?
*/
public function isReadable ()
{
}
/**
* @ return boolean is composing response supported ?
*/
public function isWritable ()
{
}
public function __toString ()
{
}
}
abstract class DependentMultiFormat extends \Luracast\Restler\Format\MultiFormat
{
/**
* Get external class = > packagist package name as an associative array
*
* @ return array list of dependencies for the format
*
* @ example return [ 'Illuminate\\View\\View' => 'illuminate/view:4.2.*' ]
*/
2024-03-19 23:38:26 +01:00
abstract public function getDependencyMap ();
2024-02-21 18:14:29 +01:00
protected function checkDependency ( $class = null )
{
}
public function __construct ()
{
}
}
/**
* Html template format
*
* @ category Framework
* @ package Restler
* @ subpackage format
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class HtmlFormat extends \Luracast\Restler\Format\DependentFormat
{
const BLADE = 'Illuminate\\View\\View' ;
const TWIG = 'Twig\\Environment' ;
const MUSTACHE = 'Mustache_Engine' ;
public static $mime = 'text/html' ;
public static $extension = 'html' ;
public static $view ;
public static $errorView = 'debug.php' ;
public static $template = 'php' ;
public static $handleSession = true ;
public static $convertResponseToArray = false ;
public static $useSmartViews = true ;
/**
* @ var null | string defaults to template named folder in Defaults :: $cacheDirectory
*/
public static $cacheDirectory = null ;
/**
* @ var array global key value pair to be supplied to the templates . All
* keys added here will be available as a variable inside the template
*/
public static $data = array ();
/**
* @ var string set it to the location of your the view files . Defaults to
* views folder which is same level as vendor directory .
*/
public static $viewPath ;
/**
* @ var array template and its custom extension key value pair
*/
public static $customTemplateExtensions = array ( 'blade' => 'blade.php' );
/**
* @ var bool used internally for error handling
*/
protected static $parseViewMetadata = true ;
/**
* @ var Restler ;
*/
public $restler ;
public function __construct ()
{
}
public function getDependencyMap ()
{
}
public static function blade ( array $data , $debug = true )
{
}
/**
* @ param array | object $data
* @ param bool $debug
*
* @ return string
* @ throws \Twig\Error\LoaderError
* @ throws \Twig\Error\RuntimeError
* @ throws \Twig\Error\SyntaxError
*/
public static function twig ( $data , $debug = true )
{
}
/**
* @ param array | object $data
* @ param bool $debug
*
* @ return string
*/
public static function handlebar ( $data , $debug = true )
{
}
/**
* @ param array | object $data
* @ param bool $debug
*
* @ return string
*/
public static function mustache ( $data , $debug = true )
{
}
/**
* @ param array | object $data
* @ param bool $debug
*
* @ return string
* @ throws RestException
*/
public static function php ( $data , $debug = true )
{
}
/**
* Encode the given data in the format
*
* @ param array $data resulting data that needs to
* be encoded in the given format
* @ param boolean $humanReadable set to TRUE when restler
* is not running in production mode .
* Formatter has to make the encoded
* output more human readable
*
* @ return string encoded string
* @ throws \Exception
*/
public function encode ( $data , $humanReadable = false )
{
}
public static function guessViewName ( $path )
{
}
public static function getViewExtension ()
{
}
public static function getViewFile ( $fullPath = false , $includeExtension = true )
{
}
/**
* Decode the given data from the format
*
* @ param string $data
* data sent from client to
* the api in the given format .
*
* @ return array associative array of the parsed data
*
* @ throws RestException
*/
public function decode ( $data )
{
}
/**
* @ return bool false as HTML format is write only
*/
public function isReadable ()
{
}
/**
* Get MIME type => Extension mappings as an associative array
*
* @ return array list of mime strings for the format
* @ example array ( 'application/json' => 'json' );
*/
public function getMIMEMap ()
{
}
/**
* Set the selected MIME type
*
* @ param string $mime MIME type
*/
public function setMIME ( $mime )
{
}
/**
* Get selected MIME type
*/
public function getMIME ()
{
}
/**
* Get the selected file extension
*
* @ return string file extension
*/
public function getExtension ()
{
}
/**
* Set the selected file extension
*
* @ param string $extension file extension
*/
public function setExtension ( $extension )
{
}
}
/**
* Javascript Object Notation Format
*
* @ category Framework
* @ package Restler
* @ subpackage format
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class JsonFormat extends \Luracast\Restler\Format\Format
{
/**
* @ var boolean | null shim for json_encode option JSON_PRETTY_PRINT set
* it to null to use smart defaults
*/
public static $prettyPrint = null ;
/**
* @ var boolean | null shim for json_encode option JSON_UNESCAPED_SLASHES
* set it to null to use smart defaults
*/
public static $unEscapedSlashes = null ;
/**
* @ var boolean | null shim for json_encode JSON_UNESCAPED_UNICODE set it
* to null to use smart defaults
*/
public static $unEscapedUnicode = null ;
/**
* @ var boolean | null shim for json_decode JSON_BIGINT_AS_STRING set it to
* null to
* use smart defaults
*/
public static $bigIntAsString = null ;
/**
* @ var boolean | null shim for json_decode JSON_NUMERIC_CHECK set it to
* null to
* use smart defaults
*/
public static $numbersAsNumbers = null ;
const MIME = 'application/json' ;
const EXTENSION = 'json' ;
public function encode ( $data , $humanReadable = false )
{
}
public function decode ( $data )
{
}
/**
* Throws an exception if an error occurred during the last JSON encoding / decoding
*
* @ return void
* @ throws \RuntimeException
*/
protected function handleJsonError ()
{
}
}
/**
* Javascript Object Notation Packaged in a method ( JSONP )
*
* @ category Framework
* @ package Restler
* @ subpackage format
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class JsFormat extends \Luracast\Restler\Format\JsonFormat
{
const MIME = 'text/javascript' ;
const EXTENSION = 'js' ;
public static $callbackMethodName = 'parseResponse' ;
public static $callbackOverrideQueryString = 'callback' ;
public static $includeHeaders = true ;
public function encode ( $data , $human_readable = false )
{
}
public function isReadable ()
{
}
}
/**
* Plist Format for Restler Framework .
* Plist is the native data exchange format for Apple iOS and Mac platform .
* Use this format to talk to mac applications and iOS devices .
* This class is capable of serving both xml plist and binary plist .
*
* @ category Framework
* @ package Restler
* @ subpackage format
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class PlistFormat extends \Luracast\Restler\Format\DependentMultiFormat
{
/**
* @ var boolean set it to true binary plist is preferred
*/
public static $compact = null ;
const MIME = 'application/xml,application/x-plist' ;
const EXTENSION = 'plist' ;
public function setMIME ( $mime )
{
}
/**
* Encode the given data in plist format
*
* @ param array $data
* resulting data that needs to
* be encoded in plist format
* @ param boolean $humanReadable
* set to true when restler
* is not running in production mode . Formatter has to
* make the encoded output more human readable
*
* @ return string encoded string
*/
public function encode ( $data , $humanReadable = false )
{
}
/**
* Decode the given data from plist format
*
* @ param string $data
* data sent from client to
* the api in the given format .
*
* @ return array associative array of the parsed data
*/
public function decode ( $data )
{
}
/**
* Get external class = > packagist package name as an associative array
*
* @ return array list of dependencies for the format
*
* @ example return [ 'Illuminate\\View\\View' => 'illuminate/view:4.2.*' ]
*/
public function getDependencyMap ()
{
}
}
/**
* Tab Separated Value Format
*
* @ category Framework
* @ package Restler
* @ subpackage format
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class TsvFormat extends \Luracast\Restler\Format\CsvFormat
{
const MIME = 'text/csv' ;
const EXTENSION = 'csv' ;
public static $delimiter = " \t " ;
public static $enclosure = '"' ;
public static $escape = '\\' ;
public static $haveHeaders = null ;
}
/**
* Support for Multi Part Form Data and File Uploads
*
* @ category Framework
* @ package Restler
* @ subpackage format
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class UploadFormat extends \Luracast\Restler\Format\Format
{
const MIME = 'multipart/form-data' ;
const EXTENSION = 'post' ;
public static $errors = array ( 0 => false , 1 => " The uploaded file exceeds the maximum allowed size " , 2 => " The uploaded file exceeds the maximum allowed size " , 3 => " The uploaded file was only partially uploaded " , 4 => " No file was uploaded " , 6 => " Missing a temporary folder " , 7 => " Failed to write file to disk " , 8 => " A PHP extension stopped the file upload " );
/**
* use it if you need to restrict uploads based on file type
* setting it as an empty array allows all file types
* default is to allow only png and jpeg images
*
* @ var array
*/
public static $allowedMimeTypes = array ( 'image/jpeg' , 'image/png' );
/**
* use it to restrict uploads based on file size
* set it to 0 to allow all sizes
* please note that it upload restrictions in the server
* takes precedence so it has to be lower than or equal to that
* default value is 1 MB ( 1024 x1024 ) bytes
* usual value for the server is 8388608
*
* @ var int
*/
public static $maximumFileSize = 1048576 ;
/**
* Your own validation function for validating each uploaded file
* it can return false or throw an exception for invalid file
* use anonymous function / closure in PHP 5.3 and above
* use function name in other cases
*
* @ var Callable
*/
public static $customValidationFunction ;
/**
* Since exceptions are triggered way before at the `get` stage
*
* @ var bool
*/
public static $suppressExceptionsAsError = false ;
protected static function checkFile ( & $file , $doMimeCheck = false , $doSizeCheck = false )
{
}
public function encode ( $data , $humanReadable = false )
{
}
public function decode ( $data )
{
}
2024-03-19 23:38:26 +01:00
public function isWritable ()
2024-02-21 18:14:29 +01:00
{
}
}
/**
* URL Encoded String Format
*
* @ category Framework
* @ package Restler
* @ subpackage format
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class UrlEncodedFormat extends \Luracast\Restler\Format\Format
{
const MIME = 'application/x-www-form-urlencoded' ;
const EXTENSION = 'post' ;
public function encode ( $data , $humanReadable = false )
{
}
public function decode ( $data )
{
}
public static function encoderTypeFix ( array $data )
{
}
public static function decoderTypeFix ( array $data )
{
}
}
/**
* XML Markup Format for Restler Framework
*
* @ category Framework
* @ package Restler
* @ subpackage format
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class XmlFormat extends \Luracast\Restler\Format\Format
{
const MIME = 'application/xml' ;
const EXTENSION = 'xml' ;
// ==================================================================
//
// Properties related to reading/parsing/decoding xml
//
// ------------------------------------------------------------------
public static $importSettingsFromXml = false ;
public static $parseAttributes = true ;
public static $parseNamespaces = true ;
public static $parseTextNodeAsProperty = true ;
// ==================================================================
//
// Properties related to writing/encoding xml
//
// ------------------------------------------------------------------
public static $useTextNodeProperty = true ;
public static $useNamespaces = true ;
public static $cdataNames = array ();
// ==================================================================
//
// Common Properties
//
// ------------------------------------------------------------------
public static $attributeNames = array ();
public static $textNodeName = 'text' ;
public static $namespaces = array ();
public static $namespacedProperties = array ();
/**
* Default name for the root node .
*
* @ var string $rootNodeName
*/
public static $rootName = 'response' ;
public static $defaultTagName = 'item' ;
/**
* When you decode an XML its structure is copied to the static vars
* we can use this function to echo them out and then copy paste inside
* our service methods
*
* @ return string PHP source code to reproduce the configuration
*/
public static function exportCurrentSettings ()
{
}
public function encode ( $data , $humanReadable = false )
{
}
public function write ( \XMLWriter $xml , $data , $parent )
{
}
public function decode ( $data )
{
}
public function read ( \SimpleXMLElement $xml , $namespaces = null )
{
}
public static function setType ( $value )
{
}
}
/**
* YAML Format for Restler Framework
*
* @ category Framework
* @ package Restler
* @ subpackage format
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class YamlFormat extends \Luracast\Restler\Format\DependentFormat
{
const MIME = 'text/plain' ;
const EXTENSION = 'yaml' ;
const PACKAGE_NAME = 'symfony/yaml:*' ;
const EXTERNAL_CLASS = 'Symfony\\Component\\Yaml\\Yaml' ;
public function encode ( $data , $humanReadable = false )
{
}
public function decode ( $data )
{
}
}
}
2024-03-19 23:38:26 +01:00
2024-02-21 18:14:29 +01:00
namespace Luracast\Restler {
/**
* Default Cache that writes / reads human readable files for caching purpose
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class HumanReadableCache implements \Luracast\Restler\iCache
{
/**
* @ var string path of the folder to hold cache files
*/
public static $cacheDir ;
public function __construct ()
{
}
/**
* store data in the cache
*
* @ param string $name
* @ param mixed $data
*
* @ throws \Exception
* @ return boolean true if successful
*/
public function set ( $name , $data )
{
}
/**
* retrieve data from the cache
*
* @ param string $name
* @ param bool $ignoreErrors
*
* @ return mixed
*/
public function get ( $name , $ignoreErrors = false )
{
}
/**
* delete data from the cache
*
* @ param string $name
* @ param bool $ignoreErrors
*
* @ return boolean true if successful
*/
public function clear ( $name , $ignoreErrors = false )
{
}
/**
* check if the given name is cached
*
* @ param string $name
*
* @ return boolean true if cached
*/
public function isCached ( $name )
{
}
}
/**
* Interface for creating authentication classes
*
* @ category Framework
* @ package Restler
* @ subpackage auth
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
interface iAuthenticate extends \Luracast\Restler\iFilter
{
/**
* @ return string string to be used with WWW - Authenticate header
* @ example Basic
* @ example Digest
* @ example OAuth
*/
public function __getWWWAuthenticateString ();
}
/**
* Interface to identify the user
*
* When the user is known we will be able to monitor , rate limit and do more
*
* @ category Framework
* @ package restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
interface iIdentifyUser
{
/**
* A way to uniquely identify the current api consumer
*
* When his user id is known it should be used otherwise ip address
* can be used
*
* @ param bool $includePlatform Should we consider user alone or should
* consider the application / platform / device
* as well for generating unique id
*
* @ return string
*/
public static function getUniqueIdentifier ( $includePlatform = false );
/**
* User identity to be used for caching purpose
*
* When the dynamic cache service places an object in the cache , it needs to
* label it with a unique identifying string known as a cache ID . This
* method gives that identifier
*
* @ return string
*/
public static function getCacheIdentifier ();
/**
* Authentication classes should call this method
*
* @ param string $id user id as identified by the authentication classes
*
* @ return void
*/
public static function setUniqueIdentifier ( $id );
/**
* User identity for caching purpose
*
* In a role based access control system this will be based on role
*
* @ param $id
*
* @ return void
*/
public static function setCacheIdentifier ( $id );
}
/**
* Special Exception for raising API errors
* that can be used in API methods
*
* @ category Framework
* @ package Restler
* @ subpackage exception
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class RestException extends \Exception
{
/**
* HTTP status codes
*
* @ var array
*/
public static $codes = array (
100 => 'Continue' ,
101 => 'Switching Protocols' ,
200 => 'OK' ,
201 => 'Created' ,
202 => 'Accepted' ,
203 => 'Non-Authoritative Information' ,
204 => 'No Content' ,
205 => 'Reset Content' ,
206 => 'Partial Content' ,
300 => 'Multiple Choices' ,
301 => 'Moved Permanently' ,
302 => 'Found' ,
303 => 'See Other' ,
304 => 'Not Modified' ,
305 => 'Use Proxy' ,
306 => '(Unused)' ,
307 => 'Temporary Redirect' ,
400 => 'Bad Request' ,
401 => 'Unauthorized' ,
402 => 'Payment Required' ,
403 => 'Forbidden' ,
404 => 'Not Found' ,
405 => 'Method Not Allowed' ,
406 => 'Not Acceptable' ,
407 => 'Proxy Authentication Required' ,
408 => 'Request Timeout' ,
409 => 'Conflict' ,
410 => 'Gone' ,
411 => 'Length Required' ,
412 => 'Precondition Failed' ,
413 => 'Request Entity Too Large' ,
414 => 'Request-URI Too Long' ,
415 => 'Unsupported Media Type' ,
416 => 'Requested Range Not Satisfiable' ,
417 => 'Expectation Failed' ,
429 => 'Too Many Requests' ,
//still in draft but used for rate limiting
500 => 'Internal Server Error' ,
501 => 'Not Implemented' ,
502 => 'Bad Gateway' ,
503 => 'Service Unavailable' ,
504 => 'Gateway Timeout' ,
505 => 'HTTP Version Not Supported' ,
);
/**
2024-10-04 09:40:05 +02:00
* @ param int $httpStatusCode http status code
2024-02-21 18:14:29 +01:00
* @ param string | null $errorMessage error message
* @ param array $details any extra detail about the exception
* @ param Exception $previous previous exception if any
*/
public function __construct ( $httpStatusCode , $errorMessage = null , array $details = array (), \Exception $previous = null )
{
}
/**
* Get extra details about the exception
*
* @ return array details array
*/
public function getDetails ()
{
}
public function getStage ()
{
}
public function getStages ()
{
}
public function getErrorMessage ()
{
}
public function getSource ()
{
}
}
/**
* Special RestException for forcing the exception even when
* in hybrid method
*
* @ category Framework
* @ package Restler
* @ subpackage exception
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class InvalidAuthCredentials extends \Luracast\Restler\RestException
{
}
/**
* Class MemcacheCache provides a memcache based cache for Restler
*
* @ category Framework
* @ package Restler
* @ author Dave Drager < ddrager @ gmail . com >
* @ copyright 2014 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
* @ version 3.0 . 0 rc5
*/
class MemcacheCache implements \Luracast\Restler\iCache
{
/**
* The namespace that all of the cached entries will be stored under . This allows multiple APIs to run concurrently .
*
* @ var string
*/
public static $namespace ;
/**
* @ var string the memcache server hostname / IP address . For the memcache
* cache method .
*/
public static $memcacheServer = '127.0.0.1' ;
/**
* @ var int the memcache server port . For the memcache cache method .
*/
public static $memcachePort = 11211 ;
/**
* @ param string $namespace
*/
2024-03-19 23:38:26 +01:00
public function __construct ( $namespace = 'restler' )
2024-02-21 18:14:29 +01:00
{
}
/**
* store data in the cache
*
*
* @ param string $name
* @ param mixed $data
*
* @ return boolean true if successful
*/
public function set ( $name , $data )
{
}
/**
* retrieve data from the cache
*
*
* @ param string $name
* @ param bool $ignoreErrors
*
* @ throws \Exception
* @ return mixed
*/
public function get ( $name , $ignoreErrors = false )
{
}
/**
* delete data from the cache
*
*
* @ param string $name
* @ param bool $ignoreErrors
*
* @ throws \Exception
* @ return boolean true if successful
*/
public function clear ( $name , $ignoreErrors = false )
{
}
/**
* check if the given name is cached
*
*
* @ param string $name
*
* @ return boolean true if cached
*/
public function isCached ( $name )
{
}
}
/**
* Static Class to pass through content outside of web root
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class PassThrough
{
public static $mimeTypes = array ( 'js' => 'text/javascript' , 'css' => 'text/css' , 'png' => 'image/png' , 'jpg' => 'image/jpeg' , 'gif' => 'image/gif' , 'html' => 'text/html' );
/**
* Serve a file outside web root
*
* Respond with a file stored outside web accessible path
*
* @ param string $filename full path for the file to be served
* @ param bool $forceDownload should the we download instead of viewing
* @ param int $expires cache expiry in number of seconds
* @ param bool $isPublic cache control , is it public or private
*
* @ throws RestException
*
*/
public static function file ( $filename , $forceDownload = false , $expires = 0 , $isPublic = true )
{
}
}
/**
* Static class for handling redirection
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Redirect
{
/**
* Redirect to given url
*
* @ param string $url relative path or full url
* @ param array $params associative array of query parameters
* @ param array $flashData associative array of properties to be set in $_SESSION for one time use
* @ param int $status http status code to send the response with ideally 301 or 302
*
* @ return array
*/
public static function to ( $url , array $params = array (), array $flashData = array (), $status = 302 )
{
}
/**
* Redirect back to the previous page
*
* Makes use of http referrer for redirection
*
* @ return array
*/
public static function back ()
{
}
}
/**
* API Class to create Swagger Spec 1.1 compatible id and operation
* listing
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Resources implements \Luracast\Restler\iUseAuthentication , \Luracast\Restler\iProvideMultiVersionApi
{
/**
* @ var bool should protected resources be shown to unauthenticated users ?
*/
public static $hideProtected = true ;
/**
* @ var bool should we use format as extension ?
*/
public static $useFormatAsExtension = true ;
/**
* @ var bool should we include newer apis in the list ? works only when
* Defaults :: $useUrlBasedVersioning is set to true ;
*/
public static $listHigherVersions = true ;
/**
* @ var array all http methods specified here will be excluded from
* documentation
*/
public static $excludedHttpMethods = array ( 'OPTIONS' );
/**
* @ var array all paths beginning with any of the following will be excluded
* from documentation
*/
public static $excludedPaths = array ();
/**
* @ var bool
*/
public static $placeFormatExtensionBeforeDynamicParts = true ;
/**
* @ var bool should we group all the operations with the same url or not
*/
public static $groupOperations = false ;
/**
* @ var null | callable if the api methods are under access control mechanism
* you can attach a function here that returns true or false to determine
* visibility of a protected api method . this function will receive method
* info as the only parameter .
*/
public static $accessControlFunction = null ;
/**
* @ var array type mapping for converting data types to javascript / swagger
*/
public static $dataTypeAlias = array ( 'string' => 'string' , 'int' => 'int' , 'number' => 'float' , 'float' => 'float' , 'bool' => 'boolean' , 'boolean' => 'boolean' , 'NULL' => 'null' , 'array' => 'Array' , 'object' => 'Object' , 'stdClass' => 'Object' , 'mixed' => 'string' , 'DateTime' => 'Date' );
/**
* @ var array configurable symbols to differentiate public , hybrid and
* protected api
*/
public static $apiDescriptionSuffixSymbols = array (
0 => ' <i class="icon-unlock-alt icon-large"></i>' ,
//public api
1 => ' <i class="icon-adjust icon-large"></i>' ,
//hybrid api
2 => ' <i class="icon-lock icon-large"></i>' ,
);
/**
* Injected at runtime
*
* @ var Restler instance of restler
*/
public $restler ;
/**
* @ var string when format is not used as the extension this property is
* used to set the extension manually
*/
public $formatString = '' ;
protected $_models ;
protected $_bodyParam ;
/**
* @ var bool | stdClass
*/
protected $_fullDataRequested = false ;
protected $crud = array ( 'POST' => 'create' , 'GET' => 'retrieve' , 'PUT' => 'update' , 'DELETE' => 'delete' , 'PATCH' => 'partial update' );
protected static $prefixes = array ( 'get' => 'retrieve' , 'index' => 'list' , 'post' => 'create' , 'put' => 'update' , 'patch' => 'modify' , 'delete' => 'remove' );
protected $_authenticated = false ;
protected $cacheName = '' ;
public function __construct ()
{
}
/**
* This method will be called first for filter classes and api classes so
* that they can respond accordingly for filer method call and api method
* calls
*
*
* @ param bool $isAuthenticated passes true when the authentication is
* done , false otherwise
*
* @ return mixed
*/
public function __setAuthenticationStatus ( $isAuthenticated = false )
{
}
/**
* pre call for get ( $id )
*
* if cache is present , use cache
*/
public function _pre_get_json ( $id )
{
}
/**
* post call for get ( $id )
*
* create cache if in production mode
*
* @ param $responseData
*
* @ internal param string $data composed json output
*
* @ return string
*/
public function _post_get_json ( $responseData )
{
}
/**
* @ access hybrid
*
* @ param string $id
*
* @ throws RestException
* @ return null | stdClass
*
* @ url GET { id }
*/
public function get ( $id = '' )
{
}
protected function _nickname ( array $route )
{
}
protected function _noNamespace ( $className )
{
}
protected function _operationListing ( $resourcePath = '/' )
{
}
protected function _resourceListing ()
{
}
protected function _api ( $path , $description = '' )
{
}
protected function _operation ( $route , $nickname , $httpMethod = 'GET' , $summary = 'description' , $notes = 'long description' , $responseClass = 'void' )
{
}
protected function _parameter ( $param )
{
}
protected function _appendToBody ( $p )
{
}
protected function _getBody ()
{
}
protected function _model ( $className , $instance = null )
{
}
/**
* Find the data type of the given value .
*
*
* @ param mixed $o given value for finding type
*
* @ param bool $appendToModels if an object is found should we append to
* our models list ?
*
* @ return string
*
* @ access private
*/
public function getType ( $o , $appendToModels = false )
{
}
/**
* pre call for index ()
*
* if cache is present , use cache
*/
public function _pre_index_json ()
{
}
/**
* post call for index ()
*
* create cache if in production mode
*
* @ param $responseData
*
* @ internal param string $data composed json output
*
* @ return string
*/
public function _post_index_json ( $responseData )
{
}
/**
* @ access hybrid
* @ return \stdClass
*/
public function index ()
{
}
protected function _loadResource ( $url )
{
}
protected function _mapResources ( array $allRoutes , array & $map , $version = 1 )
{
}
/**
* Maximum api version supported by the api class
* @ return int
*/
public static function __getMaximumSupportedVersion ()
{
}
/**
* Verifies that the requesting user is allowed to view the docs for this API
*
* @ param $route
*
* @ return boolean True if the user should be able to view this API ' s docs
*/
protected function verifyAccess ( $route )
{
}
}
/**
* REST API Server . It is the server part of the Restler framework .
* inspired by the RestServer code from
* < http :// jacwright . com / blog / resources / RestServer . txt >
*
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*
* @ method static void onGet ( Callable $function ) fired before reading the request details
* @ method static void onRoute ( Callable $function ) fired before finding the api method
* @ method static void onNegotiate ( Callable $function ) fired before content negotiation
* @ method static void onPreAuthFilter ( Callable $function ) fired before pre auth filtering
* @ method static void onAuthenticate ( Callable $function ) fired before auth
* @ method static void onPostAuthFilter ( Callable $function ) fired before post auth filtering
* @ method static void onValidate ( Callable $function ) fired before validation
* @ method static void onCall ( Callable $function ) fired before api method call
* @ method static void onCompose ( Callable $function ) fired before composing response
* @ method static void onRespond ( Callable $function ) fired before sending response
* @ method static void onComplete ( Callable $function ) fired after sending response
* @ method static void onMessage ( Callable $function ) fired before composing error response
*
* @ method void onGet ( Callable $function ) fired before reading the request details
* @ method void onRoute ( Callable $function ) fired before finding the api method
* @ method void onNegotiate ( Callable $function ) fired before content negotiation
* @ method void onPreAuthFilter ( Callable $function ) fired before pre auth filtering
* @ method void onAuthenticate ( Callable $function ) fired before auth
* @ method void onPostAuthFilter ( Callable $function ) fired before post auth filtering
* @ method void onValidate ( Callable $function ) fired before validation
* @ method void onCall ( Callable $function ) fired before api method call
* @ method void onCompose ( Callable $function ) fired before composing response
* @ method void onRespond ( Callable $function ) fired before sending response
* @ method void onComplete ( Callable $function ) fired after sending response
* @ method void onMessage ( Callable $function ) fired before composing error response
*
* @ property bool | null _authenticated
* @ property bool _authVerified
*/
class Restler extends \Luracast\Restler\EventDispatcher
{
const VERSION = '3.1.0' ;
// ==================================================================
//
// Public variables
//
// ------------------------------------------------------------------
/**
* Reference to the last exception thrown
* @ var RestException
*/
public $exception = null ;
/**
* Used in production mode to store the routes and more
*
* @ var iCache
*/
public $cache ;
/**
* URL of the currently mapped service
*
* @ var string
*/
public $url ;
/**
* Http request method of the current request .
* Any value between [ GET , PUT , POST , DELETE ]
*
* @ var string
*/
public $requestMethod ;
/**
* Requested data format .
* Instance of the current format class
* which implements the iFormat interface
*
2024-03-19 23:38:26 +01:00
* @ var Format\iFormat
2024-02-21 18:14:29 +01:00
* @ example jsonFormat , xmlFormat , yamlFormat etc
*/
public $requestFormat ;
/**
* Response data format .
*
* Instance of the current format class
* which implements the iFormat interface
*
2024-03-19 23:38:26 +01:00
* @ var Format\iFormat
2024-02-21 18:14:29 +01:00
* @ example jsonFormat , xmlFormat , yamlFormat etc
*/
public $responseFormat ;
/**
* Http status code
*
* @ var int | null when specified it will override @ status comment
*/
public $responseCode = null ;
/**
* @ var string base url of the api service
*/
protected $baseUrl ;
/**
* @ var bool Used for waiting till verifying @ format
* before throwing content negotiation failed
*/
protected $requestFormatDiffered = false ;
/**
* method information including metadata
*
2024-03-19 23:38:26 +01:00
* @ var Data\ApiMethodInfo
2024-02-21 18:14:29 +01:00
*/
public $apiMethodInfo ;
/**
* @ var int for calculating execution time
*/
protected $startTime ;
/**
* When set to false , it will run in debug mode and parse the
* class files every time to map it to the URL
*
* @ var boolean
*/
protected $productionMode = false ;
public $refreshCache = false ;
/**
* Caching of url map is enabled or not
*
* @ var boolean
*/
protected $cached ;
/**
* @ var int
*/
protected $apiVersion = 1 ;
/**
* @ var int
*/
protected $requestedApiVersion = 1 ;
/**
* @ var int
*/
protected $apiMinimumVersion = 1 ;
/**
* @ var array
*/
protected $apiVersionMap = array ();
/**
* Associated array that maps formats to their respective format class name
*
* @ var array
*/
protected $formatMap = array ();
/**
* List of the Mime Types that can be produced as a response by this API
*
* @ var array
*/
protected $writableMimeTypes = array ();
/**
* List of the Mime Types that are supported for incoming requests by this API
*
* @ var array
*/
protected $readableMimeTypes = array ();
/**
* Associated array that maps formats to their respective format class name
*
* @ var array
*/
protected $formatOverridesMap = array ( 'extensions' => array ());
/**
* list of filter classes
*
* @ var array
*/
protected $filterClasses = array ();
/**
* instances of filter classes that are executed after authentication
*
* @ var array
*/
protected $postAuthFilterClasses = array ();
// ==================================================================
//
// Protected variables
//
// ------------------------------------------------------------------
/**
* Data sent to the service
*
* @ var array
*/
protected $requestData = array ();
/**
* list of authentication classes
*
* @ var array
*/
protected $authClasses = array ();
/**
* list of error handling classes
*
* @ var array
*/
protected $errorClasses = array ();
protected $authenticated = false ;
protected $authVerified = false ;
/**
* @ var mixed
*/
protected $responseData ;
/**
* Constructor
*
* @ param boolean $productionMode When set to false , it will run in
* debug mode and parse the class files
* every time to map it to the URL
*
* @ param bool $refreshCache will update the cache when set to true
*/
public function __construct ( $productionMode = false , $refreshCache = false )
{
}
/**
* Main function for processing the api request
* and return the response
*
* @ throws Exception when the api service class is missing
* @ throws RestException to send error response
*/
public function handle ()
{
}
/**
* read the request details
*
* Find out the following
* - baseUrl
* - url requested
* - version requested ( if url based versioning )
* - http verb / method
* - negotiate content type
* - request data
* - set defaults
*/
protected function get ()
{
}
/**
* Returns a list of the mime types ( e . g . [ " application/json " , " application/xml " ]) that the API can respond with
* @ return array
*/
public function getWritableMimeTypes ()
{
}
/**
* Returns the list of Mime Types for the request that the API can understand
* @ return array
*/
public function getReadableMimeTypes ()
{
}
/**
* Call this method and pass all the formats that should be supported by
* the API Server . Accepts multiple parameters
*
* @ param string , ... $formatName class name of the format class that
* implements iFormat
*
* @ example $restler -> setSupportedFormats ( 'JsonFormat' , 'XmlFormat' ... );
* @ throws Exception
*/
public function setSupportedFormats ( $format = null , ... $formatName )
{
}
/**
* Call this method and pass all the formats that can be used to override
* the supported formats using `@format` comment . Accepts multiple parameters
*
* @ param string , ... $formatName class name of the format class that
* implements iFormat
*
* @ example $restler -> setOverridingFormats ( 'JsonFormat' , 'XmlFormat' ... );
* @ throws Exception
*/
public function setOverridingFormats ( $format = null , ... $formatName )
{
}
/**
* Set one or more string to be considered as the base url
*
* When more than one base url is provided , restler will make
* use of $_SERVER [ 'HTTP_HOST' ] to find the right one
*
* @ param string , ... $url
*/
public function setBaseUrls ( $url , ... $otherurls )
{
}
/**
* Parses the request url and get the api path
*
* @ return string api path
*/
protected function getPath ()
{
}
/**
* Parses the request to figure out format of the request data
*
* @ throws RestException
2024-03-19 23:38:26 +01:00
* @ return Format\iFormat any class that implements iFormat
2024-02-21 18:14:29 +01:00
* @ example JsonFormat
*/
protected function getRequestFormat ()
{
}
public function getRequestStream ()
{
}
/**
* Parses the request data and returns it
*
* @ param bool $includeQueryParameters
*
* @ return array php data
*/
public function getRequestData ( $includeQueryParameters = true )
{
}
/**
* Find the api method to execute for the requested Url
*/
protected function route ()
{
}
/**
* Negotiate the response details such as
* - cross origin resource sharing
* - media type
* - charset
* - language
*
* @ throws RestException
*/
protected function negotiate ()
{
}
protected function negotiateCORS ()
{
}
// ==================================================================
//
// Protected functions
//
// ------------------------------------------------------------------
/**
* Parses the request to figure out the best format for response .
* Extension , if present , overrides the Accept header
*
* @ throws RestException
2024-03-19 23:38:26 +01:00
* @ return Format\iFormat
2024-02-21 18:14:29 +01:00
* @ example JsonFormat
*/
protected function negotiateResponseFormat ()
{
}
protected function negotiateCharset ()
{
}
protected function negotiateLanguage ()
{
}
/**
* Filer api calls before authentication
*/
protected function preAuthFilter ()
{
}
protected function authenticate ()
{
}
/**
* Filer api calls after authentication
*/
protected function postAuthFilter ()
{
}
protected function validate ()
{
}
protected function call ()
{
}
protected function compose ()
{
}
public function composeHeaders ( \Luracast\Restler\RestException $e = null )
{
}
protected function respond ()
{
}
protected function message ( \Exception $exception )
{
}
/**
* Provides backward compatibility with older versions of Restler
*
* @ param int $version restler version
*
* @ throws \OutOfRangeException
*/
public function setCompatibilityMode ( $version = 2 )
{
}
/**
* @ param int $version maximum version number supported
* by the api
* @ param int $minimum minimum version number supported
* ( optional )
*
* @ throws InvalidArgumentException
* @ return void
*/
public function setAPIVersion ( $version = 1 , $minimum = 1 )
{
}
/**
* Classes implementing iFilter interface can be added for filtering out
* the api consumers .
*
* It can be used for rate limiting based on usage from a specific ip
* address or filter by country , device etc .
*
* @ param $className
*/
public function addFilterClass ( $className )
{
}
/**
* protected methods will need at least one authentication class to be set
* in order to allow that method to be executed
*
* @ param string $className of the authentication class
* @ param string $resourcePath optional url prefix for mapping
*/
public function addAuthenticationClass ( $className , $resourcePath = null )
{
}
/**
* Add api classes through this method .
*
* All the public methods that do not start with _ ( underscore )
* will be will be exposed as the public api by default .
*
* All the protected methods that do not start with _ ( underscore )
* will exposed as protected api which will require authentication
*
* @ param string $className name of the service class
* @ param string $resourcePath optional url prefix for mapping , uses
* lowercase version of the class name when
* not specified
*
* @ return null
*
* @ throws Exception when supplied with invalid class name
*/
public function addAPIClass ( $className , $resourcePath = null )
{
}
/**
* Add class for custom error handling
*
* @ param string $className of the error handling class
*/
public function addErrorClass ( $className )
{
}
/**
* protected methods will need at least one authentication class to be set
* in order to allow that method to be executed . When multiple authentication
* classes are in use , this function provides better performance by setting
* all auth classes through a single function call .
*
* @ param array $classNames array of associative arrays containing
* the authentication class name & optional
* url prefix for mapping .
*/
public function setAuthClasses ( array $classNames )
{
}
/**
* Add multiple api classes through this method .
*
* This method provides better performance when large number
* of API classes are in use as it processes them all at once ,
* as opposed to hundreds ( or more ) addAPIClass calls .
*
*
* All the public methods that do not start with _ ( underscore )
* will be will be exposed as the public api by default .
*
* All the protected methods that do not start with _ ( underscore )
* will exposed as protected api which will require authentication
*
* @ param array $map array of associative arrays containing
* the class name & optional url prefix
* for mapping .
*
* @ return null
*
* @ throws Exception when supplied with invalid class name
*/
public function mapAPIClasses ( array $map )
{
}
/**
* Associated array that maps formats to their respective format class name
*
* @ return array
*/
public function getFormatMap ()
{
}
/**
* API version requested by the client
* @ return int
*/
public function getRequestedApiVersion ()
{
}
/**
* When false , restler will run in debug mode and parse the class files
* every time to map it to the URL
*
* @ return bool
*/
public function getProductionMode ()
{
}
/**
* Chosen API version
*
* @ return int
*/
public function getApiVersion ()
{
}
/**
* Base Url of the API Service
*
* @ return string
*
* @ example http :// localhost / restler3
* @ example http :// restler3 . com
*/
public function getBaseUrl ()
{
}
/**
* List of events that fired already
*
* @ return array
*/
public function getEvents ()
{
}
/**
* Magic method to expose some protected variables
*
* @ param string $name name of the hidden property
*
* @ return null | mixed
*/
public function __get ( $name )
{
}
/**
* Store the url map cache if needed
*/
public function __destruct ()
{
}
/**
* pre call
*
* call _pre_ { methodName ) _ { extension } if exists with the same parameters as
* the api method
*
* @ example _pre_get_json
*
*/
protected function preCall ()
{
}
/**
* post call
*
* call _post_ { methodName } _ { extension } if exists with the composed and
* serialized ( applying the repose format ) response data
*
* @ example _post_get_json
*/
protected function postCall ()
{
}
}
/**
* Router class that routes the urls to api methods along with parameters
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Routes
{
public static $prefixingParameterNames = array ( 'id' );
public static $fieldTypesByName = array ( 'email' => 'email' , 'password' => 'password' , 'phone' => 'tel' , 'mobile' => 'tel' , 'tel' => 'tel' , 'search' => 'search' , 'date' => 'date' , 'created_at' => 'datetime' , 'modified_at' => 'datetime' , 'url' => 'url' , 'link' => 'url' , 'href' => 'url' , 'website' => 'url' , 'color' => 'color' , 'colour' => 'color' );
protected static $routes = array ();
protected static $models = array ();
/**
* Route the public and protected methods of an Api class
*
* @ param string $className
* @ param string $resourcePath
* @ param int $version
*
* @ throws RestException
*/
public static function addAPIClass ( $className , $resourcePath = '' , $version = 1 )
{
}
/**
* @ access private
*/
public static function typeChar ( $type = null )
{
}
protected static function addPath ( $path , array $call , $httpMethod = 'GET' , $version = 1 )
{
}
/**
* Find the api method for the given url and http method
*
* @ param string $path Requested url path
* @ param string $httpMethod GET | POST | PUT | PATCH | DELETE etc
* @ param int $version Api Version number
* @ param array $data Data collected from the request
*
* @ throws RestException
2024-03-19 23:38:26 +01:00
* @ return Data\ApiMethodInfo
2024-02-21 18:14:29 +01:00
*/
public static function find ( $path , $httpMethod , $version = 1 , array $data = array ())
{
}
public static function findAll ( array $excludedPaths = array (), array $excludedHttpMethods = array (), $version = 1 )
{
}
public static function verifyAccess ( $route )
{
}
/**
* Populates the parameter values
*
* @ param array $call
* @ param $data
*
2024-03-19 23:38:26 +01:00
* @ return Data\ApiMethodInfo
2024-02-21 18:14:29 +01:00
*
* @ access private
*/
protected static function populate ( array $call , $data )
{
}
/**
* @ access private
*/
protected static function pathVarTypeOf ( $var )
{
}
protected static function typeMatch ( $type , $var )
{
}
protected static function parseMagic ( \ReflectionClass $class , $forResponse = true )
{
}
/**
* Get the type and associated model
*
* @ param ReflectionClass $class
* @ param array $scope
*
* @ throws RestException
* @ throws \Exception
* @ return array
*
* @ access protected
*/
protected static function getTypeAndModel ( \ReflectionClass $class , array $scope , $prefix = '' , array $rules = array ())
{
}
/**
* Import previously created routes from cache
*
* @ param array $routes
*/
public static function fromArray ( array $routes )
{
}
/**
* Export current routes for cache
*
* @ return array
*/
public static function toArray ()
{
}
public static function type ( $var )
{
}
public static function scope ( \ReflectionClass $class )
{
}
}
/**
* Scope resolution class , manages instantiation and acts as a dependency
* injection container
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Scope
{
public static $classAliases = array (
//Core
'Restler' => 'Luracast\\Restler\\Restler' ,
//Format classes
'AmfFormat' => 'Luracast\\Restler\\Format\\AmfFormat' ,
'JsFormat' => 'Luracast\\Restler\\Format\\JsFormat' ,
'JsonFormat' => 'Luracast\\Restler\\Format\\JsonFormat' ,
'HtmlFormat' => 'Luracast\\Restler\\Format\\HtmlFormat' ,
'PlistFormat' => 'Luracast\\Restler\\Format\\PlistFormat' ,
'UploadFormat' => 'Luracast\\Restler\\Format\\UploadFormat' ,
'UrlEncodedFormat' => 'Luracast\\Restler\\Format\\UrlEncodedFormat' ,
'XmlFormat' => 'Luracast\\Restler\\Format\\XmlFormat' ,
'YamlFormat' => 'Luracast\\Restler\\Format\\YamlFormat' ,
'CsvFormat' => 'Luracast\\Restler\\Format\\CsvFormat' ,
'TsvFormat' => 'Luracast\\Restler\\Format\\TsvFormat' ,
//Filter classes
'RateLimit' => 'Luracast\\Restler\\Filter\\RateLimit' ,
//UI classes
'Forms' => 'Luracast\\Restler\\UI\\Forms' ,
'Nav' => 'Luracast\\Restler\\UI\\Nav' ,
'Emmet' => 'Luracast\\Restler\\UI\\Emmet' ,
'T' => 'Luracast\\Restler\\UI\\Tags' ,
//API classes
'Resources' => 'Luracast\\Restler\\Resources' ,
'Explorer' => 'Luracast\\Restler\\Explorer\\v2\\Explorer' ,
'Explorer1' => 'Luracast\\Restler\\Explorer\\v1\\Explorer' ,
'Explorer2' => 'Luracast\\Restler\\Explorer\\v2\\Explorer' ,
//Cache classes
'HumanReadableCache' => 'Luracast\\Restler\\HumanReadableCache' ,
'ApcCache' => 'Luracast\\Restler\\ApcCache' ,
'MemcacheCache' => 'Luracast\\Restler\\MemcacheCache' ,
//Utility classes
'Object' => 'Luracast\\Restler\\Data\\Obj' ,
'Text' => 'Luracast\\Restler\\Data\\Text' ,
'Arr' => 'Luracast\\Restler\\Data\\Arr' ,
//Exception
'RestException' => 'Luracast\\Restler\\RestException' ,
);
/**
* @ var null | Callable adding a resolver function that accepts
* the class name as the parameter and returns an instance of the class
* as a singleton . Allows the use of your favourite DI container
*/
public static $resolver = null ;
public static $properties = array ();
protected static $instances = array ();
protected static $registry = array ();
/**
* @ param string $name
* @ param callable $function
* @ param bool $singleton
*/
public static function register ( $name , $function , $singleton = true )
{
}
public static function set ( $name , $instance )
{
}
public static function get ( $name )
{
}
/**
* Get fully qualified class name for the given scope
*
* @ param string $className
* @ param array $scope local scope
*
* @ return string | boolean returns the class name or false
*/
public static function resolve ( $className , array $scope )
{
}
}
}
2024-03-19 23:38:26 +01:00
2024-02-21 18:14:29 +01:00
namespace Luracast\Restler\UI {
/**
* Class Emmet
* @ package Luracast\Restler\UI
*
* @ version 3.1 . 0
*/
class Emmet
{
const DELIMITERS = '.#*>+^[=" ]{$@-#}' ;
/**
* Create the needed tag hierarchy from emmet string
*
* @ param string $string
*
* @ param array | string $data
*
* @ return array | T
*/
public static function make ( $string , $data = null )
{
}
public static function tokenize ( $string )
{
}
}
/**
* Utility class for automatically generating forms for the given http method
* and api url
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Forms implements \Luracast\Restler\iFilter
{
const FORM_KEY = 'form_key' ;
public static $filterFormRequestsOnly = false ;
public static $excludedPaths = array ();
/**
* @ var bool should we fill up the form using given data ?
*/
public static $preFill = true ;
/**
* @ var ValidationInfo
*/
public static $validationInfo = null ;
protected static $inputTypes = array ( 'hidden' , 'password' , 'button' , 'image' , 'file' , 'reset' , 'submit' , 'search' , 'checkbox' , 'radio' , 'email' , 'text' , 'color' , 'date' , 'datetime' , 'datetime-local' , 'email' , 'month' , 'number' , 'range' , 'search' , 'tel' , 'time' , 'url' , 'week' );
protected static $fileUpload = false ;
public static function setStyles ( \Luracast\Restler\UI\HtmlForm $style )
{
}
/**
* Get the form
*
* @ param string $method http method to submit the form
* @ param string $action relative path from the web root . When set to null
* it uses the current api method ' s path
* @ param bool $dataOnly if you want to render the form yourself use this
* option
* @ param string $prefix used for adjusting the spacing in front of
* form elements
* @ param string $indent used for adjusting indentation
*
* @ return array | T
*
* @ throws RestException
*/
public static function get ( $method = 'POST' , $action = null , $dataOnly = false , $prefix = '' , $indent = ' ' )
{
}
public static function style ( $name , array $metadata , $type = '' )
{
}
public static function fields ( $dataOnly = false )
{
}
/**
* @ param ValidationInfo $p
*
* @ param bool $dataOnly
*
* @ return array | T
*/
public static function field ( \Luracast\Restler\Data\ValidationInfo $p , $dataOnly = false )
{
}
protected static function guessFieldType ( \Luracast\Restler\Data\ValidationInfo $p , $type = 'type' )
{
}
/**
* Get the form key
*
* @ param string $method http method for form key
* @ param string $action relative path from the web root . When set to null
* it uses the current api method ' s path
*
* @ return string generated form key
*/
public static function key ( $method = 'POST' , $action = null )
{
}
/**
* Access verification method .
*
* API access will be denied when this method returns false
*
* @ return boolean true when api access is allowed false otherwise
*
* @ throws RestException 403 security violation
*/
public function __isAllowed ()
{
}
}
/**
* Utility class for providing preset styles for html forms
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
* @ version 3.0 . 0 rc6
*/
class FormStyles
{
public static $html = array (
'form' => 'form[role=form id=$id# name=$name# method=$method# action=$action# enctype=$enctype#]' ,
'input' => '.row>section>label{$label#}^input[id=$id# name=$name# value=$value# type=$type# required=$required# autofocus=$autofocus# placeholder=$default# accept=$accept# disabled=$disabled#]' ,
'textarea' => '.row>label{$label#}^textarea[id=$id# name=$name# required=$required# autofocus=$autofocus# placeholder=$default# rows=3 disabled=$disabled#]{$value#}' ,
'radio' => '.row>section>label{$label#}^span>label*options>input[id=$id# name=$name# value=$value# type=radio checked=$selected# required=$required# disabled=$disabled#]+{ $text#}' ,
'select' => '.row>label{$label#}^select[id=$id# name=$name# required=$required#]>option[value]+option[value=$value# selected=$selected# disabled=$disabled#]{$text#}*options' ,
'submit' => '.row>label{ }^button[id=$id# type=submit disabled=$disabled#]{$label#}' ,
'fieldset' => 'fieldset>legend{$label#}' ,
'checkbox' => '.row>label>input[id=$id# name=$name# value=$value# type=checkbox checked=$selected# required=$required# autofocus=$autofocus# accept=$accept# disabled=$disabled#]+{$label#}' ,
//------------- TYPE BASED STYLES ---------------------//
'checkbox-array' => 'fieldset>legend{$label#}+section*options>label>input[name=$name# value=$value# type=checkbox checked=$selected# required=$required# autofocus=$autofocus# accept=$accept#]+{ $text#}' ,
'select-array' => 'label{$label#}+select[name=$name# required=$required# multiple style="height: auto;background-image: none; outline: inherit;"]>option[value=$value# selected=$selected#]{$text#}*options' ,
);
public static $bootstrap3 = array (
'form' => 'form[role=form id=$id# name=$name# method=$method# action=$action# enctype=$enctype#]' ,
'input' => '.form-group.$error#>label{$label#}+input.form-control[id=$id# name=$name# value=$value# type=$type# required=$required# autofocus=$autofocus# placeholder=$default# accept=$accept# disabled=$disabled#]+small.help-block>{$message#}' ,
'textarea' => '.form-group>label{$label#}+textarea.form-control[id=$id# name=$name# required=$required# autofocus=$autofocus# placeholder=$default# rows=3 disabled=$disabled#]{$value#}+small.help-block>{$message#}' ,
'radio' => 'fieldset>legend{$label#}>.radio*options>label>input.radio[name=$name# value=$value# type=radio checked=$selected# required=$required# disabled=$disabled#]{$text#}+p.help-block>{$message#}' ,
'select' => '.form-group>label{$label#}+select.form-control[id=$id# name=$name# multiple=$multiple# required=$required#]>option[value]+option[value=$value# selected=$selected# disabled=$disabled#]{$text#}*options' ,
'submit' => 'button.btn.btn-primary[id=$id# type=submit]{$label#} disabled=$disabled#' ,
'fieldset' => 'fieldset>legend{$label#}' ,
'checkbox' => '.checkbox>label>input[id=$id# name=$name# value=$value# type=checkbox checked=$selected# required=$required# autofocus=$autofocus# disabled=$disabled#]+{$label#}^p.help-block>{$error#}' ,
//------------- TYPE BASED STYLES ---------------------//
'checkbox-array' => 'fieldset>legend{$label#}>.checkbox*options>label>input[name=$name# value=$value# type=checkbox checked=$selected# required=$required#]{$text#}' ,
'select-array' => '.form-group>label{$label#}+select.form-control[name=$name# multiple=$multiple# required=$required#] size=$options#>option[value=$value# selected=$selected#]{$text#}*options' ,
//------------- CUSTOM STYLES ---------------------//
'radio-inline' => '.form-group>label{$label# : }+label.radio-inline*options>input.radio[name=$name# value=$value# type=radio checked=$selected# required=$required#]+{$text#}' ,
);
public static $foundation5 = array (
'form' => 'form[id=$id# name=$name# method=$method# action=$action# enctype=$enctype#]' ,
'input' => 'label{$label#}+input[id=$id# name=$name# value=$value# type=$type# required=$required# autofocus=$autofocus# placeholder=$default# accept=$accept# disabled=$disabled#]' ,
'textarea' => 'label{$label#}+textarea[id=$id# name=$name# required=$required# autofocus=$autofocus# placeholder=$default# rows=3 disabled=$disabled#]{$value#}' ,
'radio' => 'label{$label# : }+label.radio-inline*options>input.radio[name=$name# value=$value# type=radio checked=$selected# required=$required# disabled=$disabled#]+{$text#}' ,
'select' => 'label{$label#}+select[id=$id# name=$name# required=$required#]>option[value]+option[value=$value# selected=$selected# disabled=$disabled#]{$text#}*options' ,
'submit' => 'button.button[id=$id# type=submit disabled=$disabled#]{$label#}' ,
'fieldset' => 'fieldset>legend{$label#}' ,
'checkbox' => 'label>input[id=$id# name=$name# value=$value# type=checkbox checked=$selected# required=$required# autofocus=$autofocus# disabled=$disabled#]+{ $label#}' ,
//------------- TYPE BASED STYLES ---------------------//
'checkbox-array' => 'fieldset>legend{$label#}+label*options>input[name=$name# value=$value# type=checkbox checked=$selected# required=$required# autofocus=$autofocus#]+{ $text#}' ,
'select-array' => 'label{$label#}+select[name=$name# required=$required# multiple style="height: auto;background-image: none; outline: inherit;"]>option[value=$value# selected=$selected#]{$text#}*options' ,
);
}
/**
* Utility class for automatically creating data to build an navigation interface
* based on available routes that are accessible by the current user
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Nav
{
protected static $tree = array ();
public static $root = 'home' ;
/**
* @ var array all paths beginning with any of the following will be excluded
* from documentation . if an empty string is given it will exclude the root
*/
public static $excludedPaths = array ( '' );
/**
* @ var array prefix additional menu items with one of the following syntax
* [ $path => $text ]
* [ $path ]
* [ $path => [ 'text' => $text , 'url' => $url , 'trail' => $trail ]]
*/
public static $prepends = array ();
/**
* @ var array suffix additional menu items with one of the following syntax
* [ $path => $text ]
* [ $path ]
* [ $path => [ 'text' => $text , 'url' => $url , 'trail' => $trail ]]
*/
public static $appends = array ();
public static $addExtension = true ;
protected static $extension = '' ;
protected static $activeTrail = '' ;
protected static $url ;
public static function get ( $for = '' , $activeTrail = null )
{
}
protected static function & nested ( array & $tree , array $parts )
{
}
public static function addUrls ( array $urls )
{
}
public static function add ( $url , $label = null , $trail = null )
{
}
public static function build ( array $r )
{
}
}
/**
* Utility class for generating html tags in an object oriented way
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*
* ============================ magic properties ==============================
* @ property Tags parent parent tag
* ============================== magic methods ===============================
* @ method Tags name ( string $value ) name attribute
* @ method Tags action ( string $value ) action attribute
* @ method Tags placeholder ( string $value ) placeholder attribute
* @ method Tags value ( string $value ) value attribute
* @ method Tags required ( boolean $value ) required attribute
* @ method Tags class ( string $value ) required attribute
*
* =========================== static magic methods ============================
* @ method static Tags form () creates a html form
* @ method static Tags input () creates a html input element
* @ method static Tags button () creates a html button element
*
*/
class Tags implements \ArrayAccess , \Countable
{
public static $humanReadable = true ;
public static $initializer = null ;
protected static $instances = array ();
public $prefix = '' ;
public $indent = ' ' ;
public $tag ;
protected $attributes = array ();
protected $children = array ();
protected $_parent ;
public function __construct ( $name = null , array $children = array ())
{
}
/**
* Get Tag by id
*
* Retrieve a tag by its id attribute
*
* @ param string $id
*
* @ return Tags | null
*/
public static function byId ( $id )
{
}
/**
* @ param $name
* @ param array $children
*
* @ return Tags
*/
public static function __callStatic ( $name , array $children )
{
}
public function toString ( $prefix = '' , $indent = ' ' )
{
}
public function __toString ()
{
}
public function toArray ()
{
}
/**
* Set the id attribute of the current tag
*
* @ param string $value
*
* @ return string
*/
public function id ( $value )
{
}
public function __get ( $name )
{
}
public function __set ( $name , $value )
{
}
public function __isset ( $name )
{
}
/**
* @ param $attribute
* @ param $value
*
* @ return Tags
*/
public function __call ( $attribute , $value )
{
}
public function offsetGet ( $index )
{
}
public function offsetExists ( $index )
{
}
public function offsetSet ( $index , $value )
{
}
public function offsetUnset ( $index )
{
}
public function getContents ()
{
}
public function count ()
{
}
}
}
2024-03-19 23:38:26 +01:00
2024-02-21 18:14:29 +01:00
namespace Luracast\Restler {
/**
* Information gathered about the api user is kept here using static methods
* and properties for other classes to make use of them .
* Typically Authentication classes populate them
*
* @ category Framework
* @ package restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class User implements \Luracast\Restler\iIdentifyUser
{
public static $id = null ;
public static $cacheId = null ;
public static $ip ;
public static $browser = '' ;
public static $platform = '' ;
public static function init ()
{
}
public static function getUniqueIdentifier ( $includePlatform = false )
{
}
public static function getIpAddress ( $ignoreProxies = false )
{
}
/**
* Authentication classes should call this method
*
* @ param string $id user id as identified by the authentication classes
*
* @ return void
*/
public static function setUniqueIdentifier ( $id )
{
}
/**
* User identity to be used for caching purpose
*
* When the dynamic cache service places an object in the cache , it needs to
* label it with a unique identifying string known as a cache ID . This
* method gives that identifier
*
* @ return string
*/
public static function getCacheIdentifier ()
{
}
/**
* User identity for caching purpose
*
* In a role based access control system this will be based on role
*
* @ param $id
*
* @ return void
*/
public static function setCacheIdentifier ( $id )
{
}
}
/**
* Describe the purpose of this class / interface / trait
*
* @ category Framework
* @ package Restler
* @ author R . Arul Kumaran < arul @ luracast . com >
* @ copyright 2010 Luracast
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link http :// luracast . com / products / restler /
*
*/
class Util
{
/**
* @ var Restler instance injected at runtime
*/
public static $restler ;
/**
* verify if the given data type string is scalar or not
*
* @ static
*
* @ param string $type data type as string
*
* @ return bool true or false
*/
public static function isObjectOrArray ( $type )
{
}
/**
* Get the value deeply nested inside an array / object
*
* Using isset () to test the presence of nested value can give a false positive
*
* This method serves that need
*
* When the deeply nested property is found its value is returned , otherwise
* false is returned .
*
* @ param array | object $from array to extract the value from
* @ param string | array $key ... pass more to go deeply inside the array
* alternatively you can pass a single array
*
* @ return null | mixed null when not found , value otherwise
*/
public static function nestedValue ( $from , $key )
{
}
public static function getResourcePath ( $className , $resourcePath = null , $prefix = '' )
{
}
/**
* Compare two strings and remove the common
* sub string from the first string and return it
*
* @ static
*
* @ param string $fromPath
* @ param string $usingPath
* @ param string $char
* optional , set it as
* blank string for char by char comparison
*
* @ return string
*/
public static function removeCommonPath ( $fromPath , $usingPath , $char = '/' )
{
}
/**
* Compare two strings and split the common
* sub string from the first string and return it as array
*
* @ static
*
* @ param string $fromPath
* @ param string $usingPath
* @ param string $char
* optional , set it as
* blank string for char by char comparison
*
* @ return array with 2 strings first is the common string and second is the remaining in $fromPath
*/
public static function splitCommonPath ( $fromPath , $usingPath , $char = '/' )
{
}
/**
* Parses the request to figure out the http request type
*
* @ static
*
* @ return string which will be one of the following
* [ GET , POST , PUT , PATCH , DELETE ]
* @ example GET
*/
public static function getRequestMethod ()
{
}
/**
* Pass any content negotiation header such as Accept ,
* Accept - Language to break it up and sort the resulting array by
* the order of negotiation .
*
* @ static
*
* @ param string $accept header value
*
* @ return array sorted by the priority
*/
public static function sortByPriority ( $accept )
{
}
public static function getShortName ( $className )
{
}
}
}
2024-03-19 23:38:26 +01:00
2024-02-21 18:14:29 +01:00
namespace {
/**
* Include function in the root namespace to include files optimized
* for the global context .
*
* @ param $path string path of php file to include into the global context .
*
* @ return mixed | bool false if the file could not be included .
*/
function Luracast_Restler_autoloaderInclude ( $path )
{
}
}
2024-03-19 23:38:26 +01:00
2024-02-21 18:14:29 +01:00
namespace {
function exceptions ()
{
}
function parse_backtrace ( $raw , $skip = 1 )
{
}
function render ( $data , $shadow = \true )
{
}
}