where('link', request()->header('customer')) ->first(); if ($cliente->ativo === false) { return response()->json(['message' => 'O cliente está com o status inativo.'], Response::HTTP_UNAUTHORIZED); } $credentials = request(['usuario', 'senha']); $usuario = Usuario::where('usuario', $credentials['usuario']) ->first(); if (is_null($usuario)) { return response()->json(['message' => 'Usuário e/ou senha incorreto(s).'], Response::HTTP_UNAUTHORIZED); } if ($usuario->bloqueado) { return response()->json(['message' => 'Usuário bloqueado e sem acesso ao sistema.'], Response::HTTP_UNAUTHORIZED); } if (!Hash::check($credentials['senha'], $usuario->senha)) { $configuracao = Configuracao::first(); $usuarioHistoricoAcesso = UsuarioHistoricoAcesso::where('usuario_id', $usuario->id) ->where('ativo', true) ->orderBy('created_at', 'desc') ->take($configuracao->maximo_tentativa_login - 1) ->get(); if ( $usuarioHistoricoAcesso->count() === ($configuracao->maximo_tentativa_login - 1) && $usuarioHistoricoAcesso->contains('sucesso', true) === false ) { $usuario->update(['bloqueado' => true]); } UsuarioHistoricoAcesso::create( [ 'usuario_id' => $usuario->id, 'sucesso' => false ] ); return response()->json(['message' => 'Usuário e/ou senha incorreto(s).'], Response::HTTP_UNAUTHORIZED); } UsuarioHistoricoAcesso::create( [ 'usuario_id' => $usuario->id, 'sucesso' => true, 'ativo' => false, ] ); UsuarioHistoricoAcesso::where('usuario_id', $usuario->id)->update(['ativo' => false]); $token = auth()->login($usuario); $usuario = auth()->user()->load([ 'lotacoes' => fn($q) => $q->where('ativo', true), 'lotacoes.infraestrutura.centrosCusto.setor', 'lotacoes.infraestrutura.unidade', 'lotacoes.ocupacao', ]); $lotacoes = $usuario->lotacoes->sortBy('infraestrutura.unidade.nome_fantasia')->values() ->map(function ($lotacao) { $centrosCusto = $lotacao->infraestrutura->centrosCusto->sortBy('setor.nome')->values(); return [ 'lotacao_id' => $lotacao->id, 'ocupacao_id' => $lotacao->ocupacao_id, 'ocupacao' => $lotacao->ocupacao->toArray(), 'infraestrutura' => $centrosCusto->toArray(), 'unidade_id' => $lotacao->infraestrutura->unidade->id, 'unidade_nome_fantasia' => $lotacao->infraestrutura->unidade->nome_fantasia, 'unidade_cnes' => $lotacao->infraestrutura->unidade->cnes, ]; }) ->toArray(); $usuario = $usuario->toArray(); $response = [ 'expiration' => time() + 60 * auth()->factory()->getTTL(), 'token' => $token, 'usuario' => [ 'id' => $usuario['id'], 'usuario' => $usuario['usuario'], 'bloqueado' => $usuario['bloqueado'], 'lotacoes' => $lotacoes ] ]; return response()->json($response, Response::HTTP_OK); } public function refresh() { $usuario = auth()->user(); if ($usuario->troca_senha) { return response()->json(['error' => 'Você deve alterar sua senha antes de prosseguir.'], Response::HTTP_UNAUTHORIZED); } $lotacao = Lotacao::with(['usuario', 'ocupacao', 'papeis.permissoes.funcionalidade.modulo', 'permissoes.funcionalidade.modulo']) ->where('id', request()->lotacao_id) ->where('ativo', true) ->firstOrFail(); $centroCusto = CentroCusto::with(['setor', 'salas']) ->where('infraestrutura_id', request()->centro_custo_id) ->firstOrFail(); $token = auth()->claims([ 'lotacao_id' => $lotacao->id, 'centro_custo_id' => $centroCusto->id, 'unidade_id' => $centroCusto->infraestrutura->unidade_id, 'infraestrutura_id' => $centroCusto->infraestrutura_id, ]); $permissoes = collect(); foreach ($lotacao->papeis as $papel) { foreach ($papel->permissoes as $permissao) { $permissoes->push($permissao); } } return response()->json([ 'expiration' => time() + 60 * auth()->factory()->getTTL(), 'token' => $token->refresh(), 'permissoes' => $permissoes->merge($lotacao->permissoes), ]); } public function recuperarSenha(RecuperacaoSenhaRequest $request) { $usuario = Usuario::where('email', $request->email) ->whereHas('cidadao', function ($query) use ($request) { $query->where('cpf', $request->cpf); }) ->first(); if (is_null($usuario)) { return response()->json([ 'message' => 'A informação inserida não está correta, tente novamente.' ], Response::HTTP_BAD_REQUEST); } if ($usuario) { $senha = Senha::gerar(); $params = [ 'senha' => $senha, 'troca_senha' => true, ]; $usuario->update($params); $object = new \stdClass(); $object->user = $usuario->usuario; $object->password = $senha; $object->cliente = $request->header('customer'); Email::enviar(strtolower($usuario->email), new UsuarioLogin($object)); } return response()->json([ 'message' => 'Usuário e senha enviados para o e-mail ' . $usuario->email ], Response::HTTP_OK); } }