diff --git a/include/api.tickets.php b/include/api.tickets.php index 14bd9cbf877e5861465b8bb924f4038ae3f01105..1c5eaf052fbb80209d4a4a75e04647a1912e9fbf 100644 --- a/include/api.tickets.php +++ b/include/api.tickets.php @@ -53,11 +53,11 @@ class TicketApiController extends ApiController { /* Validate data - overwrites parent's validator for additional validations. */ - function validate(&$data, $format) { + function validate(&$data, $format, $strict=true) { global $ost; //Call parent to Validate the structure - if(!parent::validate($data, $format)) + if(!parent::validate($data, $format, $strict) && $strict) $this->exerr(400, 'Unexpected or invalid data received'); //Nuke attachments IF API files are not allowed. diff --git a/include/class.api.php b/include/class.api.php index 65f0a90e89abaf42ecd5fa980d0b09299b738f3a..68e20c777a8701712299ff8cf5aab482afb24fd3 100644 --- a/include/class.api.php +++ b/include/class.api.php @@ -221,7 +221,7 @@ class ApiController { $this->exerr(400, $parser->lastError()); //Validate structure of the request. - $this->validate($data, $format); + $this->validate($data, $format, false); return $data; } @@ -241,19 +241,25 @@ class ApiController { * expected. It is assumed that the functions actually implementing the * API will further validate the contents of the request */ - function validateRequestStructure($data, $structure, $prefix="") { + function validateRequestStructure($data, $structure, $prefix="", $strict=true) { + global $ost; foreach ($data as $key=>$info) { if (is_array($structure) and is_array($info)) { $search = (isset($structure[$key]) && !is_numeric($key)) ? $key : "*"; if (isset($structure[$search])) { - $this->validateRequestStructure($info, $structure[$search], "$prefix$key/"); + $this->validateRequestStructure($info, $structure[$search], "$prefix$key/", $strict); continue; } } elseif (in_array($key, $structure)) { continue; } - return $this->exerr(400, "$prefix$key: Unexpected data received"); + if ($strict) + return $this->exerr(400, "$prefix$key: Unexpected data received"); + else + $ost->logWarning('API Unexpected Data', + "$prefix$key: Unexpected data received in API request", + false); } return true; @@ -263,11 +269,12 @@ class ApiController { * Validate request. * */ - function validate(&$data, $format) { + function validate(&$data, $format, $strict=true) { return $this->validateRequestStructure( $data, - $this->getRequestStructure($format, $data) - ); + $this->getRequestStructure($format, $data), + "", + $strict); } /**