shell bypass 403

UnknownSec Shell


name : CampaignController.php
<?php

    namespace App\Http\Controllers\API;

    use App\Http\Controllers\Controller;
    use App\Http\Requests\Campaigns\SendAPISMS;
    use App\Models\Campaigns;
    use App\Models\PhoneNumbers;
    use App\Models\Reports;
    use App\Models\Senderid;
    use App\Models\Traits\ApiResponser;
    use App\Repositories\Contracts\CampaignRepository;
    use Carbon\Carbon;
    use Illuminate\Http\JsonResponse;
    use libphonenumber\NumberParseException;
    use libphonenumber\PhoneNumberUtil;

    class CampaignController extends Controller
    {
        use ApiResponser;

        protected CampaignRepository $campaigns;

        /**
         * CampaignController constructor.
         *
         * @param CampaignRepository $campaigns
         */
        public function __construct(CampaignRepository $campaigns)
        {
            $this->campaigns = $campaigns;
        }

        /**
         * sms sending
         *
         * @param Campaigns  $campaign
         * @param SendAPISMS $request
         *
         * @return JsonResponse
         * @throws NumberParseException
         */
        public function smsSend(Campaigns $campaign, SendAPISMS $request): JsonResponse
        {

            if (config('app.stage') == 'demo') {
                return response()->json([
                    'status'  => 'error',
                    'message' => 'Sorry! This option is not available in demo mode',
                ]);
            }

            if (request()->user()->api_sending_server == null) {
                return response()->json([
                    'status'  => 'error',
                    'message' => __('locale.campaigns.sending_server_not_available'),
                ]);
            }

            $input = $request->all();
            $user  = request()->user();


            $sms_type = $request->sms_type;

            if ($sms_type == 'unicode') {
                $db_sms_type = 'plain';
            } else {
                $db_sms_type = $sms_type;
            }

            if ($sms_type == 'plain' || $sms_type == 'unicode') {
                $capabilities_type = 'sms';
            } else {
                $capabilities_type = $sms_type;
            }

            if ( ! $user) {
                return response()->json([
                    'status'  => 'error',
                    'message' => __('locale.auth.user_not_exist'),
                ]);
            }

            $sender_id = $request->sender_id;
            $input['originator'] = 'sender_id';

            if ($user->customer->getOption('sender_id_verification') == 'yes') {

                $check_sender_id = Senderid::where('user_id', $user->id)->where('sender_id', $sender_id)->where('status', 'active')->first();

                $input['originator'] = 'sender_id';

                if ( ! $check_sender_id) {
                    $number = PhoneNumbers::where('user_id', $user->id)->where('number', $sender_id)->where('status', 'assigned')->first();

                    if ( ! $number) {
                        return response()->json([
                            'status'  => 'error',
                            'message' => __('locale.sender_id.sender_id_invalid', ['sender_id' => $sender_id]),
                        ]);
                    }

                    $capabilities = str_contains($number->capabilities, $capabilities_type);

                    if ( ! $capabilities) {
                        return response()->json([
                            'status'  => 'error',
                            'message' => __('locale.sender_id.sender_id_sms_capabilities', ['sender_id' => $sender_id, 'type' => $db_sms_type]),
                        ]);
                    }

                    $input['originator']   = 'phone_number';
                    $input['phone_number'] = $sender_id;

                }
            }


            if ( ! isset($request->type)) {
                $sms_type = 'plain';
            } else {
                $sms_type = $request->type;
            }

            if ($sms_type == 'plain' || $sms_type == 'unicode' || $sms_type == 'voice' || $sms_type == 'mms' || $sms_type == 'whatsapp') {

                if ($sms_type == 'voice' && $request->gender == null && $request->language == null) {
                    return response()->json([
                        'status'  => 'error',
                        'message' => 'Language and gender parameters are required',
                    ]);
                }


                if ($sms_type == 'mms' && $request->media_url == null) {
                    return response()->json([
                        'status'  => 'error',
                        'message' => 'media_url parameter is required',
                    ]);
                }

                if ($sms_type == 'mms' && filter_var($request->media_url, FILTER_VALIDATE_URL) === false) {
                    return response()->json([
                        'status'  => 'error',
                        'message' => 'Valid media url is required.',
                    ]);
                }


                $input['sms_type']       = $sms_type;
                $input['api_key']        = request()->user()->api_token;
                $input['sending_server'] = request()->user()->api_sending_server;

                if (isset($request->schedule_time)) {
                    $input['name']      = 'API_' . time();
                    $input['sender_id'] = [
                        $request->sender_id,
                    ];

                    $input['recipients']      = $request->recipient;
                    $input['delimiter']       = ',';
                    $input['schedule']        = true;
                    $input['schedule_date']   = Carbon::parse($request->schedule_time)->toDateString();
                    $input['schedule_time']   = Carbon::parse($request->schedule_time)->setSeconds(0)->format('H:i');
                    $input['timezone']        = request()->user()->timezone;
                    $input['frequency_cycle'] = 'onetime';

                    $data = $this->campaigns->sendApi($campaign, $input);

                    if (isset($data->getData()->status)) {

                        if ($data->getData()->status == 'success') {
                            return $this->success(null, $data->getData()->message);
                        }

                        return $this->error($data->getData()->message, 404);

                    }

                } else {

                    if (substr_count($request->recipient, ',')) {

                        $input['name']      = 'API_' . time();
                        $input['sender_id'] = [
                            $request->sender_id,
                        ];

                        $input['recipients'] = $request->recipient;
                        $input['delimiter']  = ',';

                        $data = $this->campaigns->sendApi($campaign, $input);

                        if (isset($data->getData()->status)) {

                            if ($data->getData()->status == 'success') {
                                return $this->success(null, $data->getData()->message);
                            }

                            return $this->error($data->getData()->message, 404);

                        }

                    } else {

                        try {

                            $phone             = str_replace(['+', '(', ')', '-', ' '], '', $input['recipient']);
                            $phoneUtil         = PhoneNumberUtil::getInstance();
                            $phoneNumberObject = $phoneUtil->parse('+' . $phone);
                            if ($phoneUtil->isPossibleNumber($phoneNumberObject)) {
                                $input['recipient']    = $phoneNumberObject->getNationalNumber();
                                $input['country_code'] = $phoneNumberObject->getCountryCode();
                                $data                  = $this->campaigns->quickSend($campaign, $input);
                                if (isset($data->getData()->status)) {

                                    if ($data->getData()->status == 'success') {
                                        $reports = Reports::select('uid', 'to', 'from', 'message', 'status', 'cost')->find($data->getData()->data->id);

                                        return $this->success($reports, $data->getData()->message);
                                    }

                                    return $this->error($data->getData()->message, 404);

                                }
                            }

                            return $this->error(__('locale.customer.invalid_phone_number', ['phone' => $phone]), 404);

                        } catch (NumberParseException $exception) {
                            return $this->error($exception->getMessage(), 404);
                        }
                    }

                }

                return $this->error(__('locale.exceptions.something_went_wrong'), 404);
            }

            return $this->error(__('locale.exceptions.invalid_sms_type'), 404);

        }

        /**
         * view single sms reports
         *
         * @param Reports $uid
         *
         * @return JsonResponse
         */
        public function viewSMS(Reports $uid): JsonResponse
        {

            if (config('app.stage') == 'demo') {
                return response()->json([
                    'status'  => 'error',
                    'message' => 'Sorry! This option is not available in demo mode',
                ]);
            }

            if (request()->user()->tokenCan('view_reports')) {
                $reports = Reports::select('uid', 'to', 'from', 'message', 'status', 'cost')->where('api_key', request()->user()->api_token)->find($uid->id);
                if ($reports) {
                    return $this->success($reports);
                }

                return $this->error('SMS Info not found', 404);
            }

            return $this->error(__('locale.http.403.description'), 403);
        }


        /**
         * get all messages
         *
         * @return JsonResponse
         */
        public function viewAllSMS(): JsonResponse
        {

            if (config('app.stage') == 'demo') {
                return response()->json([
                    'status'  => 'error',
                    'message' => 'Sorry! This option is not available in demo mode',
                ]);
            }

            if (request()->user()->tokenCan('view_reports')) {
                $reports = Reports::select('uid', 'to', 'from', 'message', 'status', 'cost')->orderBy('created_at', 'desc')->where('api_key', request()->user()->api_token)->paginate(25);
                if ($reports) {
                    return $this->success($reports);
                }

                return $this->error('SMS Info not found', 404);
            }

            return $this->error(__('locale.http.403.description'), 403);
        }

    }

© 2025 UnknownSec
afwwrfwafr45458465
Password