File manager - Edit - /var/www/html/portalHomolog/app/Http/Services/Accounts/SenhaService.php
Back
<?php namespace App\Http\Services\Accounts; use App\Http\Controllers\Controller; use App\Models\User; use Illuminate\Support\Facades\Schema; use App\Models\Auth\PasswordResetToken; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Mail; use Illuminate\Support\Str; use Carbon\Carbon; use App\Mail\SenhaTemporariaMail; use Illuminate\Http\RedirectResponse; use App\Http\Requests\Accounts\RecuperacaoSenhaRequest; class SenhaService extends Controller { public function enviarSenhaTemporaria(RecuperacaoSenhaRequest $request): RedirectResponse { $login = trim($request->login); $field = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : (preg_match('/^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$/', $login) ? 'cpf' : 'matriculation'); if ($field === 'cpf') { $login = $this->clearCPF($login); } $user = User::where($field, $login)->first(); if (!$user || empty($user->email)) { return redirect()->route('admin.esqueceuSenha') ->with('error', __('Usuário não localizado para recuperação.')) ->withInput(); } $recent = null; if (Schema::hasColumn('password_reset_tokens', 'updated_at')) { $recent = PasswordResetToken::where('email', $user->email) ->where('updated_at', '>=', Carbon::now()->subSeconds(120)) ->first(); } elseif (Schema::hasColumn('password_reset_tokens', 'created_at')) { $recent = PasswordResetToken::where('email', $user->email) ->where('created_at', '>=', Carbon::now()->subSeconds(120)) ->first(); } if ($recent) { return redirect()->route('admin.esqueceuSenha') ->with('error', __('Aguarde 2 minutos para solicitar uma nova senha temporária.')) ->withInput(); } try { DB::beginTransaction(); $senhaTemporaria = Str::password(10); $user->password = Hash::make($senhaTemporaria); $user->isPasswordDefault = 1; $user->save(); Mail::to($user->email)->send(new SenhaTemporariaMail($user, $senhaTemporaria)); DB::commit(); return redirect()->route('admin.login')->with('success', __('Enviamos uma senha temporária para o seu e‑mail. Faça login para definir uma nova senha.')); } catch (\Throwable $e) { DB::rollBack(); Log::error('Falha ao enviar senha temporária por e-mail.', [ 'user_id' => $user->id, 'falha_envio_email' => $this->ehBloqueioServidorEmail($e), 'erro' => $e->getMessage(), ]); $mensagem = $this->ehBloqueioServidorEmail($e) ? __('Não foi possível enviar a senha temporária agora porque nosso servidor de e-mail está temporariamente bloqueado pelo provedor. Nenhuma alteração foi feita na sua conta. Tente novamente em alguns minutos; se o problema continuar, contate o suporte.') : __('Não foi possível enviar a senha temporária por e-mail neste momento. Nenhuma alteração foi feita na sua conta. Tente novamente em alguns minutos; se o problema continuar, contate o suporte.'); return redirect()->route('admin.esqueceuSenha')->withInput()->with('error', $mensagem); } } /** * Identifica se a exceção decorre de bloqueio/recusa do servidor de e-mail (SMTP), * como bloqueio de IP por proteção anti-intrusão do provedor (códigos 4xx/5xx). */ private function ehBloqueioServidorEmail(\Throwable $e): bool { if ($e instanceof \Symfony\Component\Mailer\Exception\TransportExceptionInterface) { return true; } $mensagem = $e->getMessage(); return (bool) preg_match('/\b(421|450|451|452|550|554)\b|Intrusion prevention|Expected response code/i', $mensagem); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings