✏️ 正在编辑: AuthController.php
路径:
/srv/systems_dir/yuppiecred/application/controllers/AuthController.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php /** * Autenticação de usuários */ class AuthController extends Zend_Controller_Action { public function init() { $this->_helper->layout->setLayout('layout_login'); } public function loginAction() { if (Yuppie_Auth::hasIdentity()) { $this->_helper->redirector('index', 'index'); } $form = new Form_Login(); $request = $this->getRequest(); if ($request->isPost()) { if (!$form->isValid($request->getPost())) { $this->_helper->json(['alert' => "Preencha os dados corretamente!"]); } $username = addslashes(preg_replace(['/[\x00-\x1F\x7F]/u', "/\xE2\x80\x8B/"], '', strip_tags($request->getParam('usuario')))); $password = strip_tags($request->getParam('senha')); try { $this->_doAuthenticate($username, $password, $request->getParam('tipo_acesso')); } catch (Zend_Auth_Adapter_Exception $e) { $this->_helper->json(['error' => "Erro de acesso ao banco de dados"]); } catch(Zend_Db_Exception $e) { die($e->getMessage()); $this->_helper->json(['alert' => 'Falha de comunicação com o banco de dados.']); } catch (Exception $e) { $this->_helper->json(['alert' => $e->getMessage()]); } } $this->view->form = $form; } protected function _startUrl() { $scheme = "https"; if ($_SERVER['SERVER_PORT'] != '443') { $scheme = "http"; } $url = $this->_getParam('url', $scheme . "://" . $_SERVER['HTTP_HOST']. $this->getRequest()->getBaseUrl()); if (!stristr($_SERVER['HTTP_REFERER'], "auth")) { $url = $_SERVER['HTTP_REFERER']; } return $url; } /** * Authenticates (or tries to) the username/password * * @param string $username * @param string $password */ protected function _doAuthenticate($username, $password, $tipoAcesso) { $model = null; switch ($tipoAcesso) { case 1: //corretor $model = new Model_Corretor(); $result = $model->autenticar($username, $password, "vw_corretores_entrada", "Corretor", true); if( Yuppie_Auth::getIdentity() ){ Yuppie_Auth::getIdentity()->senha_atualizada = $model->estaSenhaAtualizada(); } break; case 2: //gerente $model = new Model_Gerente(); $result = $model->autenticar($username, $password, "tb_gerentes", 'Gerente Regional', true); break; case 3: //supervisor $model = new Model_GerenteRota(); $result = $model->autenticar($username, $password, "tb_gerente_rota", "Supervisor", true); break; case 4: //afiliado $model = new Model_Corretor(); $result = $model->autenticar($username, $password, "vw_afiliados", "Afiliado", true); break; case 5: //indicador $model = new Model_Corretor(); $result = $model->autenticar($username, $password, "vw_indicadores_entrada", "Indicador", true); // if( Yuppie_Auth::getIdentity() ){ // Yuppie_Auth::getIdentity()->senha_atualizada = $model->estaSenhaAtualizada(); // } break; case 0: default: $model = new Model_Usuario(); $result = $model->autenticar($username, $password, "vw_usuarios"); $logout = $model->verificarTempoRetorno(); if ($logout) { Yuppie_Auth::clearIdentity(); $this->_helper->json([ 'alert' => 'Acesso bloqueado. O tempo determinado para a pausa ainda não foi concluído.' ]); } break; } if (!$result) { $this->_helper->json([ 'alert' => 'Dados incorretos! Por favor, verifique seu usuário e senha.', 'reset' => true ]); } $dataStorage = (new Zend_Session_Namespace())->identity; $dataStorage->tipo_acesso = $tipoAcesso; $dataStorage->model = $model; $dataStorage->check_code_gauth = true; if (($result->a2f || service('config')->get()->yuppie->disabled_captcha) && $dataStorage->login != 'yuppie') { $dataStorage->check_code_gauth = false; if (empty($result->secret_gauth)) { $this->_helper->json(['qrcode_gauth' => $this->_showQrcodeGauth()]); } $this->_helper->redirector('check-code-gauth'); } $params = []; if (in_array($result->grupo, ['Administradores', 'Sistema'])) { $resource = new Model_Resource(); $results = $resource->atualizarRecursos(); if ($results && $results['inserts'] || $results['updates']) { $params['info'] = 'Houve uma atualização na lista de recursos ' . 'do sistema.'; } } $this->_storageAuthSession($result); $params['url'] = $this->_startUrl(); $this->_helper->json($params); } protected function _storageAuthSession($dataStorage) { Yuppie_Auth::writeStorage($dataStorage); $acesso = new Model_DbTable_Acesso(); $acesso->registrar($dataStorage->tipo_acesso); } protected function _showQrcodeGauth() { $g = new \Google\Authenticator\GoogleAuthenticator(); $secret = $g->generateSecret(); $dataStorage = (new Zend_Session_Namespace())->identity; if ($secret) { (new $dataStorage->model)->saveSecretGauth($secret, $dataStorage->id); $dataStorage->secret_gauth = $secret; } $url = str_replace("chart.googleapis.com", "quickchart.io", $g->getURL(Yuppie_Auth::getSiteKey(), $_SERVER['SERVER_NAME'], $secret)); return '<img src="'. $url .'" />'; } public function checkCodeGauthAction() { $dataStorage = (new Zend_Session_Namespace())->identity; Zend_Auth::getInstance()->clearIdentity(); if ($this->getRequest()->isPost()) { if (empty($this->getRequest()->getPost('token'))) { Zend_Auth::getInstance()->clearIdentity(); $this->_helper->flashMessenger(['alert' => 'Token não informado!']); $this->_helper->redirector('login'); } $code = $this->getRequest()->getParam('token'); $g = new \Google\Authenticator\GoogleAuthenticator(); if ($g->checkCode($dataStorage->secret_gauth, $code)) { $dataStorage->check_code_gauth = true; $this->_storageAuthSession($dataStorage); $this->_helper->redirector('index', 'index'); } $this->_helper->flashMessenger(['alert' => 'Falha na validação do token.']); $this->_helper->redirector('login'); } $this->_helper->json(['show_code_gauth' => true]); } public function logoutAction() { Yuppie_Auth::clearIdentity(); // Redirects back to the login screen $this->_helper->redirector('login'); } public function websocketAuthAction() { $this->_helper->viewRenderer->setNoRender(); $this->_helper->getHelper('layout')->disableLayout(); $usuario = Yuppie_Auth::getIdentity(); $notificacao = new Core_Notificacao_PushBrowser($usuario); $channels = $notificacao->getAllowedChannels(); if (count($channels)){ $status = 200; $json = [ "status" => "success", "storage" => [ "usuario" => $usuario->id, "assuntos_chamado" => $usuario->assuntos_chamado, "assuntos_proposta" => $usuario->assuntos_proposta, "assuntos_simulacao" => $usuario->assuntos_simulacao ], "channels" => json_encode($channels) ]; } else { $status = 401; $json = ["status" => "Not allowed"]; } $this->getResponse() ->setHttpResponseCode($status) ->setBody(json_encode($json)); } public function getUsuarioResetPasswordAction() { $request = $this->getRequest(); $tipoAcesso = $request->getParam('tipo'); $login = $request->getParam('login'); $modelPessoa = new Model_Pessoa(); $usuario = $modelPessoa->getUsuarioReset($tipoAcesso, $login); if ($usuario) { $this->_helper->json(['email' => $usuario['email'], 'id' => $usuario['id']]); } $this->_helper->json(['error' => 'O usuário inexistente ou não possui e-mail!']); } public function enviarLinkResetPasswordAction() { $request = $this->getRequest(); $tipo = $request->getParam('tipo'); $usuarioId = $request->getParam('usuarioId'); $modelPessoa = new Model_Pessoa(); $usuario = $modelPessoa->setarReset($tipo, $usuarioId); if (!empty($usuario['error'])) { $this->_helper->json($usuario); } try { $mail = new Core_Mail(); $assunto = 'Sistema Yuppie: Alteração de senha'; $dataAtual = Zend_Date::now()->get('dd/MM/yyyy'); $this->view->tipo_acesso = $tipo; $this->view->data_solicitacao = $dataAtual; $this->view->usuario = $usuario; $mail->setFrom('no-reply@yuppietech.com.br'); $mensagem = $this->view->render('usuario/requisicao-reset-senha.phtml'); $result = $mail->enviarMensagemHtml($usuario['nome'], $usuario['email'], $assunto, $mensagem); } catch ( Exception $e ) { $this->_helper->json(['error' => $e->getMessage()]); } if ($result['status']) { $this->_helper->json(['success' => "E-mail enviado para {$usuario['email']}. Válido até $dataAtual"]); } $this->_helper->json(['error' => 'Erro no processamento!']); } public function resetAction() { $this->_helper->layout->setLayout('layout_reset'); $request = $this->getRequest(); $tipo = $request->getParam('tipo_acesso'); $token = $request->getParam('token'); $form = new Form_Reset(); if ($request->isPost()) { if (!$form->isValid($request->getPost())) { $this->_helper->json(['error' => 'Verifique os dados inseridos, as senhas precisam ser iguais.']); } $modelPessoa = new Model_Pessoa(); $autenticacao = $modelPessoa->autenticarTokenReset($tipo, $token); if (!empty($autenticacao['alert'])) { $this->_helper->json($autenticacao); } $result = $modelPessoa->alterarSenha($tipo, $autenticacao, $request->getPost('senha')); if (!$result || $result['error']) { $this->_helper->json(['error' => $result['error']]); } if ($result) { $this->_helper->json(['success' => 'Senha alterada com sucesso.']); } } $this->view->form = $form; } }
💾 保存文件
← 返回文件管理器