!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/vendor/coinpaymentsnet/coinpayments-php/src/   drwxr-xr-x
Free 28.33 GB of 117.98 GB (24.01%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


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

/**
 * Class CoinpaymentsValidator
 *
 * Validates fields passed to the CoinpaymentsCurlRequest::execute function.
 * Ensures required fields have been passed, that mutually exclusive fields are used alone
 * and that optional fields, if passed, exist for the given command.
 * Checks some values to see if they are within a permitted range.
 * Checks the type of field values passed to make sure they are what the command expects.
 */
class CoinpaymentsValidator
{

    protected 
$command;
    protected 
$fields;
    
/**
     * @var array $commands_reference An array of the optional and required fields
     * for each API command, including their value's types, specific permitted values
     * and any mutually exclusive rules.
     */
    
protected $commands_reference = [
        
'get_basic_info' => [],
        
'rates' => [
            
'optional' => [
                
'accepted' => [
                    
'type' => 'integer',
                    
'permitted' => [01]
                ],
                
'short' => [
                    
'type' => 'integer',
                    
'permitted' => [01]
                ]
            ]
        ],
        
'balances' => [
            
'optional' => [
                
'all' => [
                    
'type' => 'integer',
                    
'permitted' => [01]
                ]
            ]
        ],
        
'get_deposit_address' => [
            
'required' => [
                
'currency' => [
                    
'type' => 'string'
                
]
            ]
        ],
        
'create_transaction' => [
            
'required' => [
                
'amount' => [
                    
'type' => 'integer'
                
],
                
'currency1' => [
                    
'type' => 'string'
                
],
                
'currency2' => [
                    
'type' => 'string'
                
],
                
'buyer_email' => [
                    
'type' => 'email'
                
]
            ],
            
'optional' => [
                
'address' => [
                    
'type' => 'string'
                
],
                
'buyer_name' => [
                    
'type' => 'string'
                
],
                
'item_name' => [
                    
'type' => 'string'
                
],
                
'item_number' => [
                    
'type' => 'string'
                
],
                
'invoice' => [
                    
'type' => 'string'
                
],
                
'custom' => [
                    
'type' => 'string'
                
],
                
'ipn_url' => [
                    
'type' => 'url'
                
],
                
'success_url' => [
                    
'type' => 'url'
                
],
                
'cancel_url' => [
                    
'type' => 'url'
                
]
            ]
        ],
        
'get_callback_address' => [
            
'required' => [
                
'currency' => [
                    
'type' => 'string'
                
]
            ],
            
'optional' => [
                
'ipn_url' => [
                    
'type' => 'url'
                
],
                
'label' => [
                    
'type' => 'string'
                
]
            ]
        ],
        
'get_tx_info' => [
            
'required' => [
                
'txid' => [
                    
'type' => 'string'
                
]
            ],
            
'optional' => [
                
'full' => [
                    
'type' => 'integer',
                    
'permitted' => [01]
                ]
            ]
        ],
        
'get_tx_info_multi' => [
            
'required' => [
                
'txid' => [
                    
'type' => 'string'
                
]
            ]
        ],
        
'get_tx_ids' => [
            
'optional' => [
                
'limit' => [
                    
'type' => 'integer'
                
],
                
'start' => [
                    
'type' => 'integer'
                
],
                
'newer' => [
                    
'type' => 'integer'
                
],
                
'all' => [
                    
'type' => 'integer',
                    
'permitted' => [01]
                ]
            ]
        ],
        
'create_transfer' => [
            
'required' => [
                
'amount' => [
                    
'type' => 'integer'
                
],
                
'currency' => [
                    
'type' => 'string'
                
]
            ],
            
'one_of' => [
                
'merchant' => [
                    
'type' => 'string'
                
],
                
'pbntag' => [
                    
'type' => 'string'
                
]
            ],
            
'optional' => [
                
'auto_confirm' => [
                    
'type' => 'integer',
                    
'permitted' => [01]
                ]
            ]
        ],
        
'create_withdrawal' => [
            
'required' => [
                
'amount' => [
                    
'type' => 'integer'
                
],
                
'currency' => [
                    
'type' => 'string'
                
]
            ],
            
'one_of' => [
                
'address' => [
                    
'type' => 'string'
                
],
                
'pbntag' => [
                    
'type' => 'string'
                
]
            ],
            
'optional' => [
                
'add_tx_fee' => [
                    
'type' => 'integer',
                    
'permitted' => [01]
                ],
                
'currency2' => [
                    
'type' => 'string'
                
],
                
'dest_tag' => [
                    
'type' => 'string'
                
],
                
'ipn_url' => [
                    
'type' => 'url'
                
],
                
'auto_confirm' => [
                    
'type' => 'integer',
                    
'permitted' => [01]
                ],
                
'note' => [
                    
'type' => 'string'
                
]
            ]
        ],
        
'create_mass_withdrawal' => [
            
'required' => [
                
'wd' => [
                    
'type' => 'array'
                
],
            ]
        ],
        
'convert' => [
            
'required' => [
                
'amount' => [
                    
'type' => 'integer'
                
],
                
'from' => [
                    
'type' => 'string'
                
],
                
'to' => [
                    
'type' => 'string'
                
]
            ],
            
'optional' => [
                
'address' => [
                    
'type' => 'string'
                
],
                
'dest_tag' => [
                    
'type' => 'string'
                
]
            ]
        ],
        
'convert_limits' => [
            
'required' => [
                
'from' => [
                    
'type' => 'string'
                
],
                
'to' => [
                    
'type' => 'string'
                
]
            ]
        ],
        
'get_withdrawal_history' => [
            
'optional' => [
                
'limit' => [
                    
'type' => 'integer'
                
],
                
'start' => [
                    
'type' => 'integer'
                
],
                
'newer' => [
                    
'type' => 'integer'
                
]
            ]
        ],
        
'get_withdrawal_info' => [
            
'required' => [
                
'id' => [
                    
'type' => 'string'
                
]
            ]
        ],
        
'get_conversion_info' => [
            
'required' => [
                
'id' => [
                    
'type' => 'string'
                
]
            ]
        ],
        
'get_pbn_info' => [
            
'required' => [
                
'pbntag' => [
                    
'type' => 'string'
                
]
            ]
        ],
        
'get_pbn_list' => [],
        
'update_pbn_tag' => [
            
'required' => [
                
'tagid' => [
                    
'type' => 'string'
                
]
            ],
            
'optional' => [
                
'name' => [
                    
'type' => 'string'
                
],
                
'email' => [
                    
'type' => 'email'
                
],
                
'url' => [
                    
'type' => 'url'
                
],
                
'image' => [
                    
'type' => 'string'
                
]
            ]
        ],
        
'claim_pbn_tag' => [
            
'required' => [
                
'tagid' => [
                    
'type' => 'string'
                
],
                
'name' => [
                    
'type' => 'string'
                
]
            ]
        ],
    ];

    public function 
__construct($command$fields)
    {
        
$this->command $command;
        
$this->fields $fields;
    }

    
/**
     * function validate
     *
     * The actual validation function run before the curl execute method.
     *
     * @return bool|string
     * @throws Exception
     */
    
public function validate()
    {
        
$valid_command $this->validateCommand();
        try {
            if (
$valid_command === TRUE) {
                
$valid_fields $this->validateFields();
                try {
                    if (
$valid_fields === TRUE) {
                        return 
TRUE;
                    } else {
                        throw new 
Exception($valid_fields);
                    }
                } catch (
Exception $e) {
                    return 
'Error: ' $e->getMessage();
                }
            } else {
                throw new 
Exception('Invalid command name!');
            }
        } catch (
Exception $e) {
            return 
'Error: ' $e->getMessage();
        }
    }

    
/**
     * function validateCommand
     *
     * Validates the name of the command.
     *
     * @return bool|string
     * @throws Exception
     */
    
private function validateCommand()
    {
        try {
            if (
array_key_exists($this->command$this->commands_reference)) {
                return 
TRUE;
            }
        } catch (
Exception $e) {
            return 
'Error: ' $e->getMessage();
        }
    }

    
/**
     * function validateFields
     *
     * Validates the existence of fields, respective to their field groups.
     *
     * @return bool True on success of validated fields.
     * @throws Exception
     */
    
private function validateFields()
    {
        
// Set top level field groups
        
$field_groups = ['required''one_of''optional'];

        
// Compile array of accepted fields
        
$accepted_fields = [];
        foreach (
$field_groups as $field_group) {

            
// Check if the field group exists for the command
            
if (array_key_exists($field_group$this->commands_reference[$this->command])) {

                
// For each field group that exists, add the fields within to the accepted fields array
                
foreach ($this->commands_reference[$this->command][$field_group] as $field_key => $field_value) {
                    
$accepted_fields[] = $field_key;
                }
            }
        }

        
// Validate all passed fields are valid
        
foreach ($this->fields as $field_key => $field_value) {

            
// Throw an error if an invalid field was passed
            
if (!in_array($field_key$accepted_fields)) {
                throw new 
Exception('The field "' $field_key '" was passed but is not a valid field for the "' $this->command '" command!');
            }
        }

        
// Check required fields
        
if (array_key_exists('required'$this->commands_reference[$this->command])) {
            foreach (
$this->commands_reference[$this->command]['required'] as $required_field_key => $required_field_value) {
                if (!
array_key_exists($required_field_key$this->fields)) {
                    throw new 
Exception('The required field "' $required_field_key '" was not passed!');
                } else {
                    
$field_type $this->commands_reference[$this->command]['required'][$required_field_key]['type'];
                    
$is_valid_type $this->validateFieldType($required_field_key$this->fields[$required_field_key], $field_type'required');
                    if (
$is_valid_type != TRUE) {
                        throw new 
Exception($is_valid_type);
                    }
                }
            }
        }

        
// Check one_of (mutually exclusive) fields
        
if (array_key_exists('one_of'$this->commands_reference[$this->command])) {
            
$count_one_of 0;
            
$expected_one_of = [];
            
$expected_one_of_message '';
            
$one_of_field_key '';
            
$passed_one_of_key '';

            
// Compile an array of all passed fields in the one_of group
            
foreach ($this->commands_reference[$this->command]['one_of'] as $one_of_field_key => $one_of_field_value) {
                
$expected_one_of[] = $one_of_field_key;
                if (
array_key_exists($one_of_field_key$this->fields)) {
                    
$count_one_of++;
                    
$passed_one_of_key $one_of_field_key;
                }
            }

            
// Set a message defining the possible one_of fields, if there was more or less than one passed
            
if ($count_one_of != 1) {
                
$expected_one_of_message implode(' | '$expected_one_of);
            }

            
// Throw an error if less than or more than 1 field was passed
            
if ($count_one_of 1) {
                throw new 
Exception('At least one of the following fields must be passed: [ ' $expected_one_of_message ' ]');
            } elseif (
$count_one_of 1) {
                throw new 
Exception('No more than one of the following fields can be passed: [ ' $expected_one_of_message ' ]');
            } else {
                
$field_type $this->commands_reference[$this->command]['one_of'][$one_of_field_key]['type'];
                
$is_valid_type $this->validateFieldType($one_of_field_key$this->fields[$passed_one_of_key], $field_type'one_of');
                if (
$is_valid_type != TRUE) {
                    throw new 
Exception($is_valid_type);
                }
            }
        }

        
// Check if optional fields exist
        
if (array_key_exists('optional'$this->commands_reference[$this->command])) {
            
$optional_fields_to_check = [];

            
// Build array of the optional fields passed
            
foreach ($this->fields as $field_key => $field_value) {
                if (
array_key_exists($field_key$this->commands_reference[$this->command]['optional'])) {
                    
$optional_fields_to_check[] = $field_key;
                }
            }

            
// Loop through optional fields passed and validate their value's type
            
foreach ($optional_fields_to_check as $optional_field) {
                
$field_type $this->commands_reference[$this->command]['optional'][$optional_field]['type'];
                
$is_valid_type $this->validateFieldType($optional_field$this->fields[$optional_field], $field_type'optional');
                if (
$is_valid_type != TRUE) {
                    throw new 
Exception($is_valid_type);
                }
            }
        }
        return 
TRUE;
    }

    
/**
     * function validateFieldType
     *
     * Validates the data type for a field's passed value.
     *
     * @param string $field_key The name/key for the field.
     * @param mixed $field_value The value for the field being checked.
     * @param string $expected_type The expected type from the $commands_reference.
     * @param string $field_group The group the field belongs to within the $commands_reference.
     * @return bool True if field value's type is valid.
     * @throws Exception
     */
    
private function validateFieldType($field_key$field_value$expected_type$field_group)
    {
        
$actual_type FALSE;
        switch (
$expected_type) {
            case 
'string':
                if (!
is_string($field_value)) {
                    
$actual_type gettype($field_value);
                }
                break;
            case 
'integer':
                if (!
is_numeric($field_value)) {
                    
$actual_type gettype($field_value);
                }
                break;
            case 
'url':
                if (
filter_var($field_valueFILTER_VALIDATE_URL) === FALSE) {
                    
$actual_type gettype($field_value);
                }
                break;
            case 
'email':
                if (
filter_var($field_valueFILTER_VALIDATE_EMAIL) === FALSE) {
                    
$actual_type gettype($field_value);
                }
                break;
            case 
'array':
                if (!
is_array($field_value)) {
                    
$actual_type gettype($field_value);
                }
                break;
            default:
                throw new 
Exception('Expected type "' $expected_type '" is not valid for the given command.');
        }

        if (
is_array($field_value)) {
            
$field_value '[ArrayData]';
        }

        if (
$actual_type != FALSE) {
            throw new 
Exception('Field "' $field_key '" passed with value of "' $field_value '" and data type of "' $actual_type '", but expected type is "' $expected_type '".');
        }

        if (
array_key_exists('permitted'$this->commands_reference[$this->command][$field_group][$field_key])) {
            
$permitted_check $this->validateFieldPermittedValue($field_value$this->commands_reference[$this->command][$field_group][$field_key]['permitted']);
            if (!
$permitted_check) {
                
$permitted_message implode(' | '$this->commands_reference[$this->command][$field_group][$field_key]['permitted']);
                throw new 
Exception('Permitted values for the field "' $field_key '" are [ ' $permitted_message ' ] but the value passed was: ' $field_value);
            }
        }
        return 
TRUE;
    }

    
/**
     * function validateFieldPermittedValue
     *
     * Validates the passed field value is in a permitted range of values.
     *
     * @param mixed $field_value The value of the field to check against permitted values.
     * @param array $permitted An array containing the permitted values.
     * @return bool True if field value is in permitted values array, false if it's not.
     */
    
private function validateFieldPermittedValue($field_value$permitted)
    {
        
// Check the passed field value is within the permitted values
        
if (!in_array($field_value$permitted)) {
            return 
FALSE;
        } else {
            return 
TRUE;
        }
    }
}

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