public function check($id, $values, $appId, $showMeta = false) { $table = $this->tablesRepository->read($id); $validator = \Validator::make($values, $this->createValidationRules($table)); if ($validator->fails()) { throw new ValidationException($validator); } $fields = $table->fields(); $variant = $table->getVariantForCheck(isset($values['variant_id']) ? $values['variant_id'] : null); $scoring_data = ['table' => ['_id' => new ObjectID($table->getId()), 'title' => $table->title, 'description' => $table->description, 'matching_type' => $table->matching_type, 'variant' => ['_id' => new ObjectID($variant->getId()), 'title' => $variant->title, 'description' => $variant->description]], 'application' => $appId, 'applications' => $table->getApplications(), 'title' => $variant->default_title, 'description' => $variant->default_description, 'default_decision' => $variant->default_decision, 'fields' => $fields->toArray(), 'rules' => [], 'request' => $values]; $final_decision = null; $fieldsCollection = $fields->get(); /** @var \App\Models\Rule $rule */ foreach ($variant->rules()->get() as $rule) { $scoring_rule = ['_id' => new ObjectID($rule->_id), 'than' => $rule->than, 'title' => $rule->title, 'description' => $rule->description, 'conditions' => []]; $conditions_matched = true; foreach ($rule->conditions as $condition) { $fieldKey = $condition->field_key; /** @var Field $field */ $field = $fieldsCollection->filter(function ($item) use($fieldKey) { return $item->key == $fieldKey; })->first(); if (!$field) { # skip, because field may not be exists continue; } $this->checkCondition($condition, $this->prepareFieldPreset($field, $values[$condition->field_key])); if (!$condition->matched) { $conditions_matched = false; } $condition = $condition->getAttributes(); $scoring_rule['conditions'][] = $condition; } if ($table->matching_type == 'scoring') { if ($conditions_matched) { $final_decision += floatval($rule->than); } } else { if (!$final_decision and $conditions_matched) { $final_decision = $rule->than; $scoring_data['title'] = $rule->title; $scoring_data['description'] = $rule->description; } } $scoring_rule['decision'] = $conditions_matched ? $rule->than : null; $scoring_data['rules'][] = $scoring_rule; } $scoring_data['final_decision'] = $final_decision ?: $variant->default_decision; $decision = (new Decision())->fill($scoring_data)->save(); \Event::fire(new Make($decision)); $response = $decision->toConsumerArray(); if (!$showMeta) { unset($response['rules']); } return $response; }
/** * @return boolean * * @throws ValidationException * @throws NotFoundHttpException * @throws TokenNotValidException * @throws \UnexpectedValueException */ public function resetPassword() { $validator = \Validator::make($this->request->all(), ['token' => 'required', 'email' => 'required|email|max:255', 'password' => 'required|confirmed|min:' . \Config::get('auth.password.min_length')]); if ($validator->fails()) { throw new ValidationException($validator); } $credentials = $this->request->only('email', 'password', 'password_confirmation', 'token'); $attemptReset = $this->passwords->reset($credentials, function ($user, $password) { /** * @var \App\Models\User $user */ $user->password = \Hash::make($password); $user->save() && \Event::fire(new ResetPassword($user)); }); switch ($attemptReset) { case PasswordBroker::PASSWORD_RESET: return true; case PasswordBroker::INVALID_USER: throw new UserNotFoundException(); case PasswordBroker::INVALID_TOKEN: throw new TokenNotValidException(); default: throw new \UnexpectedValueException(trans($attemptReset, ['min_length' => \Config::get('auth.password.min_length')])); } }
/** * Create a new user instance after a valid registration. * * @param array $data * @return User */ public function create(array $data) { \Event::fire(new UserWasRegistered($data)); return User::create(['name' => $data['name'], 'email' => $data['email'], 'password' => bcrypt($data['password'])]); }