1
0
Fork 0
mirror of synced 2024-10-04 12:15:14 +13:00

Use specific document validator for select queries on get document

This commit is contained in:
Jake Barnby 2023-03-23 17:59:23 +13:00
parent 2e44434ab8
commit 7a089f8861
No known key found for this signature in database
GPG key ID: C437A8CC85B96E9C
5 changed files with 22 additions and 23 deletions

View file

@ -1,7 +1,5 @@
<?php
use Appwrite\Utopia\Database\Validator\Query\Filter;
use Appwrite\Utopia\Database\Validator\Query\Select;
use Utopia\App;
use Appwrite\Event\Delete;
use Appwrite\Extend\Exception;
@ -47,6 +45,7 @@ use Appwrite\Event\Event;
use Appwrite\Utopia\Database\Validator\Queries;
use Appwrite\Utopia\Database\Validator\Queries\Collections;
use Appwrite\Utopia\Database\Validator\Queries\Databases;
use Appwrite\Utopia\Database\Validator\Queries\Document as DocumentValidator;
use Appwrite\Utopia\Database\Validator\Queries\Documents;
use Utopia\Config\Config;
use MaxMind\Db\Reader;
@ -2821,7 +2820,7 @@ App::get('/v1/databases/:databaseId/collections/:collectionId/documents/:documen
}
// Validate queries
$queriesValidator = new Queries(new Select($collection->getAttribute('attributes')));
$queriesValidator = new DocumentValidator($collection->getAttribute('attributes'));
$validQueries = $queriesValidator->isValid($queries);
if (!$validQueries) {
throw new Exception(Exception::GENERAL_ARGUMENT_INVALID, $queriesValidator->getDescription());

View file

@ -20,6 +20,7 @@ class Base extends Queries
*
* @param string $collection
* @param string[] $allowedAttributes
* @throws \Exception
*/
public function __construct(string $collection, array $allowedAttributes)
{

View file

@ -10,40 +10,34 @@ use Appwrite\Utopia\Database\Validator\Query\Offset;
use Appwrite\Utopia\Database\Validator\Query\Order;
use Appwrite\Utopia\Database\Validator\Query\Select;
use Utopia\Database\Database;
use Utopia\Database\Document;
class Documents extends Queries
class Document extends Queries
{
/**
* Expression constructor
*
* @param Document[] $attributes
* @param array $attributes
* @throws \Exception
*/
public function __construct(array $attributes)
{
$attributes[] = new Document([
$attributes[] = new \Utopia\Database\Document([
'key' => '$id',
'type' => Database::VAR_STRING,
'array' => false,
]);
$attributes[] = new Document([
$attributes[] = new \Utopia\Database\Document([
'key' => '$createdAt',
'type' => Database::VAR_DATETIME,
'array' => false,
]);
$attributes[] = new Document([
$attributes[] = new \Utopia\Database\Document([
'key' => '$updatedAt',
'type' => Database::VAR_DATETIME,
'array' => false,
]);
$validators = [
new Limit(),
new Offset(),
new Cursor(),
new Filter($attributes),
new Order($attributes),
new Select($attributes),
];

View file

@ -39,12 +39,12 @@ class Documents extends Queries
]);
$validators = [
new Select(),
new Limit(),
new Offset(),
new Cursor(),
new Filter($attributes),
new Order($attributes),
new Select($attributes),
];
parent::__construct(...$validators);

View file

@ -20,7 +20,7 @@ class Select extends Base
public function __construct(array $attributes = [])
{
foreach ($attributes as $attribute) {
//$this->schema[$attribute->getAttribute('key')] = $attribute->getArrayCopy();
$this->schema[$attribute->getAttribute('key')] = $attribute->getArrayCopy();
}
}
@ -38,16 +38,21 @@ class Select extends Base
{
/* @var $query Query */
if ($query->getMethod() === Query::TYPE_SELECT) {
foreach ($query->getValues() as $attr) {
var_dump($attr);
// todo: Do some validations
return true;
}
if ($query->getMethod() !== Query::TYPE_SELECT) {
return false;
}
foreach ($query->getValues() as $attribute) {
if (\str_contains($attribute, '.')) {
$attribute = \explode('.', $attribute)[0];
}
if (!isset($this->schema[$attribute])) {
$this->message = 'Attribute not found in schema: ' . $attribute;
return false;
}
}
return true;
}
public function getMethodType(): string
{