Fixes for client portal login/auth/register pages

This commit is contained in:
David Bomba 2021-05-27 09:14:21 +10:00
parent 1954ff37ae
commit c125dca154
15 changed files with 89 additions and 23 deletions

View File

@ -13,6 +13,7 @@ namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\Account;
use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\Factory;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails; use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -50,11 +51,15 @@ class ContactForgotPasswordController extends Controller
* *
* @return Factory|View * @return Factory|View
*/ */
public function showLinkRequestForm() public function showLinkRequestForm(Request $request)
{ {
$account_id = $request->get('account_id');
$account = Account::find($account_id);
return $this->render('auth.passwords.request', [ return $this->render('auth.passwords.request', [
'title' => 'Client Password Reset', 'title' => 'Client Password Reset',
'passwordEmailRoute' => 'client.password.email', 'passwordEmailRoute' => 'client.password.email',
'account' => $account
]); ]);
} }

View File

@ -13,6 +13,7 @@ namespace App\Http\Controllers\Auth;
use App\Events\Contact\ContactLoggedIn; use App\Events\Contact\ContactLoggedIn;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\Account;
use App\Models\ClientContact; use App\Models\ClientContact;
use App\Utils\Ninja; use App\Utils\Ninja;
use Auth; use Auth;
@ -31,9 +32,13 @@ class ContactLoginController extends Controller
$this->middleware('guest:contact', ['except' => ['logout']]); $this->middleware('guest:contact', ['except' => ['logout']]);
} }
public function showLoginForm() public function showLoginForm(Request $request)
{ {
return $this->render('auth.login'); $account_id = $request->get('account_id');
$account = Account::find($account_id);
return $this->render('auth.login', ['account' => $account]);
} }
public function login(Request $request) public function login(Request $request)

View File

@ -24,7 +24,7 @@ class ContactRegisterController extends Controller
$company = Company::where('company_key', $key)->firstOrFail(); $company = Company::where('company_key', $key)->firstOrFail();
return render('auth.register', ['company' => $company]); return render('auth.register', ['company' => $company, 'account' => $company->account]);
} }
public function register(RegisterRequest $request) public function register(RegisterRequest $request)

View File

@ -12,6 +12,7 @@
namespace App\Http\Controllers\Auth; namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\Account;
use Illuminate\Contracts\View\Factory; use Illuminate\Contracts\View\Factory;
use Illuminate\Foundation\Auth\ResetsPasswords; use Illuminate\Foundation\Auth\ResetsPasswords;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -62,8 +63,11 @@ class ContactResetPasswordController extends Controller
*/ */
public function showResetForm(Request $request, $token = null) public function showResetForm(Request $request, $token = null)
{ {
$account_id = $request->get('account_id');
$account = Account::find($account_id);
return $this->render('auth.passwords.reset')->with( return $this->render('auth.passwords.reset')->with(
['token' => $token, 'email' => $request->email] ['token' => $token, 'email' => $request->email, 'account' => $account]
); );
} }

View File

