rhosocial /
yii2-base-models
This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | /** |
||
| 4 | * _ __ __ _____ _____ ___ ____ _____ |
||
| 5 | * | | / // // ___//_ _// || __||_ _| |
||
| 6 | * | |/ // /(__ ) / / / /| || | | | |
||
| 7 | * |___//_//____/ /_/ /_/ |_||_| |_| |
||
| 8 | * @link https://vistart.me/ |
||
| 9 | * @copyright Copyright (c) 2016 - 2017 vistart |
||
| 10 | * @license https://vistart.me/license/ |
||
| 11 | */ |
||
| 12 | |||
| 13 | namespace rhosocial\base\models\models; |
||
| 14 | |||
| 15 | use MongoDB\BSON\Binary; |
||
| 16 | use MongoDB\BSON\ObjectID; |
||
| 17 | use rhosocial\base\helpers\Number; |
||
| 18 | use rhosocial\base\helpers\IP; |
||
| 19 | use rhosocial\base\models\queries\BaseMongoEntityQuery; |
||
| 20 | use rhosocial\base\models\traits\EntityTrait; |
||
| 21 | use yii\mongodb\ActiveRecord; |
||
| 22 | |||
| 23 | /** |
||
| 24 | * Description of BaseMongoEntityModel |
||
| 25 | * |
||
| 26 | * @property string $GUID GUID value in readable format (same as $readableGUID). |
||
| 27 | * @property ObjectID $ID |
||
| 28 | * @version 1.0 |
||
| 29 | * @author vistart <[email protected]> |
||
| 30 | */ |
||
| 31 | abstract class BaseMongoEntityModel extends ActiveRecord |
||
| 32 | { |
||
| 33 | use EntityTrait; |
||
| 34 | |||
| 35 | 73 | public function getGUIDRules() |
|
| 36 | { |
||
| 37 | 73 | $rules = []; |
|
| 38 | 73 | if (is_string($this->guidAttribute) || !empty($this->guidAttribute)) { |
|
| 39 | $rules = [ |
||
| 40 | 15 | [[$this->guidAttribute], 'required',], |
|
| 41 | ]; |
||
| 42 | } |
||
| 43 | 73 | return $rules; |
|
| 44 | } |
||
| 45 | |||
| 46 | 9 | public function getGUID() |
|
| 47 | { |
||
| 48 | 9 | $guidAttribute = $this->guidAttribute; |
|
| 49 | 9 | return (!is_string($guidAttribute) || empty($guidAttribute)) ? null : $this->$guidAttribute->getData(); |
|
| 50 | } |
||
| 51 | |||
| 52 | 74 | public function setGUID($guid) |
|
| 53 | { |
||
| 54 | 74 | $guidAttribute = $this->guidAttribute; |
|
| 55 | 74 | if (!is_string($guidAttribute) || empty($guidAttribute)) { |
|
| 56 | 58 | return null; |
|
| 57 | } |
||
| 58 | 16 | if (preg_match(Number::GUID_REGEX, $guid)) { |
|
| 59 | 3 | $guid = hex2bin(str_replace(['{', '}', '-'], '', $guid)); |
|
| 60 | } |
||
| 61 | 16 | return $this->$guidAttribute = new Binary($guid, Binary::TYPE_UUID); |
|
| 62 | } |
||
| 63 | |||
| 64 | /** |
||
| 65 | * Check if the $guid existed in current database table. |
||
| 66 | * @param string|Binary $guid the GUID to be checked. |
||
| 67 | * @return boolean Whether the $guid exists or not. |
||
| 68 | */ |
||
| 69 | 3 | public static function checkGuidExists($guid) |
|
| 70 | { |
||
| 71 | 3 | if (is_string($guid)) { |
|
| 72 | 3 | if (strlen($guid) == 16) { |
|
| 73 | 3 | $binary = new Binary($guid, Binary::TYPE_UUID); |
|
| 74 | 3 | } elseif (preg_match(Number::GUID_REGEX, $guid)) { |
|
| 75 | 3 | $binary = new Binary(Number::guid_bin($guid), Binary::TYPE_UUID); |
|
| 76 | } else { |
||
| 77 | 3 | return false; |
|
| 78 | } |
||
| 79 | 3 | return static::findOne($binary) !== null; |
|
| 80 | } |
||
| 81 | 3 | if ($guid instanceof Binary) { |
|
| 82 | 3 | return static::findOne($guid) !== null; |
|
| 83 | } |
||
| 84 | 3 | return false; |
|
| 85 | } |
||
| 86 | |||
| 87 | /** |
||
| 88 | * Get the rules associated with ip attributes. |
||
| 89 | * @return array |
||
| 90 | */ |
||
| 91 | 73 | public function getIPRules() |
|
| 92 | { |
||
| 93 | 73 | $rules = []; |
|
| 94 | 73 | if ($this->enableIP & static::$ipv4) { |
|
| 95 | $rules = [ |
||
| 96 | 73 | [[$this->ipAttribute], |
|
| 97 | 73 | 'string' |
|
| 98 | ], |
||
| 99 | ]; |
||
| 100 | } |
||
| 101 | 73 | if ($this->enableIP & static::$ipv6) { |
|
| 102 | $rules = [ |
||
| 103 | 73 | [[$this->ipAttribute], |
|
| 104 | 73 | 'string' |
|
| 105 | ], |
||
| 106 | ]; |
||
| 107 | } |
||
| 108 | 73 | if ($this->enableIP & static::$ipAll) { |
|
| 109 | 73 | $rules[] = [ |
|
| 110 | 73 | [$this->ipTypeAttribute], 'in', 'range' => [IP::IPv4, IP::IPv6], |
|
| 111 | ]; |
||
| 112 | } |
||
| 113 | 73 | return $rules; |
|
| 114 | } |
||
| 115 | |||
| 116 | /** |
||
| 117 | * Get the IPv4 address. |
||
| 118 | * @return string |
||
| 119 | */ |
||
| 120 | 3 | protected function getIPv4Address() |
|
| 121 | { |
||
| 122 | 3 | return ($this->{$this->ipAttribute}); |
|
| 123 | } |
||
| 124 | |||
| 125 | /** |
||
| 126 | * Get the IPv6 address. |
||
| 127 | * @return string |
||
| 128 | */ |
||
| 129 | 3 | protected function getIPv6Address() |
|
| 130 | { |
||
| 131 | 3 | return ($this->{$this->ipAttribute}); |
|
| 132 | } |
||
| 133 | |||
| 134 | 3 | protected function setIPv4Address($ipAddress) |
|
| 135 | { |
||
| 136 | 3 | return $this->{$this->ipAttribute} = ($ipAddress); |
|
| 137 | } |
||
| 138 | |||
| 139 | 3 | protected function setIPv6Address($ipAddress) |
|
| 140 | { |
||
| 141 | 3 | return $this->{$this->ipAttribute} = ($ipAddress); |
|
| 142 | } |
||
| 143 | |||
| 144 | /** |
||
| 145 | * Initialize new entity. |
||
| 146 | */ |
||
| 147 | 74 | public function init() |
|
| 148 | { |
||
| 149 | 74 | $this->idAttribute = '_id'; |
|
| 150 | 74 | $this->idAttributeType = static::$idTypeAutoIncrement; |
|
| 151 | 74 | if ($this->skipInit) { |
|
| 152 | 15 | return; |
|
| 153 | } |
||
| 154 | 74 | $this->initEntityEvents(); |
|
| 155 | 74 | parent::init(); |
|
| 156 | 74 | } |
|
| 157 | |||
| 158 | /** |
||
| 159 | * @inheritdoc |
||
| 160 | * @return BaseMongoEntityQuery the newly created [[BaseMongoEntityQuery]] or its sub-class instance. |
||
| 161 | */ |
||
| 162 | 61 | public static function find() |
|
| 163 | { |
||
| 164 | 61 | $self = static::buildNoInitModel(); |
|
| 165 | /* @var $self static */ |
||
| 166 | 61 | if (!is_string($self->queryClass)) { |
|
| 167 | 3 | $self->queryClass = BaseMongoEntityQuery::class; |
|
| 168 | } |
||
| 169 | 61 | $queryClass = $self->queryClass; |
|
| 170 | 61 | return new $queryClass(get_called_class(), ['noInitModel' => $self]); |
|
| 171 | } |
||
| 172 | |||
| 173 | /** |
||
| 174 | * @inheritdoc |
||
| 175 | * You can override this method if enabled fields cannot meet you requirements. |
||
| 176 | * @return array |
||
| 177 | */ |
||
| 178 | 16 | public function attributes() |
|
| 179 | { |
||
| 180 | 16 | return $this->enabledFields(); |
|
| 181 | } |
||
| 182 | |||
| 183 | /** |
||
| 184 | * |
||
| 185 | * @param array $models |
||
| 186 | */ |
||
| 187 | 7 | public static function compositeGUIDs($models) { |
|
| 188 | 7 | if (empty($models)) { |
|
| 189 | 1 | return null; |
|
| 190 | } |
||
| 191 | 7 | if (!is_array($models) && $models instanceof static) { |
|
| 192 | 1 | return new Binary($models->getGUID(), Binary::TYPE_UUID); |
|
| 193 | } |
||
| 194 | 7 | if (is_string($models) && strlen($models) == 16) { |
|
| 195 | 2 | return new Binary($models, Binary::TYPE_UUID); |
|
| 196 | } |
||
| 197 | 5 | $guids = []; |
|
| 198 | 5 | foreach ($models as $model) { |
|
|
0 ignored issues
–
show
|
|||
| 199 | 5 | if ($model instanceof static || $model instanceof BaseEntityModel) { |
|
| 200 | 1 | $guids[] = new Binary($model->getGUID(), Binary::TYPE_UUID); |
|
| 201 | 5 | } elseif (is_string($model) && preg_match(Number::GUID_REGEX, $model)) { |
|
| 202 | 1 | $guids[] = new Binary(Number::guid_bin($model), Binary::TYPE_UUID); |
|
| 203 | 4 | } elseif (is_string($model) && strlen($model) == 16) { |
|
| 204 | 4 | $guids[] = new Binary($model, Binary::TYPE_UUID); |
|
| 205 | } |
||
| 206 | } |
||
| 207 | 5 | return $guids; |
|
| 208 | } |
||
| 209 | } |
||
| 210 |
There are different options of fixing this problem.
If you want to be on the safe side, you can add an additional type-check:
If you are sure that the expression is traversable, you might want to add a doc comment cast to improve IDE auto-completion and static analysis:
Mark the issue as a false-positive: Just hover the remove button, in the top-right corner of this issue for more options.