add mail sender in setting

This commit is contained in:
yashkanakiya
2023-03-11 18:58:59 +05:30
parent b4aa254b68
commit 959aa257b4
23 changed files with 1718 additions and 110 deletions

View File

@ -3,80 +3,29 @@
namespace Crater\Http\Controllers\V1\Admin\Settings;
use Crater\Http\Controllers\Controller;
use Crater\Http\Requests\MailEnvironmentRequest;
use Crater\Http\Requests\TestMailDriverRequest;
use Crater\Mail\TestMail;
use Crater\Models\Setting;
use Crater\Space\EnvironmentManager;
use Illuminate\Http\JsonResponse;
use Crater\Models\MailSender;
use Illuminate\Http\Request;
use Mail;
class MailConfigurationController extends Controller
{
/**
* @var EnvironmentManager
*/
protected $environmentManager;
/**
* @param EnvironmentManager $environmentManager
*/
public function __construct(EnvironmentManager $environmentManager)
{
$this->environmentManager = $environmentManager;
}
/**
*
* @param MailEnvironmentRequest $request
* @return JsonResponse
*/
public function saveMailEnvironment(MailEnvironmentRequest $request)
public function TestMailDriver(TestMailDriverRequest $request)
{
$this->authorize('manage email config');
$setting = Setting::getSetting('profile_complete');
$results = $this->environmentManager->saveMailVariables($request);
MailSender::setMailConfiguration($request->mail_sender_id);
if ($setting !== 'COMPLETED') {
Setting::setSetting('profile_complete', 4);
}
Mail::to($request->to)->send(new TestMail($request->subject, $request->message));
return response()->json($results);
return response()->json([
'success' => true,
]);
}
public function getMailEnvironment()
public function getMailDrivers(Request $request)
{
$this->authorize('manage email config');
$MailData = [
'mail_driver' => config('mail.driver'),
'mail_host' => config('mail.host'),
'mail_port' => config('mail.port'),
'mail_username' => config('mail.username'),
'mail_password' => config('mail.password'),
'mail_encryption' => config('mail.encryption'),
'from_name' => config('mail.from.name'),
'from_mail' => config('mail.from.address'),
'mail_mailgun_endpoint' => config('services.mailgun.endpoint'),
'mail_mailgun_domain' => config('services.mailgun.domain'),
'mail_mailgun_secret' => config('services.mailgun.secret'),
'mail_ses_key' => config('services.ses.key'),
'mail_ses_secret' => config('services.ses.secret'),
];
return response()->json($MailData);
}
/**
*
* @return JsonResponse
*/
public function getMailDrivers()
{
$this->authorize('manage email config');
$drivers = [
'smtp',
'mail',
@ -87,21 +36,4 @@ class MailConfigurationController extends Controller
return response()->json($drivers);
}
public function testEmailConfig(Request $request)
{
$this->authorize('manage email config');
$this->validate($request, [
'to' => 'required|email',
'subject' => 'required',
'message' => 'required',
]);
Mail::to($request->to)->send(new TestMail($request->subject, $request->message));
return response()->json([
'success' => true,
]);
}
}

View File

@ -14,7 +14,7 @@ class MailSenderRequest extends FormRequest
*/
public function authorize()
{
return false;
return true;
}
/**

View File

@ -0,0 +1,39 @@
<?php
namespace Crater\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class TestMailDriverRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'to' => [
'required',
'email'
],
'subject' => [
'required'
],
'message' => [
'required'
],
];
}
}

View File

@ -5,6 +5,7 @@ namespace Crater\Models;
use Crater\Http\Requests\MailSenderRequest;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Config;
class MailSender extends Model
{
@ -74,4 +75,25 @@ class MailSender extends Model
return $this;
}
public static function setMailConfiguration($id, $check = null)
{
$mailSender = MailSender::find($id);
$settings = $mailSender->settings;
$settings['driver'] = $mailSender->driver;
$settings['from'] = [
'address' => $mailSender->from_address,
'name' => $mailSender->from_name
];
Config::set('mail', $settings);
if ($check) {
return $mailSender;
}
return true;
}
}

View File

@ -0,0 +1,123 @@
<?php
namespace Crater\Policies;
use Crater\Models\MailSender;
use Crater\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
use Silber\Bouncer\BouncerFacade;
class MailSenderPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view any models.
*
* @param \Crater\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function viewAny(User $user)
{
if (BouncerFacade::can('view-mail-sender', MailSender::class)) {
return true;
}
return false;
}
/**
* Determine whether the user can view the model.
*
* @param \Crater\Models\User $user
* @param \Crater\Models\MailSender $mailSender
* @return \Illuminate\Auth\Access\Response|bool
*/
public function view(User $user, MailSender $mailSender)
{
if (BouncerFacade::can('view-mail-sender', $mailSender) && $user->hasCompany($mailSender->company_id)) {
return true;
}
return false;
}
/**
* Determine whether the user can create models.
*
* @param \Crater\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function create(User $user)
{
if (BouncerFacade::can('create-mail-sender', MailSender::class)) {
return true;
}
return false;
}
/**
* Determine whether the user can update the model.
*
* @param \Crater\Models\User $user
* @param \Crater\Models\MailSender $mailSender
* @return \Illuminate\Auth\Access\Response|bool
*/
public function update(User $user, MailSender $mailSender)
{
if (BouncerFacade::can('edit-mail-sender', $mailSender) && $user->hasCompany($mailSender->company_id)) {
return true;
}
return false;
}
/**
* Determine whether the user can delete the model.
*
* @param \Crater\Models\User $user
* @param \Crater\Models\MailSender $mailSender
* @return \Illuminate\Auth\Access\Response|bool
*/
public function delete(User $user, MailSender $mailSender)
{
if (BouncerFacade::can('delete-mail-sender', $mailSender) && $user->hasCompany($mailSender->company_id)) {
return true;
}
return false;
}
/**
* Determine whether the user can restore the model.
*
* @param \Crater\Models\User $user
* @param \Crater\Models\MailSender $mailSender
* @return \Illuminate\Auth\Access\Response|bool
*/
public function restore(User $user, MailSender $mailSender)
{
if (BouncerFacade::can('delete-mail-sender', $mailSender) && $user->hasCompany($mailSender->company_id)) {
return true;
}
return false;
}
/**
* Determine whether the user can permanently delete the model.
*
* @param \Crater\Models\User $user
* @param \Crater\Models\MailSender $mailSender
* @return \Illuminate\Auth\Access\Response|bool
*/
public function forceDelete(User $user, MailSender $mailSender)
{
if (BouncerFacade::can('delete-mail-sender', $mailSender) && $user->hasCompany($mailSender->company_id)) {
return true;
}
return false;
}
}

View File

@ -39,6 +39,7 @@ class AuthServiceProvider extends ServiceProvider
\Crater\Models\CustomField::class => \Crater\Policies\CustomFieldPolicy::class,
\Crater\Models\User::class => \Crater\Policies\UserPolicy::class,
\Crater\Models\Item::class => \Crater\Policies\ItemPolicy::class,
\Crater\Models\MailSender::class => \Crater\Policies\MailSenderPolicy::class,
\Silber\Bouncer\Database\Role::class => \Crater\Policies\RolePolicy::class,
\Crater\Models\Unit::class => \Crater\Policies\UnitPolicy::class,
\Crater\Models\RecurringInvoice::class => \Crater\Policies\RecurringInvoicePolicy::class,