This commit is contained in:
Andras Bacsai 2023-06-12 15:47:42 +02:00
parent 0c4a9c6fad
commit 3e18f0f238
6 changed files with 87 additions and 11 deletions

View File

@ -0,0 +1,36 @@
<?php
namespace App\Notifications\TransactionalEmails;
use App\Models\User;
use App\Notifications\Channels\TransactionalEmailChannel;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class ResetPasswordEmail extends Notification implements ShouldQueue
{
use Queueable;
public string $token;
public function __construct(string $token)
{
$this->token = $token;
}
public function via()
{
return [TransactionalEmailChannel::class];
}
public function toMail(User $user): MailMessage
{
$url = url('/') . '/reset-password/' . $this->token . '?email=' . $user->email;
$mail = new MailMessage();
$mail->subject('Reset Password');
$mail->view('emails.reset-password', [
'user' => $user,
'url' => $url,
]);
return $mail;
}
}

View File

@ -3,7 +3,7 @@
"auth.already_registered": "Already registered?",
"auth.confirm_password": "Confirm password",
"auth.forgot_password": "Forgot password",
"auth.forgot_password_send_email": "Send password reset link via email",
"auth.forgot_password_send_email": "Send password reset email",
"auth.register_now": "Register a new account",
"auth.logout": "Logout",
"auth.register": "Register",

View File

@ -10,19 +10,23 @@
<h1>{{ __('auth.forgot_password') }}</h1>
</div>
<div class="w-96">
@if (is_transactional_emails_active())
<form action="/forgot-password" method="POST" class="flex flex-col gap-2">
@csrf
<x-forms.input required value="test@example.com" type="email" name="email"
label="{{ __('input.email') }}" autofocus />
<x-forms.button type="submit">{{ __('auth.forgot_password_send_email') }}</x-forms.button>
</form>
@else
'asd'
@endif
@if ($errors->any())
<div class="text-center text-error">
<div class="text-xs text-center text-error">
<span>{{ __('auth.failed') }}</span>
</div>
@endif
@if (session('status'))
<div class="mb-4 text-sm font-medium text-green-600">
<div class="mb-4 text-xs font-medium text-green-600">
{{ session('status') }}
</div>
@endif

View File

@ -2,11 +2,11 @@
You have been invited to "{{ $team }}" on "{{ config('app.name') }}".<br><br>
Please click here to accept the invitation: <a href="{{ $invitation_link }}">Accept Invitation</a><br><br>
Please click here to accept the invitation: <a target="_blank" href="{{ $invitation_link }}">Accept Invitation</a><br><br>
If you have any questions, please contact the team owner.<br><br>
If it was not you who requested this invitation, please ignore this ema il, or instantly revoke the invitation by
clicking here: <a href="{{ $invitation_link }}/revoke">Revoke Invitation</a><br><br>
clicking here: <a target="_blank" href="{{ $invitation_link }}/revoke">Revoke Invitation</a><br><br>
Thank you.

View File

@ -0,0 +1,5 @@
Hello,<br><br>
A password reset requested for your email address on "{{ config('app.name') }}".<br><br>
Please click the following link to reset your password: <a target="_blank" href="{{ $url }}">Password Reset</a>

View File

@ -11,11 +11,42 @@
use App\Models\SwarmDocker;
use App\Models\GithubApp;
use App\Models\Server;
use App\Models\User;
use App\Notifications\TransactionalEmails\ResetPasswordEmail;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Str;
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);
}
})->name('password.forgot');
Route::prefix('magic')->middleware(['auth'])->group(function () {
Route::get('/servers', [MagicController::class, 'servers']);
Route::get('/destinations', [MagicController::class, 'destinations']);