From f8ae6d93ffa1756ac0a7895209bdb0514d04d8c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Jaussoin?= Date: Thu, 17 Aug 2023 09:42:09 +0000 Subject: [PATCH] Add PIN code error handling and proper redirect --- .../Controllers/Account/EmailController.php | 4 +- .../Controllers/Account/PhoneController.php | 4 +- .../Account/RecoveryController.php | 11 +-- .../Admin/AccountContactController.php | 12 ++-- .../Admin/ContactsListContactController.php | 9 ++- .../Admin/ContactsListController.php | 22 +++++- flexiapi/public/accounts_example.csv | 4 ++ flexiapi/public/css/far.css | 6 +- flexiapi/public/css/form.css | 1 + flexiapi/public/css/style.css | 2 +- flexiapi/resources/views/about.blade.php | 2 +- .../views/account/email/change.blade.php | 4 +- .../views/account/email/validate.blade.php | 2 +- .../resources/views/account/login.blade.php | 2 +- .../views/account/phone/change.blade.php | 40 +++++------ .../views/account/phone/validate.blade.php | 2 +- .../views/account/recovery/confirm.blade.php | 4 +- .../views/account/recovery/show.blade.php | 13 ++-- .../views/account/register/email.blade.php | 2 +- .../views/account/register/phone.blade.php | 2 +- .../admin/account/contact/create.blade.php | 24 ++++--- .../admin/account/import/create.blade.php | 2 +- .../contacts_list/contacts/add.blade.php | 60 ++++++++++------- .../admin/contacts_list/create_edit.blade.php | 67 +++++++++++++------ .../views/parts/column_sort.blade.php | 6 +- flexiapi/routes/web.php | 5 +- 26 files changed, 202 insertions(+), 110 deletions(-) create mode 100644 flexiapi/public/accounts_example.csv diff --git a/flexiapi/app/Http/Controllers/Account/EmailController.php b/flexiapi/app/Http/Controllers/Account/EmailController.php index b0528fc..904de2d 100644 --- a/flexiapi/app/Http/Controllers/Account/EmailController.php +++ b/flexiapi/app/Http/Controllers/Account/EmailController.php @@ -54,6 +54,8 @@ class EmailController extends Controller return redirect()->route('account.dashboard'); } - return redirect()->route('account.email.change'); + return redirect()->route('account.email.change')->withErrors([ + 'code' => 'The code entered was not valid' + ]); } } diff --git a/flexiapi/app/Http/Controllers/Account/PhoneController.php b/flexiapi/app/Http/Controllers/Account/PhoneController.php index c3b19bb..3b6b12c 100644 --- a/flexiapi/app/Http/Controllers/Account/PhoneController.php +++ b/flexiapi/app/Http/Controllers/Account/PhoneController.php @@ -54,6 +54,8 @@ class PhoneController extends Controller return redirect()->route('account.dashboard'); } - return redirect()->route('account.phone.change'); + return redirect()->route('account.phone.change')->withErrors([ + 'code' => 'The code entered was not valid' + ]); } } diff --git a/flexiapi/app/Http/Controllers/Account/RecoveryController.php b/flexiapi/app/Http/Controllers/Account/RecoveryController.php index b7cf4b4..e2594ca 100644 --- a/flexiapi/app/Http/Controllers/Account/RecoveryController.php +++ b/flexiapi/app/Http/Controllers/Account/RecoveryController.php @@ -88,6 +88,7 @@ class RecoveryController extends Controller } return view('account.recovery.confirm', [ + 'method' => $request->get('phone') ? 'phone' : 'email', 'account_id' => Crypt::encryptString($account->id) ]); } @@ -96,6 +97,7 @@ class RecoveryController extends Controller { $request->validate([ 'account_id' => 'required', + 'method' => 'in:phone,email', 'number_1' => 'required|digits:1', 'number_2' => 'required|digits:1', 'number_3' => 'required|digits:1', @@ -104,12 +106,13 @@ class RecoveryController extends Controller $code = $request->get('number_1') . $request->get('number_2') . $request->get('number_3') . $request->get('number_4'); - $account = Account::where('id', Crypt::decryptString($request->get('account_id')))->firstOrFail(); if ($account->recovery_code != $code) { - return redirect()->back()->withErrors([ - 'code' => 'Wrong code' + return redirect()->route($request->get('method') == 'phone' + ? 'account.recovery.show.phone' + : 'account.recovery.show.email')->withErrors([ + 'code' => 'The code entered was not valid' ]); } @@ -117,6 +120,6 @@ class RecoveryController extends Controller $account->save(); Auth::login($account); - return redirect()->route('account.dashboard'); + return redirect()->route('account.password.update'); } } diff --git a/flexiapi/app/Http/Controllers/Admin/AccountContactController.php b/flexiapi/app/Http/Controllers/Admin/AccountContactController.php index 40c7638..20615da 100644 --- a/flexiapi/app/Http/Controllers/Admin/AccountContactController.php +++ b/flexiapi/app/Http/Controllers/Admin/AccountContactController.php @@ -38,20 +38,22 @@ class AccountContactController extends Controller public function store(Request $request, int $id) { + $request->validate([ + 'sip' => 'required', + ]); + $account = Account::findOrFail($id); $contact = Account::sip($request->get('sip'))->first(); if (!$contact) { - $request->session()->flash('error', 'The contact SIP address doesn\'t exists'); - - return redirect()->route('admin.account.contact.create', $account); + return redirect()->back()->withErrors([ + 'sip' => 'The contact SIP address doesn\'t exists' + ]); } $account->contacts()->detach($contact->id); $account->contacts()->attach($contact->id); - $request->session()->flash('success', 'Contact successfully added'); - Log::channel('events')->info('Web Admin: Account contact added', ['id' => $account->identifier, 'contact' => $contact->identifier]); return redirect()->route('admin.account.edit', $account); diff --git a/flexiapi/app/Http/Controllers/Admin/ContactsListContactController.php b/flexiapi/app/Http/Controllers/Admin/ContactsListContactController.php index 7064b14..a8bb18f 100644 --- a/flexiapi/app/Http/Controllers/Admin/ContactsListContactController.php +++ b/flexiapi/app/Http/Controllers/Admin/ContactsListContactController.php @@ -35,12 +35,15 @@ class ContactsListContactController extends Controller $accounts = $accounts->where('username', 'like', '%' . $request->get('search') . '%'); } + if ($request->has('domain')) { + $accounts = $accounts->where('domain', $request->get('domain')); + } + return view('admin.contacts_list.contacts.add', [ + 'domains' => Account::groupBy('domain')->pluck('domain'), 'contacts_list' => ContactsList::findOrFail($contactsListId), 'params' => [ - 'search' => $request->get('search'), - 'contacts_list_id' => $contactsListId, - 'updated_at_order' => $request->get('updated_at_order') == 'desc' ? 'asc' : 'desc' + 'contacts_list_id' => $contactsListId ], 'accounts' => $accounts->whereNotIn('id', function ($query) use ($contactsListId) { $query->select('contact_id') diff --git a/flexiapi/app/Http/Controllers/Admin/ContactsListController.php b/flexiapi/app/Http/Controllers/Admin/ContactsListController.php index 6c8aee6..bb00d54 100644 --- a/flexiapi/app/Http/Controllers/Admin/ContactsListController.php +++ b/flexiapi/app/Http/Controllers/Admin/ContactsListController.php @@ -19,6 +19,7 @@ namespace App\Http\Controllers\Admin; +use App\Account; use App\ContactsList; use App\Http\Controllers\Controller; use Illuminate\Validation\Rule; @@ -67,10 +68,29 @@ class ContactsListController extends Controller return redirect()->route('admin.contacts_lists.edit', $contactsList->id); } - public function edit(int $id) + public function search(Request $request, int $contactsListId) { + return redirect()->route('admin.contacts_lists.edit', ['contacts_list_id' => $contactsListId] + $request->except('_token')); + } + + public function edit(Request $request, int $id) + { + $contacts = ContactsList::findOrFail($id)->contacts(); + + if ($request->has('search')) { + $contacts = $contacts->where('username', 'like', '%' . $request->get('search') . '%'); + } + + if ($request->has('domain')) { + $contact = $contacts->where('domain', $request->get('domain')); + } + + $contacts = $contacts->get(); + return view('admin.contacts_list.create_edit', [ + 'domains' => Account::groupBy('domain')->pluck('domain'), 'contacts_list' => ContactsList::findOrFail($id), + 'contacts' => $contacts ]); } diff --git a/flexiapi/public/accounts_example.csv b/flexiapi/public/accounts_example.csv new file mode 100644 index 0000000..f23198d --- /dev/null +++ b/flexiapi/public/accounts_example.csv @@ -0,0 +1,4 @@ +Username,Password,Role,Status,Phone,Email +john,number9,user,active,+12341234,john@lennon.com +paul,a_day_in_the_life,admin,active,,paul@apple.com +ringo,allUneedIsL3ve,user,unactove,+123456,ringo@star.co.uk \ No newline at end of file diff --git a/flexiapi/public/css/far.css b/flexiapi/public/css/far.css index f129338..3ce6376 100644 --- a/flexiapi/public/css/far.css +++ b/flexiapi/public/css/far.css @@ -304,7 +304,7 @@ header nav a#logo::before { width: 3rem; height: 3rem; padding: 1rem; - background-image: url('/img/logo.svg'); + background-image: url('../img/logo.svg'); background-color: var(--main-5); background-size: 3rem; background-position: center; @@ -387,7 +387,7 @@ content > nav { background-size: auto 10rem; background-position: bottom center; background-repeat: repeat-x; - background-image: url('/img/footer.svg'); + background-image: url('../img/footer.svg'); z-index: 1; } @@ -465,7 +465,7 @@ content > nav a i { body.welcome::after { background-position: bottom center; background-repeat: repeat-x; - background-image: url('/img/footer.svg'); + background-image: url('../img/footer.svg'); display: block; height: 10rem; width: 100%; diff --git a/flexiapi/public/css/form.css b/flexiapi/public/css/form.css index 951d5b4..139dd87 100644 --- a/flexiapi/public/css/form.css +++ b/flexiapi/public/css/form.css @@ -89,6 +89,7 @@ form.inline { grid-template-columns: repeat(4, 1fr); gap: 1rem; margin-bottom: 2rem; + clear: both; } form div { diff --git a/flexiapi/public/css/style.css b/flexiapi/public/css/style.css index e82238a..c5adea4 100644 --- a/flexiapi/public/css/style.css +++ b/flexiapi/public/css/style.css @@ -42,7 +42,7 @@ body > footer::before { width: 100%; background-size: 50rem; content: ''; - background-image: url('/img/footer.svg'); + background-image: url('../img/footer.svg'); height: 9rem; } diff --git a/flexiapi/resources/views/about.blade.php b/flexiapi/resources/views/about.blade.php index 665a0e7..a03eb26 100644 --- a/flexiapi/resources/views/about.blade.php +++ b/flexiapi/resources/views/about.blade.php @@ -2,7 +2,7 @@ @section('content')
- +

About


diff --git a/flexiapi/resources/views/account/email/change.blade.php b/flexiapi/resources/views/account/email/change.blade.php index 2d032e8..e347118 100644 --- a/flexiapi/resources/views/account/email/change.blade.php +++ b/flexiapi/resources/views/account/email/change.blade.php @@ -21,6 +21,8 @@

The verification code is invalid.

Please enter again your email address to receive a new code.

@endif + + @include('parts.errors', ['name' => 'code'])
@@ -38,7 +40,7 @@
- +
@endsection diff --git a/flexiapi/resources/views/account/email/validate.blade.php b/flexiapi/resources/views/account/email/validate.blade.php index 87b1327..a8d4aa5 100644 --- a/flexiapi/resources/views/account/email/validate.blade.php +++ b/flexiapi/resources/views/account/email/validate.blade.php @@ -35,7 +35,7 @@
- +
@endsection diff --git a/flexiapi/resources/views/account/login.blade.php b/flexiapi/resources/views/account/login.blade.php index 30f7cf3..c6a0b35 100644 --- a/flexiapi/resources/views/account/login.blade.php +++ b/flexiapi/resources/views/account/login.blade.php @@ -50,7 +50,7 @@
{{ $count }}

users

- +
@endsection diff --git a/flexiapi/resources/views/account/phone/change.blade.php b/flexiapi/resources/views/account/phone/change.blade.php index d75f7a1..ad48269 100644 --- a/flexiapi/resources/views/account/phone/change.blade.php +++ b/flexiapi/resources/views/account/phone/change.blade.php @@ -12,34 +12,36 @@
-@csrf + @csrf -
- @if ($account->phone) -

Please enter the new phone number that you would like to link to your account.

- @else -

The verification code is invalid or you didn't receive it.

-

Please enter your phone number again to receive a new code.

- @endif -
+
+ @if ($account->phone) +

Please enter the new phone number that you would like to link to your account.

+ @else +

The verification code is invalid or you didn't receive it.

+

Please enter your phone number again to receive a new code.

+ @endif -
- - - @include('parts.errors', ['name' => 'phone']) -
+ @include('parts.errors', ['name' => 'code']) +
- @include('parts.captcha') +
+ + + @include('parts.errors', ['name' => 'phone']) +
-
- -
+ @include('parts.captcha') + +
+ +
- +
@endsection diff --git a/flexiapi/resources/views/account/phone/validate.blade.php b/flexiapi/resources/views/account/phone/validate.blade.php index d84415d..fde4827 100644 --- a/flexiapi/resources/views/account/phone/validate.blade.php +++ b/flexiapi/resources/views/account/phone/validate.blade.php @@ -35,7 +35,7 @@
- +
@endsection diff --git a/flexiapi/resources/views/account/recovery/confirm.blade.php b/flexiapi/resources/views/account/recovery/confirm.blade.php index 47147e7..36e2329 100644 --- a/flexiapi/resources/views/account/recovery/confirm.blade.php +++ b/flexiapi/resources/views/account/recovery/confirm.blade.php @@ -13,8 +13,8 @@ - @include('parts.errors', ['name' => 'code']) +
@@ -23,6 +23,6 @@
- +
@endsection \ No newline at end of file diff --git a/flexiapi/resources/views/account/recovery/show.blade.php b/flexiapi/resources/views/account/recovery/show.blade.php index 24ee042..f37b424 100644 --- a/flexiapi/resources/views/account/recovery/show.blade.php +++ b/flexiapi/resources/views/account/recovery/show.blade.php @@ -5,12 +5,15 @@

account_circle Account recovery

-@csrf + @csrf @if ($method == 'email') -

Enter your email account to recover it.

- +

Enter your email account to recover it.

+ @include('parts.errors', ['name' => 'code']) +
+
+ @include('parts.errors', ['name' => 'email']) @include('parts.errors', ['name' => 'identifier']) @@ -44,6 +47,6 @@
- +
-@endsection \ No newline at end of file +@endsection diff --git a/flexiapi/resources/views/account/register/email.blade.php b/flexiapi/resources/views/account/register/email.blade.php index 4be20db..0f5c34e 100644 --- a/flexiapi/resources/views/account/register/email.blade.php +++ b/flexiapi/resources/views/account/register/email.blade.php @@ -61,7 +61,7 @@
- +
@endsection diff --git a/flexiapi/resources/views/account/register/phone.blade.php b/flexiapi/resources/views/account/register/phone.blade.php index a385d1d..e9e2407 100644 --- a/flexiapi/resources/views/account/register/phone.blade.php +++ b/flexiapi/resources/views/account/register/phone.blade.php @@ -50,6 +50,6 @@
- +
@endsection diff --git a/flexiapi/resources/views/admin/account/contact/create.blade.php b/flexiapi/resources/views/admin/account/contact/create.blade.php index c1ee14d..98c23ff 100644 --- a/flexiapi/resources/views/admin/account/contact/create.blade.php +++ b/flexiapi/resources/views/admin/account/contact/create.blade.php @@ -1,17 +1,25 @@ @extends('layouts.main') -@section('content') -

Add a Contact to the Account

+@section('breadcrumb') + + +@endsection - +@section('content') +
+

person_add Add a Contact

+ Cancel + +
+ @csrf @method('post')
- - -
-
- + + + @include('parts.errors', ['name' => 'sip'])
@endsection diff --git a/flexiapi/resources/views/admin/account/import/create.blade.php b/flexiapi/resources/views/admin/account/import/create.blade.php index 2322937..69e2419 100644 --- a/flexiapi/resources/views/admin/account/import/create.blade.php +++ b/flexiapi/resources/views/admin/account/import/create.blade.php @@ -20,7 +20,7 @@
  • Import data
  • -

    Use this existing (.csv) template or create your own csv file.

    +

    Use this existing example (.csv) template or create your own csv file.

    This file MUST be in csv format and contain at least the following information: diff --git a/flexiapi/resources/views/admin/contacts_list/contacts/add.blade.php b/flexiapi/resources/views/admin/contacts_list/contacts/add.blade.php index 2d1ca4c..4aee097 100644 --- a/flexiapi/resources/views/admin/contacts_list/contacts/add.blade.php +++ b/flexiapi/resources/views/admin/contacts_list/contacts/add.blade.php @@ -16,10 +16,8 @@ Cancel -

    + @csrf @method('post') @@ -29,23 +27,37 @@
    - + @csrf - + @@ -84,12 +111,12 @@ - @if ($contacts_list->contacts->isEmpty()) + @if ($contacts->isEmpty()) @endif - @foreach ($contacts_list->contacts as $contact) + @foreach ($contacts as $contact)
    No Contact
    + @php + $uriParams = $uriParams ?? []; + @endphp + route()->getName(), $uriParams + [ 'order_by' => $key, 'order_sort' => request()->get('order_sort', 'desc') == 'desc' ? 'asc' : 'desc' ] + request()->except('_token', 'query')) }}"> diff --git a/flexiapi/routes/web.php b/flexiapi/routes/web.php index fb06ad4..43f2b1b 100644 --- a/flexiapi/routes/web.php +++ b/flexiapi/routes/web.php @@ -36,7 +36,7 @@ use App\Http\Controllers\Admin\ContactsListContactController; use App\Http\Controllers\Admin\StatisticsController; use Illuminate\Support\Facades\Route; -Route::redirect('/', '/login')->name('account.home'); +Route::redirect('/', 'login')->name('account.home'); Route::get('documentation', 'Account\AccountController@documentation')->name('account.documentation'); Route::get('about', 'AboutController@about')->name('about'); @@ -77,7 +77,7 @@ if (publicRegistrationEnabled()) { } if (config('app.web_panel')) { - Route::prefix('recover')->controller(RecoveryController::class)->group(function () { + Route::prefix('recovery')->controller(RecoveryController::class)->group(function () { Route::get('phone', 'showPhone')->name('account.recovery.show.phone'); Route::get('email', 'showEmail')->name('account.recovery.show.email'); Route::post('/', 'send')->name('account.recovery.send'); @@ -203,6 +203,7 @@ if (config('app.web_panel')) { Route::get('/', 'index')->name('index'); Route::get('create', 'create')->name('create'); Route::post('/', 'store')->name('store'); + Route::post('{contacts_list_id}/search', 'search')->name('search'); Route::get('{contacts_list_id}/edit', 'edit')->name('edit'); Route::put('{contacts_list_id}', 'update')->name('update'); Route::get('{contacts_list_id}/delete', 'delete')->name('delete');