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.already_registered": "Already registered?",
"auth.confirm_password": "Confirm password", "auth.confirm_password": "Confirm password",
"auth.forgot_password": "Forgot 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.register_now": "Register a new account",
"auth.logout": "Logout", "auth.logout": "Logout",
"auth.register": "Register", "auth.register": "Register",

View File

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

View File

@ -2,11 +2,11 @@
You have been invited to "{{ $team }}" on "{{ config('app.name') }}".<br><br> 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 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 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. 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\SwarmDocker;
use App\Models\GithubApp; use App\Models\GithubApp;
use App\Models\Server; use App\Models\Server;
use App\Models\User;
use App\Notifications\TransactionalEmails\ResetPasswordEmail;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Illuminate\Support\Str; 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::prefix('magic')->middleware(['auth'])->group(function () {
Route::get('/servers', [MagicController::class, 'servers']); Route::get('/servers', [MagicController::class, 'servers']);
Route::get('/destinations', [MagicController::class, 'destinations']); Route::get('/destinations', [MagicController::class, 'destinations']);