Skip to content
Snippets Groups Projects
Select Git revision
  • 75d84ddd1c83731b0363c2a9950b028b90bd0ea3
  • develop default protected
2 results

Validation.php

Blame
  • user avatar
    Tomáš Valenta authored
    75d84ddd
    History
    Validation.php 2.11 KiB
    <?php
    /**
    *
    * @package phpBB Extension - eparsons/restapi
    * @copyright (c) 2018 Eric Parsons
    * @license https://opensource.org/licenses/GPL-2.0 GNU General Public License v2
    *
    */
    namespace eparsons\restapi;
    
    use phpbb\request\request_interface;
    use Symfony\Component\HttpFoundation\JsonResponse;
    
    if (!defined('IN_PHPBB'))
    {
        exit();
    }
    
    class Validation
    {
        /**
        * phpBB request
        *
        * @var request_interface
        */
        private $request;
    
        /**
        * Constructor
        *
        * @param    request_interface   $request
        */
        public function __construct(request_interface   $request)
        {
            $this->request = $request;
        }
    
        /**
         * Validates requests
         * @param string $requiredRequestMethod
         * @param string $hostname
         * @return null|JsonResponse
         */
        public function ValidateRequest($requiredRequestMethod = 'GET', $hostname = null)
        {
            $error = null;
            $error = $error ?: $this->ValidateRequestMethod($requiredRequestMethod);
            return $error;
        }
    
        public function ValidateRequiredParameter($parameterName, $parameterLocation, $parameterType = null)
        {
            if (!$this->request->is_set($parameterName, $parameterLocation))
            {
                $requiredLocation = "";
                if ($parameterLocation == request_interface::GET)
                {
                    $requiredLocation = 'url query string';
                }
                else if ($parameterLocation == request_interface::POST)
                {
                    $requiredLocation = 'POST body';
                }
    
                return new ErrorResponse("INVALID_REQUEST", "Required parameter '{$parameterName}' missing from {$requiredLocation}.", 400);
            }
    
            if ($parameterType != null)
            {
                // TODO: Validate parameter type
            }
    
            return null;
        }    
    
        private function ValidateRequestMethod($requiredRequestMethod)
        {
            if ($this->request->server('REQUEST_METHOD') !== $requiredRequestMethod)
            {
                return new ErrorResponse("INVALID_REQUEST", "This api call requires using {$requiredRequestMethod} requests.", 400);
            }
    
            return null;
        }
    }