@ -13,6 +13,7 @@ namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Libraries\MultiDB; use App\Libraries\MultiDB;
use App\Models\Account;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails; use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Password; use Illuminate\Support\Facades\Password;
@ -105,7 +106,6 @@ class ForgotPasswordController extends Controller
public function sendResetLinkEmail(Request $request) public function sendResetLinkEmail(Request $request)
{ {
MultiDB::userFindAndSetDb($request->input('email')); MultiDB::userFindAndSetDb($request->input('email'));
$user = MultiDB::hasUser(['email' => $request->input('email')]); $user = MultiDB::hasUser(['email' => $request->input('email')]);
$this->validateEmail($request); $this->validateEmail($request);

View File

@ -16,6 +16,7 @@ use App\Http\Middleware\Authenticate;
use App\Http\Middleware\CheckClientExistence; use App\Http\Middleware\CheckClientExistence;
use App\Http\Middleware\CheckForMaintenanceMode; use App\Http\Middleware\CheckForMaintenanceMode;
use App\Http\Middleware\ClientPortalEnabled; use App\Http\Middleware\ClientPortalEnabled;
use App\Http\Middleware\ContactAccount;
use App\Http\Middleware\ContactKeyLogin; use App\Http\Middleware\ContactKeyLogin;
use App\Http\Middleware\ContactRegister; use App\Http\Middleware\ContactRegister;
use App\Http\Middleware\ContactSetDb; use App\Http\Middleware\ContactSetDb;
@ -141,6 +142,7 @@ class Kernel extends HttpKernel
'api_secret_check' => ApiSecretCheck::class, 'api_secret_check' => ApiSecretCheck::class,
'contact_token_auth' => ContactTokenAuth::class, 'contact_token_auth' => ContactTokenAuth::class,
'contact_db' => ContactSetDb::class, 'contact_db' => ContactSetDb::class,
'contact_account' => ContactAccount::class,
'domain_db' => SetDomainNameDb::class, 'domain_db' => SetDomainNameDb::class,
'email_db' => SetEmailDb::class, 'email_db' => SetEmailDb::class,
'invite_db' => SetInviteDb::class, 'invite_db' => SetInviteDb::class,
@ -182,5 +184,6 @@ class Kernel extends HttpKernel
PasswordProtection::class, PasswordProtection::class,
Locale::class, Locale::class,
SubstituteBindings::class, SubstituteBindings::class,
ContactAccount::class,
]; ];
} }

View File

