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

View file

@ -20,6 +20,7 @@ class Base extends Queries
* *
* @param string $collection * @param string $collection
* @param string[] $allowedAttributes * @param string[] $allowedAttributes
* @throws \Exception
*/ */
public function __construct(string $collection, array $allowedAttributes) 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\Order;
use Appwrite\Utopia\Database\Validator\Query\Select; use Appwrite\Utopia\Database\Validator\Query\Select;
use Utopia\Database\Database; use Utopia\Database\Database;
use Utopia\Database\Document;
class Documents extends Queries class Document extends Queries
{ {
/** /**
* Expression constructor * Expression constructor
* *
* @param Document[] $attributes * @param array $attributes
* @throws \Exception * @throws \Exception
*/ */
public function __construct(array $attributes) public function __construct(array $attributes)
{ {
$attributes[] = new Document([ $attributes[] = new \Utopia\Database\Document([
'key' => '$id', 'key' => '$id',
'type' => Database::VAR_STRING, 'type' => Database::VAR_STRING,
'array' => false, 'array' => false,
]); ]);
$attributes[] = new Document([ $attributes[] = new \Utopia\Database\Document([
'key' => '$createdAt', 'key' => '$createdAt',
'type' => Database::VAR_DATETIME, 'type' => Database::VAR_DATETIME,
'array' => false, 'array' => false,
]); ]);
$attributes[] = new Document([ $attributes[] = new \Utopia\Database\Document([
'key' => '$updatedAt', 'key' => '$updatedAt',
'type' => Database::VAR_DATETIME, 'type' => Database::VAR_DATETIME,
'array' => false, 'array' => false,
]); ]);
$validators = [ $validators = [
new Limit(),
new Offset(),
new Cursor(),
new Filter($attributes),
new Order($attributes),
new Select($attributes), new Select($attributes),
]; ];

View file

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

View file

@ -20,7 +20,7 @@ class Select extends Base
public function __construct(array $attributes = []) public function __construct(array $attributes = [])
{ {
foreach ($attributes as $attribute) { 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 */ /* @var $query Query */
if ($query->getMethod() === Query::TYPE_SELECT) { if ($query->getMethod() !== Query::TYPE_SELECT) {
foreach ($query->getValues() as $attr) { return false;
var_dump($attr);
// todo: Do some validations
return true;
}
} }
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 false;
} }
}
return true;
}
public function getMethodType(): string public function getMethodType(): string
{ {