Beispiel #1
0
 public function authenticate()
 {
     $record = User::model()->byLogin($this->username)->find();
     if ($record === null) {
         $this->errorCode = self::ERROR_USERNAME_INVALID;
     } elseif ($record->pass !== User::hashPass($this->password)) {
         $this->errorCode = self::ERROR_PASSWORD_INVALID;
     } else {
         if ($record->sex == '-') {
             $this->errorCode = self::ERROR_USER_DELETED;
         } else {
             if (!$record->can(User::CAN_LOGIN)) {
                 $this->errorCode = self::ERROR_USER_INACTIVE;
             } else {
                 $this->_id = $record->id;
                 $this->setState("login", $record->login);
                 $this->setState("email", $record->email);
                 $this->setState("sex", $record->sex);
                 $this->setState("ini", $record->ini);
                 $this->setState("can", $record->can);
                 $this->errorCode = self::ERROR_NONE;
             }
         }
     }
     return $this->errorCode == self::ERROR_NONE;
 }
Beispiel #2
0
 public function register()
 {
     $registerForm = $this->_createRegisterForm();
     $this->set('register_form', $registerForm);
     if ($registerForm->checkSubmitAndValidate($this->args())) {
         $username = $this->args('username');
         if (!Verify::username($username, $reason)) {
             /** @var FormField $field */
             $field = $registerForm->get('username');
             $field->error($reason);
         }
         $email = $this->args('email');
         $testUser = User::byEmail($email);
         if ($testUser->isHydrated()) {
             /** @var FormField $emailField */
             $emailField = $registerForm->get('email');
             $emailField->error("That email is already being used");
         }
         if ($this->args('pass1') != $this->args('pass2')) {
             /** @var FormField $field */
             $field = $registerForm->get('pass2');
             $field->error("Your passwords do not match");
         }
         if (!$registerForm->hasError()) {
             //woot!
             $user = new User();
             $user->set('username', $username);
             $user->set('email', $email);
             $user->set('pass_hash', User::hashPass($this->args('pass1')));
             $user->set('registered_on', date("Y-m-d H:i:s"));
             $user->save();
             //create a default queue for them
             $q = new Queue();
             $q->set("name", 'Default');
             $q->set("user_id", $user->id);
             $q->save();
             Activity::log("registered a new account on BotQueue.", $user);
             $text = Controller::byName('email')->renderView('new_user', array('user' => $user));
             $html = Controller::byName('email')->renderView('new_user_html', array('user' => $user));
             Email::queue($user, "Welcome to " . RR_PROJECT_NAME . "!", $text, $html);
             //automatically log them in.
             $token = $user->createToken();
             $token->setCookie();
             $this->forwardToURL("/");
         }
     }
 }
 public function actionReset($u, $c)
 {
     $token = RemindToken::model()->find("user_id = :user_id", ["user_id" => (int) $u]);
     if (!$token || !$token->check($c)) {
         $this->render("reset_fail");
         echo "";
         return;
     }
     $user = User::model()->findByPk($token->user_id);
     if (Yii::app()->request->isPostRequest) {
         $pass = $_POST["pass"];
         if (strlen($pass) < 8) {
             Yii::app()->user->setFlash("error", "Пароль не может быть короче 8 символов. Напрягите воображение.!");
         } elseif ($pass != $_POST["pass2"]) {
             Yii::app()->user->setFlash("error", "Пароли не совпадают, попробуйте ещё раз!");
         } else {
             /** @todo: чувак, немножко отпустит - перепиши этот кусок, некрасиво */
             $user->pass = User::hashPass($pass);
             $user->save();
             $user->pass = $pass;
             $user->login();
             $token->delete();
             Yii::app()->user->setFlash("success", "Рады видеть вас снова!");
             $this->redirect("/");
         }
     }
     $this->render("reset", ["user" => $user]);
 }
Beispiel #4
0
 public function register()
 {
     if ($this->args('submit') && $this->args('action') == 'register') {
         //validate username
         $username = $this->args('username');
         if (!Verify::username($username, $reason)) {
             $errors['username'] = $reason;
             $errorfields['username'] = '******';
         }
         //validate email
         $email = $this->args('email');
         if (!Verify::email($email)) {
             $errors['email'] = "You must supply a valid email.";
             $errorfields['email'] = 'error';
         } else {
             $testUser = User::byEmail($email);
             if ($testUser->isHydrated()) {
                 $errors['email'] = "That email is already being used.";
                 $errorfields['email'] = 'error';
             }
         }
         //check passwords
         if ($this->args('pass1') != $this->args('pass2')) {
             $errors['password'] = "******";
             $errorfields['password'] = '******';
         } else {
             if (!strlen($this->args('pass1'))) {
                 $errors['password'] = "******";
                 $errorfields['password'] = '******';
             }
         }
         //okay, we good?
         if (empty($errors)) {
             //woot!
             $user = new User();
             $user->set('username', $username);
             $user->set('email', $email);
             $user->set('pass_hash', User::hashPass($this->args('pass1')));
             $user->set('registered_on', date("Y-m-d H:i:s"));
             $user->save();
             //create them a default queue.
             $q = new Queue();
             $q->set("name", 'Default');
             $q->set("user_id", $user->id);
             $q->save();
             //todo: send a confirmation email.
             Activity::log("registered a new account on BotQueue.", $user);
             //automatically log them in.
             $token = $user->createToken();
             $token->setCookie();
             $this->forwardToUrl('/');
         } else {
             $this->set('errors', $errors);
             $this->set('errorfields', $errorfields);
             $this->setArg('username');
             $this->setArg('email');
             $this->setArg('pass1');
             $this->setArg('pass2');
         }
     }
 }