validate instead of direct get

Signed-off-by: Maxence Lange <maxence@artificial-owl.com>
alpha1
Maxence Lange 2018-12-03 10:32:51 -01:00
rodzic d16b1770fe
commit f0c9af7e23
6 zmienionych plików z 107 dodań i 25 usunięć

Wyświetl plik

@ -50,6 +50,14 @@ abstract class ACore implements JsonSerializable {
const CONTEXT_ACTIVITYSTREAMS = 'https://www.w3.org/ns/activitystreams';
const CONTEXT_SECURITY = 'https://w3id.org/security/v1';
const AS_ID = 1;
const AS_TYPE = 2;
const AS_URL = 3;
const AS_DATE = 4;
const AS_USERNAME = 5;
const AS_ACCOUNT = 6;
const AS_STRING = 7;
/** @var string */
private $urlSocial = '';
@ -900,20 +908,92 @@ abstract class ACore implements JsonSerializable {
return $this;
}
/**
* @param int $as
* @param string $k
* @param array $arr
* @param string $default
*
* @return string
*/
public function validate(int $as, string $k, array $arr, string $default = ''): string {
$value = $this->valideEntryString($as, $this->get($k, $arr, $default));
return $value;
}
/**
* @param $as
* @param $value
*
* @return string
*/
public function validateEntryString(int $as, string $value): string {
switch ($as) {
case self::AS_ID:
// TODO check if id looks valid or Exception
break;
case self::AS_TYPE:
// TODO check if type looks valid or Exception
break;
case self::AS_URL:
// TODO check if url looks valid or Exception
break;
case self::AS_DATE:
// TODO check that date is valid
break;
case self::AS_STRING:
// Clean string
break;
default:
// exception
break;
}
return $value;
}
/**
* @param int $as
* @param string $k
* @param array $arr
* @param array $default
*
* @return array
*/
public function validateArray(int $as, string $k, array $arr, array $default = []): array {
$values = $this->getArray($k, $arr, $default);
$result = [];
foreach ($values as $value) {
$result[] = $this->validateEntryString($as, $value);
}
return $result;
}
/**
* @param array $data
*/
public function import(array $data) {
$this->setId($this->get('id', $data, ''));
$this->setType($this->get('type', $data, ''));
$this->setUrl($this->get('url', $data, ''));
$this->setSummary($this->get('summary', $data, ''));
$this->setToArray($this->getArray('to', $data, []));
$this->setCcArray($this->getArray('cc', $data, []));
$this->setPublished($this->get('published', $data, ''));
$this->setActorId($this->get('actor', $data, ''));
$this->setObjectId($this->get('object', $data, ''));
$this->setId($this->validate(self::AS_ID, 'id', $data, ''));
$this->setType($this->validate(self::AS_TYPE, 'type', $data, ''));
$this->setUrl($this->validate(self::AS_URL, 'url', $data, ''));
$this->setSummary($this->validate(self::AS_STRING, 'summary', $data, ''));
$this->setToArray($this->validateArray(self::AS_ID, 'to', $data, []));
$this->setCcArray($this->validateArray(self::AS_ID, 'cc', $data, []));
$this->setPublished($this->validate(self::AS_DATE, 'published', $data, ''));
$this->setActorId($this->validate(self::AS_ID, 'actor', $data, ''));
$this->setObjectId($this->validate(self::AS_ID, 'object', $data, ''));
}

Wyświetl plik

@ -63,7 +63,7 @@ class Create extends ACore implements JsonSerializable {
*/
public function import(array $data) {
parent::import($data);
$this->setActorId($this->get('actor', $data, ''));
$this->setActorId($this->validate(ACore::AS_ID, 'actor', $data, ''));
}

Wyświetl plik

@ -63,7 +63,7 @@ class Delete extends ACore implements JsonSerializable {
*/
public function import(array $data) {
parent::import($data);
$this->setActorId($this->get('actor', $data, ''));
$this->setActorId($this->validate(ACore::AS_ID, 'actor', $data, ''));
}

Wyświetl plik

@ -200,7 +200,7 @@ class Document extends ACore implements JsonSerializable {
public function import(array $data) {
parent::import($data);
$this->setMediaType($this->get('mediaType', $data, ''));
$this->setMediaType($this->validate(ACore::AS_STRING, 'mediaType', $data, ''));
if ($this->getId() === '') {
$this->generateUniqueId('/documents/g');

Wyświetl plik

@ -199,11 +199,11 @@ class Note extends ACore implements JsonSerializable {
public function import(array $data) {
parent::import($data);
$this->setInReplyTo($this->get('inReplyTo', $data, ''));
$this->setAttributedTo($this->get('attributedTo', $data, ''));
$this->setInReplyTo($this->validate(ACore::AS_ID, 'inReplyTo', $data, ''));
$this->setAttributedTo($this->validate(ACore::AS_ID, 'attributedTo', $data, ''));
$this->setSensitive($this->getBool('sensitive', $data, false));
$this->setConversation($this->get('conversation', $data, ''));
$this->setContent($this->get('content', $data, ''));
$this->setConversation($this->validate(ACore::AS_ID, 'conversation', $data, ''));
$this->setContent($this->validate(ACore::AS_STRING, 'content', $data, ''));
$this->convertPublished();
}

Wyświetl plik

@ -417,16 +417,18 @@ class Person extends ACore implements JsonSerializable {
*/
public function import(array $data) {
parent::import($data);
$this->setPreferredUsername($this->get('preferredUsername', $data, ''))
$this->setPreferredUsername(
$this->validate(ACore::AS_USERNAME, 'preferredUsername', $data, '')
)
->setPublicKey($this->get('publicKey.publicKeyPem', $data))
->setSharedInbox($this->get('endpoints.sharedInbox', $data))
->setName($this->get('name', $data, ''))
->setAccount($this->get('account', $data, ''))
->setInbox($this->get('inbox', $data, ''))
->setOutbox($this->get('outbox', $data, ''))
->setFollowers($this->get('followers', $data, ''))
->setFollowing($this->get('following', $data, ''))
->setFeatured($this->get('featured', $data, ''));
->setSharedInbox($this->validate(ACore::AS_URL, 'endpoints.sharedInbox', $data))
->setName($this->validate(ACore::AS_USERNAME, 'name', $data, ''))
->setAccount($this->validate(ACore::AS_ACCOUNT, 'account', $data, ''))
->setInbox($this->validate(ACore::AS_URL, 'inbox', $data, ''))
->setOutbox($this->validate(ACore::AS_URL, 'outbox', $data, ''))
->setFollowers($this->validate(ACore::AS_URL, 'followers', $data, ''))
->setFollowing($this->validate(ACore::AS_URL, 'following', $data, ''))
->setFeatured($this->validate(ACore::AS_URL, 'featured', $data, ''));
$icon = new Image($this);
$icon->setUrlCloud($this->getUrlCloud());