@ -0,0 +1,41 @@
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Http\Middleware;
use App\Libraries\MultiDB;
use App\Models\Account;
use App\Utils\Ninja;
use Closure;
use Illuminate\Http\Request;
class ContactAccount
{
/**
* Handle an incoming request.
*
* @param Request $request
* @param Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(!Ninja::isHosted()) {
$account_id = Account::first()->id;
$request->attributes->add(['account_id' => $account_id]);
}
return $next($request);
}
}

View File

@ -48,7 +48,11 @@ class SetDomainNameDb
'portal_mode' => 'subdomain', 'portal_mode' => 'subdomain',
]; ];
if(!MultiDB::findAndSetDbByDomain($query)){ if($company = MultiDB::findAndSetDbByDomain($query)){
$request->attributes->add(['account_id' => $company->account_id]);
}
else
{
if ($request->json) { if ($request->json) {
return response()->json($error, 403); return response()->json($error, 403);
} else { } else {
@ -66,7 +70,11 @@ class SetDomainNameDb
'portal_mode' => 'domain', 'portal_mode' => 'domain',
]; ];
if(!MultiDB::findAndSetDbByDomain($query)){ if($company = MultiDB::findAndSetDbByDomain($query)){
$request->attributes->add(['account_id' => $company->account_id]);
}
else
{
if ($request->json) { if ($request->json) {
return response()->json($error, 403); return response()->json($error, 403);
} else { } else {

View File

@ -274,14 +274,14 @@ class MultiDB
{ {
if (! config('ninja.db.multi_db_enabled')) if (! config('ninja.db.multi_db_enabled'))
return (Company::where($query_array)->exists() === true); return (Company::where($query_array)->first());
$current_db = config('database.default'); $current_db = config('database.default');
foreach (self::$dbs as $db) { foreach (self::$dbs as $db) {
if ($company = Company::on($db)->where($query_array)->first()) { if ($company = Company::on($db)->where($query_array)->first()) {
self::setDb($company->db); self::setDb($company->db);
return true; return $company;
} }
} }

View File

@ -8,7 +8,7 @@
@section('body') @section('body')
<div class="grid lg:grid-cols-3"> <div class="grid lg:grid-cols-3">
@if(\App\Models\Account::count() > 0 && !\App\Models\Account::first()->isPaid()) @if($account && !$account->isPaid())
<div class="hidden lg:block col-span-1 bg-red-100 h-screen"> <div class="hidden lg:block col-span-1 bg-red-100 h-screen">
<img src="{{ asset('images/bg-home2018b.jpg') }}" <img src="{{ asset('images/bg-home2018b.jpg') }}"
class="w-full h-screen object-cover" class="w-full h-screen object-cover"
@ -18,7 +18,7 @@
<div class="col-span-2 h-screen flex"> <div class="col-span-2 h-screen flex">
<div class="m-auto md:w-1/2 lg:w-1/4"> <div class="m-auto md:w-1/2 lg:w-1/4">
@if(\App\Models\Account::count() > 0 && !\App\Models\Account::first()->isPaid()) @if($account && !$account->isPaid())
<div> <div>
<img src="{{ asset('images/invoiceninja-black-logo-2.png') }}" class="border-b border-gray-100 h-18 pb-4" alt="Invoice Ninja logo"> <img src="{{ asset('images/invoiceninja-black-logo-2.png') }}" class="border-b border-gray-100 h-18 pb-4" alt="Invoice Ninja logo">
</div> </div>

View File

@ -3,7 +3,7 @@
@section('body') @section('body')
<div class="grid lg:grid-cols-3"> <div class="grid lg:grid-cols-3">
@if(\App\Models\Account::count() > 0 && !\App\Models\Account::first()->isPaid()) @if($account && !$account->isPaid())
<div class="hidden lg:block col-span-1 bg-red-100 h-screen"> <div class="hidden lg:block col-span-1 bg-red-100 h-screen">
<img src="https://www.invoiceninja.com/wp-content/uploads/2018/04/bg-home2018b.jpg" <img src="https://www.invoiceninja.com/wp-content/uploads/2018/04/bg-home2018b.jpg"
class="w-full h-screen object-cover" class="w-full h-screen object-cover"
@ -12,7 +12,7 @@
@endif @endif
<div class="col-span-2 h-screen flex"> <div class="col-span-2 h-screen flex">
<div class="m-auto w-1/2 md:w-1/3 lg:w-1/4"> <div class="m-auto w-1/2 md:w-1/3 lg:w-1/4">
@if(\App\Models\Account::count() > 0 && !\App\Models\Account::first()->isPaid()) @if($account && !$account->isPaid())
<div> <div>
<img src="{{ asset('images/invoiceninja-black-logo-2.png') }}" class="border-b border-gray-100 h-18 pb-4" alt="Invoice Ninja logo"> <img src="{{ asset('images/invoiceninja-black-logo-2.png') }}" class="border-b border-gray-100 h-18 pb-4" alt="Invoice Ninja logo">
</div> </div>

View File

@ -3,7 +3,7 @@
@section('body') @section('body')
<div class="grid lg:grid-cols-3"> <div class="grid lg:grid-cols-3">
@if(\App\Models\Account::count() > 0 && !\App\Models\Account::first()->isPaid()) @if($account && !$account->isPaid())
<div class="hidden lg:block col-span-1 bg-red-100 h-screen"> <div class="hidden lg:block col-span-1 bg-red-100 h-screen">
<img src="https://www.invoiceninja.com/wp-content/uploads/2018/04/bg-home2018b.jpg" <img src="https://www.invoiceninja.com/wp-content/uploads/2018/04/bg-home2018b.jpg"
class="w-full h-screen object-cover" class="w-full h-screen object-cover"
@ -14,7 +14,7 @@
<div class="col-span-2 h-screen flex"> <div class="col-span-2 h-screen flex">
<div class="m-auto w-1/2 md:w-1/3 lg:w-1/4"> <div class="m-auto w-1/2 md:w-1/3 lg:w-1/4">
@if(\App\Models\Account::count() > 0 && !\App\Models\Account::first()->isPaid()) @if($account && !$account->isPaid())
<div> <div>
<img src="{{ asset('images/invoiceninja-black-logo-2.png') }}" class="border-b border-gray-100 h-18 pb-4" alt="Invoice Ninja logo"> <img src="{{ asset('images/invoiceninja-black-logo-2.png') }}" class="border-b border-gray-100 h-18 pb-4" alt="Invoice Ninja logo">
</div> </div>

View File

@ -6,7 +6,7 @@
<div class="m-auto md:w-1/3 lg:w-1/5"> <div class="m-auto md:w-1/3 lg:w-1/5">
@if(\App\Models\Account::count() > 0 && !\App\Models\Account::first()->isPaid()) @if($account && !$account->isPaid())
<div> <div>
<img src="{{ asset('images/invoiceninja-black-logo-2.png') }}" class="border-b border-gray-100 h-18 pb-4" alt="Invoice Ninja logo"> <img src="{{ asset('images/invoiceninja-black-logo-2.png') }}" class="border-b border-gray-100 h-18 pb-4" alt="Invoice Ninja logo">
</div> </div>

View File

@ -5,7 +5,7 @@
<div class="flex h-screen"> <div class="flex h-screen">
<div class="m-auto md:w-1/3 lg:w-1/5"> <div class="m-auto md:w-1/3 lg:w-1/5">
@if(\App\Models\Account::count() > 0 && !\App\Models\Account::first()->isPaid()) @if($account && !$account->isPaid())
<div> <div>
<img src="{{ asset('images/invoiceninja-black-logo-2.png') }}" class="border-b border-gray-100 h-18 pb-4" alt="Invoice Ninja logo"> <img src="{{ asset('images/invoiceninja-black-logo-2.png') }}" class="border-b border-gray-100 h-18 pb-4" alt="Invoice Ninja logo">
</div> </div>

View File

@ -2,17 +2,17 @@
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
Route::get('client', 'Auth\ContactLoginController@showLoginForm')->name('client.catchall'); //catch all Route::get('client', 'Auth\ContactLoginController@showLoginForm')->name('client.catchall')->middleware(['domain_db', 'contact_account','locale']); //catch all
Route::get('client/login', 'Auth\ContactLoginController@showLoginForm')->name('client.login')->middleware('locale'); Route::get('client/login', 'Auth\ContactLoginController@showLoginForm')->name('client.login')->middleware(['domain_db', 'contact_account','locale']);
Route::post('client/login', 'Auth\ContactLoginController@login')->name('client.login.submit'); Route::post('client/login', 'Auth\ContactLoginController@login')->name('client.login.submit');
Route::get('client/register/{company_key?}', 'Auth\ContactRegisterController@showRegisterForm')->name('client.register'); Route::get('client/register/{company_key?}', 'Auth\ContactRegisterController@showRegisterForm')->name('client.register')->middleware(['domain_db', 'contact_account','locale']);
Route::post('client/register/{company_key?}', 'Auth\ContactRegisterController@register'); Route::post('client/register/{company_key?}', 'Auth\ContactRegisterController@register');
Route::get('client/password/reset', 'Auth\ContactForgotPasswordController@showLinkRequestForm')->name('client.password.request')->middleware('locale'); Route::get('client/password/reset', 'Auth\ContactForgotPasswordController@showLinkRequestForm')->name('client.password.request')->middleware(['domain_db', 'contact_account','locale']);
Route::post('client/password/email', 'Auth\ContactForgotPasswordController@sendResetLinkEmail')->name('client.password.email')->middleware('locale'); Route::post('client/password/email', 'Auth\ContactForgotPasswordController@sendResetLinkEmail')->name('client.password.email')->middleware('locale');
Route::get('client/password/reset/{token}', 'Auth\ContactResetPasswordController@showResetForm')->name('client.password.reset')->middleware('locale'); Route::get('client/password/reset/{token}', 'Auth\ContactResetPasswordController@showResetForm')->name('client.password.reset')->middleware(['domain_db', 'contact_account','locale']);
Route::post('client/password/reset', 'Auth\ContactResetPasswordController@reset')->name('client.password.update')->middleware('locale'); Route::post('client/password/reset', 'Auth\ContactResetPasswordController@reset')->name('client.password.update')->middleware('locale');
Route::get('view/{entity_type}/{invitation_key}', 'ClientPortal\EntityViewController@index')->name('client.entity_view'); Route::get('view/{entity_type}/{invitation_key}', 'ClientPortal\EntityViewController@index')->name('client.entity_view');