From f63803fe7bcdc41ea353bba489f98eb78d361e65 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 18 Jul 2019 09:45:18 +1000 Subject: [PATCH] Finished - Client auth + password reset + mailables --- .../Auth/ContactForgotPasswordController.php | 21 +++++- .../Auth/ContactResetPasswordController.php | 28 +++++++- app/Models/ClientContact.php | 6 ++ package.json | 1 + resources/views/layouts/guest.blade.php | 25 +------ .../default/auth/passwords/email.blade.php | 51 +++++++++++++ .../default/auth/passwords/reset.blade.php | 71 +++++++++++++++++++ .../views/vendor/mail/text/button.blade.php | 1 + .../views/vendor/mail/text/footer.blade.php | 1 + .../views/vendor/mail/text/header.blade.php | 1 + .../views/vendor/mail/text/layout.blade.php | 11 +++ .../views/vendor/mail/text/message.blade.php | 27 +++++++ .../views/vendor/mail/text/panel.blade.php | 1 + .../vendor/mail/text/promotion.blade.php | 1 + .../mail/text/promotion/button.blade.php | 1 + .../views/vendor/mail/text/subcopy.blade.php | 1 + .../views/vendor/mail/text/table.blade.php | 1 + .../vendor/notifications/email.blade.php | 62 ++++++++++++++++ 18 files changed, 284 insertions(+), 27 deletions(-) create mode 100644 resources/views/portal/default/auth/passwords/email.blade.php create mode 100644 resources/views/portal/default/auth/passwords/reset.blade.php create mode 100644 resources/views/vendor/mail/text/button.blade.php create mode 100644 resources/views/vendor/mail/text/footer.blade.php create mode 100644 resources/views/vendor/mail/text/header.blade.php create mode 100644 resources/views/vendor/mail/text/layout.blade.php create mode 100644 resources/views/vendor/mail/text/message.blade.php create mode 100644 resources/views/vendor/mail/text/panel.blade.php create mode 100644 resources/views/vendor/mail/text/promotion.blade.php create mode 100644 resources/views/vendor/mail/text/promotion/button.blade.php create mode 100644 resources/views/vendor/mail/text/subcopy.blade.php create mode 100644 resources/views/vendor/mail/text/table.blade.php create mode 100644 resources/views/vendor/notifications/email.blade.php diff --git a/app/Http/Controllers/Auth/ContactForgotPasswordController.php b/app/Http/Controllers/Auth/ContactForgotPasswordController.php index 614ebef48305..7cfce622c6e6 100644 --- a/app/Http/Controllers/Auth/ContactForgotPasswordController.php +++ b/app/Http/Controllers/Auth/ContactForgotPasswordController.php @@ -13,6 +13,8 @@ namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\SendsPasswordResetEmails; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Password; class ContactForgotPasswordController extends Controller { @@ -36,11 +38,28 @@ class ContactForgotPasswordController extends Controller */ public function __construct() { - $this->middleware('guest'); + $this->middleware('guest:contact'); + } + + /** + * Show the reset email form. + * + * @return \Illuminate\Http\Response + */ + public function showLinkRequestForm(){ + return view('portal.default.auth.passwords.email',[ + 'title' => 'Client Password Reset', + 'passwordEmailRoute' => 'client.password.email' + ]); } protected function guard() { return Auth::guard('contact'); } + + public function broker() + { + return Password::broker('contacts'); + } } diff --git a/app/Http/Controllers/Auth/ContactResetPasswordController.php b/app/Http/Controllers/Auth/ContactResetPasswordController.php index 058fef1542b7..ed104accf690 100644 --- a/app/Http/Controllers/Auth/ContactResetPasswordController.php +++ b/app/Http/Controllers/Auth/ContactResetPasswordController.php @@ -13,6 +13,9 @@ namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\ResetsPasswords; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Password; class ContactResetPasswordController extends Controller { @@ -34,7 +37,7 @@ class ContactResetPasswordController extends Controller * * @var string */ - protected $redirectTo = '/client'; + protected $redirectTo = '/client/dashboard'; /** * Create a new controller instance. @@ -43,11 +46,32 @@ class ContactResetPasswordController extends Controller */ public function __construct() { - $this->middleware('guest'); + $this->middleware('guest:contact'); + } + + /** + * Display the password reset view for the given token. + * + * If no token is present, display the link request form. + * + * @param \Illuminate\Http\Request $request + * @param string|null $token + * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ + public function showResetForm(Request $request, $token = null) + { + return view('portal.default.auth.passwords.reset')->with( + ['token' => $token, 'email' => $request->email] + ); } protected function guard() { return Auth::guard('contact'); } + + protected function broker() + { + return Password::broker('contacts'); + } } diff --git a/app/Models/ClientContact.php b/app/Models/ClientContact.php index 45240c1e2b62..3807bd668e5c 100644 --- a/app/Models/ClientContact.php +++ b/app/Models/ClientContact.php @@ -13,6 +13,8 @@ namespace App\Models; use App\Models\Company; use App\Models\User; +use App\Notifications\ClientContactResetPassword as ResetPasswordNotification; +use App\Notifications\ClientContactResetPassword; use App\Utils\Traits\MakesHash; use Hashids\Hashids; use Illuminate\Contracts\Auth\MustVerifyEmail; @@ -89,4 +91,8 @@ class ClientContact extends Authenticatable return $this->belongsTo(User::class); } + public function sendPasswordResetNotification($token) + { + $this->notify(new ClientContactResetPassword($token)); + } } diff --git a/package.json b/package.json index b19ba5d7eace..1dd47e08b40f 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@coreui/coreui": "^2.1.12", "@coreui/icons": "^0.3.0", "bootstrap": "^4.3.1", + "cross-env": "^5.2.0", "font-awesome": "^4.7.0", "laravel-mix": "^4.1.2", "puppeteer": "^1.18.1" diff --git a/resources/views/layouts/guest.blade.php b/resources/views/layouts/guest.blade.php index 9e33a4bdb6c7..0f4587526fdc 100644 --- a/resources/views/layouts/guest.blade.php +++ b/resources/views/layouts/guest.blade.php @@ -30,27 +30,6 @@ - - @@ -58,12 +37,10 @@ - - - + @yield('head') diff --git a/resources/views/portal/default/auth/passwords/email.blade.php b/resources/views/portal/default/auth/passwords/email.blade.php new file mode 100644 index 000000000000..447d0052d532 --- /dev/null +++ b/resources/views/portal/default/auth/passwords/email.blade.php @@ -0,0 +1,51 @@ +@extends('portal.default.layouts.guest') + +@section('body') + +
+
+
+
+
+
+ @if (session('status')) + + @endif +
+ @csrf +

@lang('texts.password_recovery')

+

+
+
+ + + +
+ + + @if ($errors->has('email')) + + {{ $errors->first('email') }} + + @endif + +
+ +
+
+ +
+
+
+
+
+
+
+
+
+ +@endsection + + diff --git a/resources/views/portal/default/auth/passwords/reset.blade.php b/resources/views/portal/default/auth/passwords/reset.blade.php new file mode 100644 index 000000000000..c6b594b0f1d9 --- /dev/null +++ b/resources/views/portal/default/auth/passwords/reset.blade.php @@ -0,0 +1,71 @@ +@extends('portal.default.layouts.guest') + +@section('body') + +
+
+
+
+
+
+
+
+ @csrf + +

@lang('texts.change_password')

+

+
+
+ + + +
+ + + @if ($errors->has('email')) + + {{ $errors->first('email') }} + + @endif + +
+ +
+
+ + + +
+ + + @if ($errors->has('password')) + + {{ $errors->first('password') }} + + @endif +
+ +
+
+ + + +
+ +
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+ +@endsection diff --git a/resources/views/vendor/mail/text/button.blade.php b/resources/views/vendor/mail/text/button.blade.php new file mode 100644 index 000000000000..97444ebdcfd1 --- /dev/null +++ b/resources/views/vendor/mail/text/button.blade.php @@ -0,0 +1 @@ +{{ $slot }}: {{ $url }} diff --git a/resources/views/vendor/mail/text/footer.blade.php b/resources/views/vendor/mail/text/footer.blade.php new file mode 100644 index 000000000000..3338f620e42f --- /dev/null +++ b/resources/views/vendor/mail/text/footer.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/header.blade.php b/resources/views/vendor/mail/text/header.blade.php new file mode 100644 index 000000000000..aaa3e5754446 --- /dev/null +++ b/resources/views/vendor/mail/text/header.blade.php @@ -0,0 +1 @@ +[{{ $slot }}]({{ $url }}) diff --git a/resources/views/vendor/mail/text/layout.blade.php b/resources/views/vendor/mail/text/layout.blade.php new file mode 100644 index 000000000000..e8276a407042 --- /dev/null +++ b/resources/views/vendor/mail/text/layout.blade.php @@ -0,0 +1,11 @@ +@if(!is_array($header)) +{!! strip_tags($header) !!} +@endisset + +{!! strip_tags($slot) !!} +@isset($subcopy) + +{!! strip_tags($subcopy) !!} +@endisset + +{!! strip_tags($footer) !!} diff --git a/resources/views/vendor/mail/text/message.blade.php b/resources/views/vendor/mail/text/message.blade.php new file mode 100644 index 000000000000..1ae9ed8f1bf6 --- /dev/null +++ b/resources/views/vendor/mail/text/message.blade.php @@ -0,0 +1,27 @@ +@component('mail::layout') + {{-- Header --}} + @slot('header') + @component('mail::header', ['url' => config('app.url')]) + {{ config('app.name') }} + @endcomponent + @endslot + + {{-- Body --}} + {{ $slot }} + + {{-- Subcopy --}} + @isset($subcopy) + @slot('subcopy') + @component('mail::subcopy') + {{ $subcopy }} + @endcomponent + @endslot + @endisset + + {{-- Footer --}} + @slot('footer') + @component('mail::footer') + © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') + @endcomponent + @endslot +@endcomponent diff --git a/resources/views/vendor/mail/text/panel.blade.php b/resources/views/vendor/mail/text/panel.blade.php new file mode 100644 index 000000000000..3338f620e42f --- /dev/null +++ b/resources/views/vendor/mail/text/panel.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/promotion.blade.php b/resources/views/vendor/mail/text/promotion.blade.php new file mode 100644 index 000000000000..3338f620e42f --- /dev/null +++ b/resources/views/vendor/mail/text/promotion.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/promotion/button.blade.php b/resources/views/vendor/mail/text/promotion/button.blade.php new file mode 100644 index 000000000000..aaa3e5754446 --- /dev/null +++ b/resources/views/vendor/mail/text/promotion/button.blade.php @@ -0,0 +1 @@ +[{{ $slot }}]({{ $url }}) diff --git a/resources/views/vendor/mail/text/subcopy.blade.php b/resources/views/vendor/mail/text/subcopy.blade.php new file mode 100644 index 000000000000..3338f620e42f --- /dev/null +++ b/resources/views/vendor/mail/text/subcopy.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/table.blade.php b/resources/views/vendor/mail/text/table.blade.php new file mode 100644 index 000000000000..3338f620e42f --- /dev/null +++ b/resources/views/vendor/mail/text/table.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/notifications/email.blade.php b/resources/views/vendor/notifications/email.blade.php new file mode 100644 index 000000000000..befcc0f88ed8 --- /dev/null +++ b/resources/views/vendor/notifications/email.blade.php @@ -0,0 +1,62 @@ +@component('mail::message') +{{-- Greeting --}} +@if (! empty($greeting)) +# {{ $greeting }} +@else +@if ($level === 'error') +# @lang('Whoops!') +@else +# @lang('Hello!') +@endif +@endif + +{{-- Intro Lines --}} +@foreach ($introLines as $line) +{{ $line }} + +@endforeach + +{{-- Action Button --}} +@isset($actionText) + +@component('mail::button', ['url' => $actionUrl, 'color' => $color]) +{{ $actionText }} +@endcomponent +@endisset + +{{-- Outro Lines --}} +@foreach ($outroLines as $line) +{{ $line }} + +@endforeach + +{{-- Salutation --}} +@if (! empty($salutation)) +{{ $salutation }} +@else +@lang('Regards'),
{{ config('app.name') }} +@endif + +{{-- Subcopy --}} +@isset($actionText) +@slot('subcopy') +@lang( + "If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\n". + 'into your web browser: [:actionURL](:actionURL)', + [ + 'actionText' => $actionText, + 'actionURL' => $actionUrl, + ] +) +@endslot +@endisset +@endcomponent