public function authenticate() { // check external $external = true; $user = ExternalUser::model()->findByAttributes(array('name_usr' => $this->username)); if ($user === NULL) { // check internal $user = InternalUser::model()->findByAttributes(array('email_uin' => $this->username)); if ($user === NULL) { // no user found $this->errorCode = self::ERROR_USERNAME_INVALID; } $external = false; } if ($user) { if ($external) { if ($user->password_usr == ExternalUser::passwordHash($this->password)) { // password ok if ($user->status_usr == ExternalUser::ENABLED_ENABLED) { // account enabled $this->errorCode = self::ERROR_NONE; $this->setState('type', 'External'); $this->setState('userId', $user->id_usr); $this->setState('name', $user->name_usr); $this->setState('email', $user->email_usr); $this->setState('limitation_date', $user->limitation_date_usr); $this->setState('rights_daily', $user->rights_daily_usr); $this->setState('rights_monthly', $user->rights_monthly_usr); $this->setState('rights_clean', $user->rights_clean_usr); $user->last_login_date_usr = date('Y-m-d H:i:s'); $user->ip_usr = $_SERVER['REMOTE_ADDR']; $user->save(false); } else { $this->errorCode = 114 + $user->status_usr; if ($user->status_usr == 0) { $_POST['show_resend_activation'] = true; } } } else { $this->errorCode = self::ERROR_PASSWORD_INVALID; } } else { if ($user->password_uin == InternalUser::passwordHash($this->password)) { // password ok if ($user->enabled_uin == InternalUser::ENABLED_ENABLED) { // account enabled $this->errorCode = self::ERROR_NONE; $this->setState('type', 'Internal'); $this->setState('userId', $user->id_uin); $this->setState('name', $user->fname_uin . ' ' . $user->lname_uin); $this->setState('email', $user->email_uin); $user->last_login_date_uin = date('Y-m-d H:i:s'); $user->save(false); } else { $this->errorCode = self::ERROR_ENABLED_DISABLED; } } else { $this->errorCode = self::ERROR_PASSWORD_INVALID; } } } return !$this->errorCode; }