38217-vm/wp-content/plugins/mainwp/class/class-mainwp-api-manager-password-management.php
2026-02-05 17:08:59 +03:00

131 lines
3.7 KiB
PHP

<?php
/**
* WooCommerce API Password Handler
*
* Encrypts & Decrypts API Passwords.
*
* @package MainWP/MainWP_API_Passwords_Manager
*/
namespace MainWP\Dashboard;
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* Class MainWP_Api_Manager_Password_Management
*
* WooCommerce API Password Handler.
*
* @package MainWP/MainWP_API_Passwords_Manager
* @author Todd Lahman LLC
* @copyright Copyright (c) Todd Lahman LLC
* @since 1.0.0
*/
class MainWP_Api_Manager_Password_Management { // phpcs:ignore Generic.Classes.OpeningBraceSameLine.ContentAfterBrace -- NOSONAR.
/**
* Set encryption type.
*
* @var string $ENCRYPT
*/
private static $ENCRYPT = 'AMEncrypt';
/**
* Generate password. Creates a unique instance ID.
*
* @param int $length Length of ID.
* @param bool $special_chars Valid special characters.
* @param bool $extra_special_chars Extra special characters.
*
* @return string Password.
*/
public static function generate_password( $length = 12, $special_chars = true, $extra_special_chars = false ) {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
if ( $special_chars ) {
$chars .= '!@#$%^&*()';
}
if ( $extra_special_chars ) {
$chars .= '-_ []{}<>~`+=,.;:/?|';
}
$password = '';
for ( $i = 0; $i < $length; $i++ ) {
$password .= substr( $chars, wp_rand( 0, strlen( $chars ) - 1 ), 1 );
}
// random_password filter was previously in random_password function which was deprecated.
return $password;
}
/**
* Encrypt string.
*
* @param string $str String to encrypt.
*
* @return string Encrypted string.
*/
public static function encrypt_string( $str ) {
return static::encrypt( $str, static::$ENCRYPT );
}
/**
* Decrypts string.
*
* @param string $encrypted Sting to decrypt.
*
* @return string Decrypted string.
*/
public static function decrypt_string( $encrypted ) {
return static::decrypt( $encrypted, static::$ENCRYPT );
}
/**
* Encrypt.
*
* @param string $str String to encrypt.
* @param string $pass String.
*
* @return string Encrypted string.
*/
public static function encrypt( $str, $pass ) {
if ( ! is_string( $str ) ) {
return '';
}
$pass = str_split( str_pad( '', strlen( $str ), $pass, STR_PAD_RIGHT ) );
$stra = str_split( $str );
foreach ( $stra as $k => $v ) {
$tmp = ord( $v ) + ord( $pass[ $k ] );
$stra[ $k ] = chr( 255 < $tmp ? ( $tmp - 256 ) : $tmp );
}
return base64_encode( join( '', $stra ) ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions -- base64_encode used for http encoding compatible.
}
/**
* Decrypt.
*
* @param string $str String to Decrypt.
* @param string $pass String.
*
* @return string Decrypted string.
*/
public static function decrypt( $str, $pass ) {
if ( ! is_string( $str ) ) {
return '';
}
$str = base64_decode( $str ); // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions -- base64_encode used for http encoding compatible.
$pass = str_split( str_pad( '', strlen( $str ), $pass, STR_PAD_RIGHT ) );
$stra = str_split( $str );
foreach ( $stra as $k => $v ) {
$tmp = ord( $v ) - ord( $pass[ $k ] );
$stra[ $k ] = chr( 0 > $tmp ? ( $tmp + 256 ) : $tmp );
}
return join( '', $stra );
}
}