HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: /var/www/html/appointmentbook.me/wp-content/plugins/booknetic/app/Providers/Router/RestRequest.php
<?php

namespace BookneticApp\Providers\Router;

use Exception;
use WP_REST_Request;

class RestRequest {
	const TYPE_INTEGER = 'integer';
	const TYPE_STRING = 'string';
	const TYPE_ARRAY = 'array';
	const TYPE_FLOAT = 'array';
	const TYPE_BOOL = 'bool';
	private WP_REST_Request $request;

	public function __construct( WP_REST_Request $request ) {
		$this->request = $request;
	}

	/**
	 * @throws Exception
	 */
	public function require( $key, $checkType, $errorMessage = [], $whitelist = [] ) {
		$value = self::param( $key, '', $checkType, $whitelist );

		if ( empty( $value ) ) {
			throw new Exception( $errorMessage );
		}

		return $value;
	}

	public function param( $key, $default = null, $dataType = null, $whitelist = [] ) {
		return $this->checkTypeAndGet( $key, $default, $dataType, $whitelist );
	}

	private function checkTypeAndGet( $key, $default = null, $dataType = null, $whitelist = [] ) {
		$res = $this->request->get_param( $key ) ?? $default;

		if ( ! empty( $dataType ) ) {
			switch ( $dataType ) {
				case self::TYPE_BOOL:
					$res = is_bool( $res ) ? $res : $default;
					break;
				case self::TYPE_INTEGER:
					$res = is_numeric( $res ) ? (int) $res : $default;
					break;
				case self::TYPE_STRING:
					$res = is_string( $res ) ? $res : $default;
					break;
				case self::TYPE_ARRAY:
					$res = is_array( $res ) ? $res : $default;
					break;
				case self::TYPE_FLOAT:
					$res = is_numeric( $res ) ? (float) $res : $default;
					break;
			}
		}

		if ( ! empty( $whitelist ) && ! in_array( $res, $whitelist ) && $dataType !== self::TYPE_ARRAY ) {
			return $default;
		}

		if ( ! empty( $whitelist ) && $dataType === self::TYPE_ARRAY ) {
			$res = array_intersect( $whitelist, $res );

			return array_values( $res );
		}

		return $res;
	}

	public function getRequest(): WP_REST_Request {
		return $this->request;
	}
}