Esempio n. 1
0
 /**
  * Custom validation rules
  * Validate the array of links
  * @param $value
  * @param $context
  * @return boolean
  */
 public static function validateLinksArray($value, $context)
 {
     $patten = '/[\\s|\\,]+/';
     // replace all delineter simbols
     $value = preg_replace($patten, '|', $value);
     // split all links in arra
     $links = preg_split('/\\|/', $value);
     foreach ($links as $link) {
         if (!Validation::url($link)) {
             return false;
         }
     }
     return true;
 }
Esempio n. 2
0
 /**
  * Default validation rules set.
  *
  * @param \Cake\Validation\Validator $validator The validator object
  * @return \Cake\Validation\Validator
  */
 public function validationDefault(Validator $validator)
 {
     $validator->allowEmpty('url')->add('url', 'checkUrl', ['rule' => function ($url, $context) {
         $plainString = strpos($url, 'javascript:') === 0 || strpos($url, 'mailto:') === 0 || strpos($url, 'tel:') === 0 || strpos($url, 'sms:') === 0 || strpos($url, '#') === 0 || strpos($url, '?') === 0 || strpos($url, '//') === 0 || strpos($url, '://') !== false;
         if ($plainString) {
             return true;
         } else {
             $full = Validation::url($url);
             $internal = str_starts_with($url, '/');
             return $full || $internal;
         }
     }, 'message' => __d('menu', 'Invalid URL. Internal links must start with "/", e.g. "/article-my-first-article{0}"', CONTENT_EXTENSION), 'provider' => 'table'])->requirePresence('title')->add('title', ['notBlank' => ['rule' => 'notBlank', 'message' => __d('menu', 'You need to provide a title.')], 'length' => ['rule' => ['minLength', 3], 'message' => __d('menu', 'Title need to be at least 3 characters long.')]])->add('activation', 'validActivation', ['rule' => function ($value, $context) {
         return in_array($value, ['auto', 'any', 'none', 'php']);
     }, 'message' => __d('menu', 'Please select an activation method.'), 'provider' => 'table'])->allowEmpty('active')->add('active', 'validPHP', ['rule' => function ($value, $context) {
         if (!empty($context['data']['activation']) && $context['data']['activation'] === 'php') {
             return strpos($value, '<?php') !== false && strpos($value, '?>') !== false;
         }
         return true;
     }, 'message' => __d('menu', 'Invalid PHP code, make sure that tags "&lt;?php" & "?&gt;" are present.')]);
     return $validator;
 }
Esempio n. 3
0
 /**
  * Checks if a URL is valid AND accessible (returns false otherwise)
  *
  * Options:
  * - allowEmpty TRUE/FALSE (TRUE: if empty => return TRUE)
  * - required TRUE/FALSE (TRUE: overrides allowEmpty)
  * - autoComplete (default: TRUE)
  * - deep (default: TRUE)
  *
  * @param array|string $url Full URL starting with http://...
  * @param array $options
  * @param array $context
  * @return bool Success
  */
 public function validateUrl($url, array $options = [], array $context = [])
 {
     if (empty($url)) {
         if (!empty($options['allowEmpty']) && empty($options['required'])) {
             return true;
         }
         return false;
     }
     if (!isset($options['autoComplete']) || $options['autoComplete'] !== false) {
         $url = $this->_autoCompleteUrl($url);
     }
     if (!isset($options['strict']) || $options['strict'] !== false) {
         $options['strict'] = true;
     }
     // validation
     if (!Validation::url($url, $options['strict']) && env('REMOTE_ADDR') && env('REMOTE_ADDR') !== '127.0.0.1') {
         return false;
     }
     // same domain?
     if (!empty($options['sameDomain']) && env('HTTP_HOST')) {
         $is = parse_url($url, PHP_URL_HOST);
         $expected = env('HTTP_HOST');
         if (mb_strtolower($is) !== mb_strtolower($expected)) {
             return false;
         }
     }
     if (isset($options['deep']) && $options['deep'] === false) {
         return true;
     }
     return $this->_validUrl($url);
 }
