shell bypass 403
<?php
namespace App\Console\Commands;
use App\Helpers\Helper;
use App\Library\Tool;
use App\Models\Campaigns;
use App\Models\Notifications;
use App\Models\SendingServer;
use App\Models\Subscription;
use App\Models\User;
use App\Notifications\SMSUnitRunningLow;
use App\Notifications\SubscriptionExpire;
use Illuminate\Console\Command;
use Illuminate\Support\Carbon;
class CheckUserPreferences extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'user:preferences';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Check user preferences settings';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle(): int
{
$users = User::where('is_customer', 1)->where('status', 1)->cursor();
foreach ($users as $user) {
if ($user->customer->activeSubscription() !== null) {
$subscription = $user->customer->activeSubscription();
if ( ! array_key_exists('send_warning', $subscription->getOptions())) {
$get_options = json_decode($subscription->options, true);
$output = array_replace($get_options, [
'send_warning' => false,
]);
$subscription->update([
'options' => json_encode($output),
]);
}
if ($subscription->getOption('subscription_warning') == 1 && ! $subscription->getOption('send_warning')) {
$check = Subscription::where('user_id', $user->id)
->whereRaw('date(current_period_ends_at) =?', Carbon::now()->addDays($subscription->end_period_last_days)->toDateString())
->first();
if ($check) {
Notifications::create([
'user_id' => $user->id,
'notification_for' => 'customer',
'notification_type' => 'subscription',
'message' => 'Your subscription will end at '.Tool::customerDateTime($subscription->current_period_ends_at),
]);
if ($subscription->getOption('subscription_notify') == 'both') {
$user->notify(new SubscriptionExpire($subscription));
$sending_server = SendingServer::where('status', true)->where('uid', Helper::app_config('notification_sms_gateway'))->first();
if ($sending_server && isset($user->customer->phone)) {
$input = [
'sender_id' => Helper::app_config('notification_sender_id'),
'phone' => $user->customer->phone,
'sending_server' => $sending_server,
'user_id' => 1,
'sms_type' => 'plain',
'status' => null,
'cost' => 1,
'message' => 'Your subscription will end at '.Tool::customerDateTime($check->current_period_ends_at),
];
$campaign = new Campaigns();
$campaign->sendPlainSMS($input);
}
}
if ($subscription->getOption('subscription_notify') == 'email') {
$user->notify(new SubscriptionExpire($subscription));
}
if ($subscription->getOption('subscription_notify') == 'sms') {
$sending_server = SendingServer::where('status', true)->where('uid', Helper::app_config('notification_sms_gateway'))->first();
if ($sending_server && isset($user->customer->phone)) {
$input = [
'sender_id' => Helper::app_config('notification_sender_id'),
'phone' => $user->customer->phone,
'sending_server' => $sending_server,
'sms_type' => 'plain',
'status' => null,
'cost' => 1,
'user_id' => 1,
'message' => 'Your subscription will end at '.Tool::customerDateTime($check->current_period_ends_at),
];
$campaign = new Campaigns();
$campaign->sendPlainSMS($input);
}
}
$get_options = json_decode($subscription->options, true);
$output = array_replace($get_options, [
'send_warning' => true,
]);
$subscription->update([
'options' => json_encode($output),
]);
}
}
if ($subscription->getOption('credit_warning') == 1 && $user->sms_unit != '-1' && ! $subscription->getOption('send_warning')) {
if ($user->sms_unit == $subscription->getOption('credit')) {
Notifications::create([
'user_id' => $user->id,
'notification_for' => 'customer',
'notification_type' => 'subscription',
'message' => 'Your sms unit running low!!',
]);
if ($subscription->getOption('credit_notify') == 'both') {
$user->notify(new SMSUnitRunningLow($user->sms_unit));
$sending_server = SendingServer::where('status', true)->where('uid', Helper::app_config('notification_sms_gateway'))->first();
if ($sending_server && isset($user->customer->phone)) {
$input = [
'sender_id' => Helper::app_config('notification_sender_id'),
'phone' => $user->customer->phone,
'sending_server' => $sending_server,
'user_id' => 1,
'sms_type' => 'plain',
'status' => null,
'cost' => 1,
'message' => 'Your sms unit is running low. Your current sms unit '.$remaining,
];
$campaign = new Campaigns();
$campaign->sendPlainSMS($input);
}
}
if ($subscription->getOption('credit_notify') == 'email') {
$user->notify(new SMSUnitRunningLow($remaining));
}
if ($subscription->getOption('credit_notify') == 'sms') {
$sending_server = SendingServer::where('status', true)->where('uid', Helper::app_config('notification_sms_gateway'))->first();
if ($sending_server && isset($user->customer->phone)) {
$input = [
'sender_id' => Helper::app_config('notification_sender_id'),
'phone' => $user->customer->phone,
'sending_server' => $sending_server,
'user_id' => 1,
'sms_type' => 'plain',
'status' => null,
'cost' => 1,
'message' => 'Your sms unit is running low. Your current sms unit '.$remaining,
];
$campaign = new Campaigns();
$campaign->sendPlainSMS($input);
}
}
$get_options = json_decode($subscription->options, true);
$output = array_replace($get_options, [
'send_warning' => true,
]);
$subscription->update([
'options' => json_encode($output),
]);
}
}
}
}
return 0;
}
}