<commit_before><?php
/**
 * Behavior to make common password validation
 *
 * Code comments in brazilian portuguese.
 * -----
 * Behavior que efetua validações comuns em senhas
 *
 * PHP version > 5.3
 *
 * Licensed under The MIT License
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright Radig - Soluções em TI, www.radig.com.br
 * @link http://www.radig.com.br
 * @license http://www.opensource.org/licenses/mit-license.php The MIT License
 *
 * @package radig.PassValidator
 * @subpackage Model.Behavior
 */

App::uses('Security', 'Utility');
App::uses('Set', 'Utility');

class PassValidatorBehavior extends ModelBehavior {

	/**
	 * Referência para o modelo ligado ao behavior
	 *
	 * @var Model
	 */
	protected $model;

	/**
	 * Configuração do behavior
	 * Mescla configurações padrões com as fornecidas pelo usuário
	 *
	 * @see ModelBehavior::setup()
	 */
	public function setup(Model $model, $config = array()) {
		$this->model = $model;

		$this->settings = array(
			'fields' => array(
				'password' => 'password',
				'confirm' => '<PASSWORD>'
			),
			'preConditions' => array(),
			'haveConfirm' => true,
			'minLength' => 4,
			'minAlpha' => 0,
			'minNumbers' => 0,
			'minSpecialChars' => 0,
			'allowEmpty' => false,
			'unsetInFailure' => true
		);

		if (!empty($config) && is_array($config)) {
			$this->settings = Set::merge($this->settings, $config);
		}

		$this->settings['errors'] = array(
			'required' => __('Campo obrigatório'),
			'minLength' => __(sprintf('Insira pelo menos %d caracteres', $this->settings['minLength'])),
			'confirm' => __('A confirmação não bate com a senha'),
			'minAlpha' => __(sprintf('A senha deve ter pelo menos %d caracteres alfabeticos', $this->settings['minAlpha'])),
			'minNumbers' => __(sprintf('A senha deve ter pelo menos %d caracteres numericos', $this->settings['minNumbers'])),
			'minSpecialChars' => __(sprintf('A senha deve ter pelo menos %d caracteres especiais', $this->settings['minSpecialChars']))
		);
	}

	/**
	 * Validação é feita no callback beforeValidate()
	 *
	 * @see Cake/lib/Model/ModelBehavior::beforeValidate()
	 *
	 * @return bool $success
	 */
	public function beforeValidate(Model $model) {
		parent::beforeValidate($model);
		$this->model = $model;

		if (!empty($this->settings['preConditions']) && is_array($this->settings['preConditions'])) {
			if (!$this->evalConditions($this->settings['preConditions'])) {
				return true;<commit_msg>Correção na assinatura do callback beforeValidate<commit_after><?php
/**
 * Behavior to make common password validation
 *
 * Code comments in brazilian portuguese.
 * -----
 * Behavior que efetua validações comuns em senhas
 *
 * PHP version > 5.3
 *
 * Licensed under The MIT License
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright Radig - Soluções em TI, www.radig.com.br
 * @link http://www.radig.com.br
 * @license http://www.opensource.org/licenses/mit-license.php The MIT License
 *
 * @package radig.PassValidator
 * @subpackage Model.Behavior
 */

App::uses('Security', 'Utility');
App::uses('Set', 'Utility');

class PassValidatorBehavior extends ModelBehavior {

	/**
	 * Referência para o modelo ligado ao behavior
	 *
	 * @var Model
	 */
	protected $model;

	/**
	 * Configuração do behavior
	 * Mescla configurações padrões com as fornecidas pelo usuário
	 *
	 * @see ModelBehavior::setup()
	 */
	public function setup(Model $model, $config = array()) {
		$this->model = $model;

		$this->settings = array(
			'fields' => array(
				'password' => 'password',
				'confirm' => '<PASSWORD>'
			),
			'preConditions' => array(),
			'haveConfirm' => true,
			'minLength' => 4,
			'minAlpha' => 0,
			'minNumbers' => 0,
			'minSpecialChars' => 0,
			'allowEmpty' => false,
			'unsetInFailure' => true
		);

		if (!empty($config) && is_array($config)) {
			$this->settings = Set::merge($this->settings, $config);
		}

		$this->settings['errors'] = array(
			'required' => __('Campo obrigatório'),
			'minLength' => __(sprintf('Insira pelo menos %d caracteres', $this->settings['minLength'])),
			'confirm' => __('A confirmação não bate com a senha'),
			'minAlpha' => __(sprintf('A senha deve ter pelo menos %d caracteres alfabeticos', $this->settings['minAlpha'])),
			'minNumbers' => __(sprintf('A senha deve ter pelo menos %d caracteres numericos', $this->settings['minNumbers'])),
			'minSpecialChars' => __(sprintf('A senha deve ter pelo menos %d caracteres especiais', $this->settings['minSpecialChars']))
		);
	}

	/**
	 * Validação é feita no callback beforeValidate()
	 *
	 * @see Cake/Model/ModelBehavior::beforeValidate()
	 *
	 * @return bool $success
	 */
	public function beforeValidate(Model $model, $options = array()) {
		parent::beforeValidate($model, $options);
		$this->model = $model;

		if (!empty($this->settings['preConditions']) && is_array($this->settings['preConditions'])) {
			if (!$this->evalConditions($this->settings['preConditions'])) {
				return true;
{'fraction_non_alphanumeric': 0.16486594637855143, 'fraction_numerical': 0.0024009603841536613, 'mean_word_length': 4.1803108808290155, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 69, 'https://': 0, 'lorem ipsum': 0, 'www.': 6, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4028371', 'n_tokens_mistral': 1735, 'n_tokens_neox': 1584, 'n_words': 409}