Esempio n. 4
0
 /**
  * testUrl method
  *
  * @return void
  */
 public function testUrl()
 {
     $this->assertTrue(Validation::url('http://www.cakephp.org'));
     $this->assertTrue(Validation::url('http://cakephp.org'));
     $this->assertTrue(Validation::url('http://www.cakephp.org/somewhere#anchor'));
     $this->assertTrue(Validation::url('http://192.168.0.1'));
     $this->assertTrue(Validation::url('https://www.cakephp.org'));
     $this->assertTrue(Validation::url('https://cakephp.org'));
     $this->assertTrue(Validation::url('https://www.cakephp.org/somewhere#anchor'));
     $this->assertTrue(Validation::url('https://192.168.0.1'));
     $this->assertTrue(Validation::url('ftps://www.cakephp.org/pub/cake'));
     $this->assertTrue(Validation::url('ftps://cakephp.org/pub/cake'));
     $this->assertTrue(Validation::url('ftps://192.168.0.1/pub/cake'));
     $this->assertTrue(Validation::url('ftp://www.cakephp.org/pub/cake'));
     $this->assertTrue(Validation::url('ftp://cakephp.org/pub/cake'));
     $this->assertTrue(Validation::url('ftp://192.168.0.1/pub/cake'));
     $this->assertTrue(Validation::url('sftp://192.168.0.1/pub/cake'));
     $this->assertTrue(Validation::url('https://my.domain.com/gizmo/app?class=MySip;proc=start'));
     $this->assertTrue(Validation::url('www.domain.tld'));
     $this->assertTrue(Validation::url('http://123456789112345678921234567893123456789412345678951234567896123.com'));
     $this->assertTrue(Validation::url('http://www.domain.com/blogs/index.php?blog=6&tempskin=_rss2'));
     $this->assertTrue(Validation::url('http://www.domain.com/blogs/parenth()eses.php'));
     $this->assertTrue(Validation::url('http://www.domain.com/index.php?get=params&amp;get2=params'));
     $this->assertTrue(Validation::url('http://www.domain.com/ndex.php?get=params&amp;get2=params#anchor'));
     $this->assertTrue(Validation::url('http://www.domain.com/real%20url%20encodeing'));
     $this->assertTrue(Validation::url('http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science)'));
     $this->assertTrue(Validation::url('http://www.cakephp.org', true));
     $this->assertTrue(Validation::url('http://example.com/~userdir/'));
     $this->assertTrue(Validation::url('http://underscore_subdomain.example.org'));
     $this->assertTrue(Validation::url('http://_jabber._tcp.gmail.com'));
     $this->assertTrue(Validation::url('http://www.domain.longttldnotallowed'));
     $this->assertFalse(Validation::url('ftps://256.168.0.1/pub/cake'));
     $this->assertFalse(Validation::url('ftp://256.168.0.1/pub/cake'));
     $this->assertFalse(Validation::url('http://w_w.domain.co_m'));
     $this->assertFalse(Validation::url('http://www.domain.12com'));
     $this->assertFalse(Validation::url('http://www.-invaliddomain.tld'));
     $this->assertFalse(Validation::url('http://www.domain.-invalidtld'));
     $this->assertFalse(Validation::url('http://this-domain-is-too-loooooong-by-icann-rules-maximum-length-is-63.com'));
     $this->assertFalse(Validation::url('http://www.underscore_domain.org'));
     $this->assertFalse(Validation::url('http://_jabber._tcp.g_mail.com'));
     $this->assertFalse(Validation::url('http://en.(wikipedia).org/'));
     $this->assertFalse(Validation::url('http://www.domain.com/fakeenco%ode'));
     $this->assertFalse(Validation::url('--.example.com'));
     $this->assertFalse(Validation::url('www.cakephp.org', true));
     $this->assertTrue(Validation::url('http://example.com/~userdir/subdir/index.html'));
     $this->assertTrue(Validation::url('http://www.zwischenraume.de'));
     $this->assertTrue(Validation::url('http://www.zwischenraume.cz'));
     $this->assertTrue(Validation::url('http://www.last.fm/music/浜崎あゆみ'), 'utf8 path failed');
     $this->assertTrue(Validation::url('http://www.electrohome.ro/images/239537750-284232-215_300[1].jpg'));
     $this->assertTrue(Validation::url('http://www.eräume.foo'));
     $this->assertTrue(Validation::url('http://äüö.eräume.foo'));
     $this->assertTrue(Validation::url('http://cakephp.org:80'));
     $this->assertTrue(Validation::url('http://cakephp.org:443'));
     $this->assertTrue(Validation::url('http://cakephp.org:2000'));
     $this->assertTrue(Validation::url('http://cakephp.org:27000'));
     $this->assertTrue(Validation::url('http://cakephp.org:65000'));
     $this->assertTrue(Validation::url('[2001:0db8::1428:57ab]'));
     $this->assertTrue(Validation::url('[::1]'));
     $this->assertTrue(Validation::url('[2001:0db8::1428:57ab]:80'));
     $this->assertTrue(Validation::url('[::1]:80'));
     $this->assertTrue(Validation::url('http://[2001:0db8::1428:57ab]'));
     $this->assertTrue(Validation::url('http://[::1]'));
     $this->assertTrue(Validation::url('http://[2001:0db8::1428:57ab]:80'));
     $this->assertTrue(Validation::url('http://[::1]:80'));
     $this->assertFalse(Validation::url('[1::2::3]'));
 }
 /**
  * Prepares this task and the package to be installed.
  *
  * @return bool True on success
  */
 protected function _init()
 {
     $this->params['source'] = str_replace('"', '', $this->params['source']);
     if (function_exists('ini_set')) {
         ini_set('max_execution_time', 300);
     } elseif (function_exists('set_time_limit')) {
         set_time_limit(300);
     }
     if (is_readable($this->params['source']) && is_dir($this->params['source'])) {
         $this->_sourceType = self::TYPE_DIR;
         return $this->_getFromDirectory();
     } elseif (is_readable($this->params['source']) && !is_dir($this->params['source'])) {
         $this->_sourceType = self::TYPE_ZIP;
         return $this->_getFromFile();
     } elseif (Validation::url($this->params['source'])) {
         $this->_sourceType = self::TYPE_URL;
         return $this->_getFromUrl();
     }
     $this->err(__d('installer', 'Unable to resolve the given source ({0}).', [$this->params['source']]));
     return false;
 }
 /**
  * Sanitize the options array
  *
  * @param array $options Array of options, keyed from default settings
  * @return array Clean options array
  */
 protected function _cleanOptions($options)
 {
     if (!isset($options['size']) || empty($options['size']) || !is_numeric($options['size'])) {
         unset($options['size']);
     } else {
         $options['size'] = min(max($options['size'], 1), 512);
     }
     if (!$options['rating'] || !in_array(mb_strtolower($options['rating']), $this->_allowedRatings)) {
         unset($options['rating']);
     }
     if (!$options['default']) {
         unset($options['default']);
     } else {
         if (!in_array($options['default'], $this->_defaultIcons) && !Validation::url($options['default'])) {
             unset($options['default']);
         }
     }
     return $options;
 }