HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/posscale/.trash/1app.3/Http/Controllers/SourceController.php
<?php

namespace App\Http\Controllers;

use App\Actions\SmtpAction;
use App\Http\Requests\Settings\AddSettings;
use App\Models\connectionSettings;
use App\Models\Printer;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redirect;
use Illuminate\View\View;
use League\Flysystem\Filesystem;
use League\Flysystem\FilesystemException;
use League\Flysystem\Ftp\ConnectivityChecker;
use League\Flysystem\Ftp\FtpAdapter;
use League\Flysystem\Ftp\FtpConnectionException;
use League\Flysystem\Ftp\FtpConnectionOptions;
use League\Flysystem\PhpseclibV3\SftpAdapter;
use League\Flysystem\PhpseclibV3\SftpConnectionProvider;
use League\Flysystem\UnableToCheckExistence;
use League\Flysystem\UnixVisibility\PortableVisibilityConverter;

class SourceController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index(Request $request): View
    {
        $search = $request->input('search');

        $connections = connectionSettings::paginate(15);

        return view('tenant.settings.list', ['connections' => $connections, 'search' => $search]);
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create(Request $request): View
    {
        return view('tenant.settings.connection');
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(AddSettings $request)
    {
        $connection_details = $request->validated();
        $connection_settings = new connectionSettings();
        $connection_settings->type = $connection_details['type'];
        $data = array();
        $connection_settings->connection_status = 0;
        if ($connection_details['type'] == 'SMTP') {
            $data['type_for_monitoring'] = $connection_details['type_for_monitoring'];
            $data['host'] = $connection_details['host'];
            $data['port'] = $connection_details['port'];
            $data['user_name'] = $connection_details['user_name'];
            $data['user_password'] = $connection_details['user_password'];
            $data['from'] = $connection_details['from'];
            $data['from_name'] = $connection_details['from_name'];

            $smtp_details['client'] = [
                'host'          => $data['host'],
                'port'          => $data['port'],
                'encryption'    => 'ssl',
                'username'      => $data['user_name'],
                'password'      =>  $data['user_password'],
                'protocol'      => $data['type_for_monitoring']
            ];
            $connection_settings->connection_status = $this->validate_smtp($smtp_details);
            if ($connection_settings->connection_status) {
                $connection_settings->last_connection_date = date('Y-m-d h:i:s');
            }
        } elseif ($connection_details['type'] == 'FTP') {
            $data['ftp_protocol'] = $connection_details['ftp_protocol'];
            $data['ftp_host'] = $connection_details['ftp_host'];
            $data['ftp_port'] = $connection_details['ftp_port'];
            $data['ftp_user_name'] = $connection_details['ftp_user_name'];
            $data['ftp_password'] = $connection_details['ftp_password'];
            $data['ftp_folder'] = $connection_details['ftp_folder'];

            $status = $this->validate_ftp($data);
            if ($status == 1) {
                $connection_settings->connection_status = 1;
                $connection_settings->last_connection_date = date('Y-m-d h:i:s');
            } else {
                $connection_settings->connection_status = 0;
            }
        }
        $connection_settings->data = json_encode($data);


        $connection_settings->save();
        return Redirect::route('settings.index')->with('status', 'record-inserted');
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(int $id): View
    {
        $row = connectionSettings::find($id);
        return view('tenant.settings.edit-connection', ['connection' => $row]);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(AddSettings $request, string $id)
    {
        $connection_settings = connectionSettings::find($id);
        $connection_details = $request->validated();
        $connection_settings->type = $connection_details['type'];
        $data = array();
        $connection_settings->connection_status = 0;
        if ($connection_details['type'] == 'SMTP') {
            $data['type_for_monitoring'] = $connection_details['type_for_monitoring'];
            $data['host'] = $connection_details['host'];
            $data['port'] = $connection_details['port'];
            $data['user_name'] = $connection_details['user_name'];
            $data['user_password'] = $connection_details['user_password'];
            $data['from'] = $connection_details['from'];
            $data['from_name'] = $connection_details['from_name'];

            $smtp_details['client'] = [
                'host'          => $data['host'],
                'port'          => $data['port'],
                'encryption'    => 'ssl',
                'username'      => $data['user_name'],
                'password'      =>  $data['user_password'],
                'protocol'      => $data['type_for_monitoring']
            ];
            $connection_settings->connection_status = $this->validate_smtp($smtp_details);
            if ($connection_settings->connection_status) {
                $connection_settings->last_connection_date = date('Y-m-d h:i:s');
            }
        } elseif ($connection_details['type'] == 'FTP') {
            $data['ftp_protocol'] = $connection_details['ftp_protocol'];
            $data['ftp_host'] = $connection_details['ftp_host'];
            $data['ftp_port'] = $connection_details['ftp_port'];
            $data['ftp_user_name'] = $connection_details['ftp_user_name'];
            $data['ftp_password'] = $connection_details['ftp_password'];
            $data['ftp_folder'] = $connection_details['ftp_folder'];

            $status = $this->validate_ftp($data);
            if ($status == 1) {
                $connection_settings->connection_status = 1;
                $connection_settings->last_connection_date = date('Y-m-d h:i:s');
            } else {
                $connection_settings->connection_status = 0;
                $data['error'] = $status;
            }
        }

        $connection_settings->data = json_encode($data);


        $connection_settings->save();
        // Add code here to test connection.
        return Redirect::route('settings.index')->with('status', 'record-inserted');
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(int $id)
    {
        $connection_settings = connectionSettings::find($id);
        $connection_settings->delete();
        return Redirect::route('settings.index')->with('message', 'User delete successfully.');
    }

    /**
     * Validate SMTP details and set status according to it
     */

    public function validate_smtp(array $smtp_details): Int
    {
        $smtp_connection = new SmtpAction($smtp_details);
        $connection_info = $smtp_connection->testConnection();
        if ($connection_info['status']) {
            return 1;
        }
        return 0;
    }



    /**
     * Validate SMTP details and set status according to it
     */

    public function validate_ftp(array $ftp_details)
    {
        // The internal adapter


        if ($ftp_details['ftp_protocol'] == 'ftp') {

            $adapter = new FtpAdapter(
                // Connection options
                FtpConnectionOptions::fromArray([
                    'host' => $ftp_details['ftp_host'], // required
                    'root' => $ftp_details['ftp_folder'], // required
                    'username' => $ftp_details['ftp_user_name'], // required
                    'password' => $ftp_details['ftp_password'], // required
                    'port' =>  (int)$ftp_details['ftp_port'],
                    'ssl' => false,
                    'timeout' => 90,
                    'utf8' => false,
                    'passive' => true,
                    'transferMode' => FTP_BINARY,
                    'systemType' => null, // 'windows' or 'unix'
                    'ignorePassiveAddress' => null, // true or false
                    'timestampsOnUnixListingsEnabled' => false, // true or false
                    'recurseManually' => true // true 
                ])
            );

            $filesystem = new Filesystem($adapter);
            try {
                // Perform a basic operation (e.g., checking if root exists)
                $filesystem->fileExists('test.txt'); // Adjust with any existing file
                return 1;
            } catch (UnableToCheckExistence $e) {
                return  $e->getMessage();
            } catch (\Exception $e) {
                return  $e->getMessage();
            }
        }

        if ($ftp_details['ftp_protocol'] == 'sftp') {
            $filesystem = new Filesystem(new SftpAdapter(
                new SftpConnectionProvider(
                    $ftp_details['ftp_host'],
                    $ftp_details['ftp_user_name'],
                    $ftp_details['ftp_password'], // password (optional, default: null) set to null if privateKey is used
                    null, // private key (optional, default: null) can be used instead of password, set to null if password is set
                    null, // passphrase (optional, default: null), set to null if privateKey is not used or has no passphrase
                    (int)$ftp_details['ftp_port'], // port (optional, default: 22)
                    false, // use agent (optional, default: false)
                    30, // timeout (optional, default: 10)
                    10, // max tries (optional, default: 4)
                    null, // host fingerprint (optional, default: null),
                    null, // connectivity checker (must be an implementation of 'League\Flysystem\PhpseclibV2\ConnectivityChecker' to check if a connection can be established (optional, omit if you don't need some special handling for setting reliable connections)
                ),
                $ftp_details['ftp_folder'],
                PortableVisibilityConverter::fromArray([
                    'file' => [
                        'public' => 0640,
                        'private' => 0604,
                    ],
                    'dir' => [
                        'public' => 0740,
                        'private' => 7604,
                    ],
                ])
            ));



            try {
                // Perform a basic operation (e.g., checking if root exists)
                $filesystem->fileExists('test.txt'); // Adjust with any existing file
                return 1;
            } catch (UnableToCheckExistence $e) {
                return  $e->getMessage();
            } catch (\Exception $e) {
                return  $e->getMessage();
            }
        }
    }
}