diff --git a/app/Notifications/Channels/TransactionalEmailChannel.php b/app/Notifications/Channels/TransactionalEmailChannel.php index 1fb3f1971..730aec8f4 100644 --- a/app/Notifications/Channels/TransactionalEmailChannel.php +++ b/app/Notifications/Channels/TransactionalEmailChannel.php @@ -36,16 +36,6 @@ class TransactionalEmailChannel private function bootConfigs(InstanceSettings $settings): void { - config()->set('mail.default', 'smtp'); - config()->set('mail.mailers.smtp', [ - "transport" => "smtp", - "host" => $settings->extra_attributes?->get('smtp_host'), - "port" => $settings->extra_attributes?->get('smtp_port'), - "encryption" => $settings->extra_attributes?->get('smtp_encryption'), - "username" => $settings->extra_attributes?->get('smtp_username'), - "password" => $settings->extra_attributes?->get('smtp_password'), - "timeout" => $settings->extra_attributes?->get('smtp_timeout'), - "local_domain" => null, - ]); + set_transanctional_email_settings(); } } diff --git a/app/Notifications/TransactionalEmails/ResetPasswordEmail.php b/app/Notifications/TransactionalEmails/ResetPasswordEmail.php index a23b64d47..6a02a3f43 100644 --- a/app/Notifications/TransactionalEmails/ResetPasswordEmail.php +++ b/app/Notifications/TransactionalEmails/ResetPasswordEmail.php @@ -24,7 +24,11 @@ class ResetPasswordEmail extends Notification implements ShouldQueue public function toMail(User $user): MailMessage { - $url = url('/') . '/reset-password/' . $this->token . '?email=' . $user->email; + if (config('app.env') === 'local') { + $url = url('/') . ":8000" . '/reset-password/' . $this->token . '?email=' . $user->email; + } else { + $url = url('/') . '/reset-password/' . $this->token . '?email=' . $user->email; + } $mail = new MailMessage(); $mail->subject('Reset Password'); $mail->view('emails.reset-password', [ diff --git a/bootstrap/helpers/shared.php b/bootstrap/helpers/shared.php index d5259ae94..9671f89c3 100644 --- a/bootstrap/helpers/shared.php +++ b/bootstrap/helpers/shared.php @@ -65,3 +65,19 @@ function is_transactional_emails_active() { return data_get(InstanceSettings::get(), 'extra_attributes.smtp_host'); } + +function set_transanctional_email_settings() +{ + $settings = InstanceSettings::get(); + config()->set('mail.default', 'smtp'); + config()->set('mail.mailers.smtp', [ + "transport" => "smtp", + "host" => $settings->extra_attributes?->get('smtp_host'), + "port" => $settings->extra_attributes?->get('smtp_port'), + "encryption" => $settings->extra_attributes?->get('smtp_encryption'), + "username" => $settings->extra_attributes?->get('smtp_username'), + "password" => $settings->extra_attributes?->get('smtp_password'), + "timeout" => $settings->extra_attributes?->get('smtp_timeout'), + "local_domain" => null, + ]); +} diff --git a/resources/views/auth/forgot-password.blade.php b/resources/views/auth/forgot-password.blade.php index 5be08eeec..afacfaf80 100644 --- a/resources/views/auth/forgot-password.blade.php +++ b/resources/views/auth/forgot-password.blade.php @@ -9,7 +9,7 @@

{{ __('auth.forgot_password') }}

-
+
@if (is_transactional_emails_active())
@csrf @@ -18,7 +18,9 @@ {{ __('auth.forgot_password_send_email') }}
@else - 'asd' +
Transactional emails are not active on this instance.
+
See how to set it in our docs, or how to manually reset password.
@endif @if ($errors->any())
diff --git a/routes/web.php b/routes/web.php index c2cde371b..4a4185386 100644 --- a/routes/web.php +++ b/routes/web.php @@ -15,37 +15,27 @@ use App\Models\User; use App\Notifications\TransactionalEmails\ResetPasswordEmail; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Password; use Illuminate\Support\Facades\Route; use Illuminate\Support\Str; +use Laravel\Fortify\Contracts\FailedPasswordResetLinkRequestResponse; +use Laravel\Fortify\Contracts\SuccessfulPasswordResetLinkRequestResponse; +use Laravel\Fortify\Fortify; + + Route::post('/forgot-password', function (Request $request) { - $request->validate([ - 'email' => 'required|email', - ]); - $user = User::whereEmail($request->email)->first(); - if (!$user->exists()) { - return back()->withErrors([ - 'email' => 'No user found with that email address.', - ]); - } - if (is_transactional_emails_active()) { - $token = Str::random(64); - $token_exists = DB::table('password_reset_tokens')->whereEmail($user->email)->first(); - if ($token_exists) { - return back()->withErrors([ - 'email' => 'Token already exists.', - ]); - } - DB::table('password_reset_tokens')->insert([ - 'email' => $user->email, - 'token' => $token, - 'created_at' => now(), - ]); - - $user->notify(new ResetPasswordEmail($token)); - } else { - // $user->sendPasswordResetNotification($user->createToken('password-reset')->plainTextToken); + if (!is_transactional_emails_active()) { + set_transanctional_email_settings(); + $request->validate([Fortify::email() => 'required|email']); + $status = Password::broker(config('fortify.passwords'))->sendResetLink( + $request->only(Fortify::email()) + ); + return $status == Password::RESET_LINK_SENT + ? app(SuccessfulPasswordResetLinkRequestResponse::class, ['status' => $status]) + : app(FailedPasswordResetLinkRequestResponse::class, ['status' => $status]); } + return response()->json(['message' => 'Transactional emails are not active'], 400); })->name('password.forgot'); Route::prefix('magic')->middleware(['auth'])->group(function () { Route::get('/servers', [MagicController::class, 'servers']);