[ { "itemorder" : "1", "width" : 48, "itemdesc" : "$LANG{'Upgrade/Downgrade'}", "subtype" : "img", "file" : "WHMCS_clientarea_upgrade", "target" : "_blank", "type" : "image", "imgtype" : "icon", "height" : 48, "base64_png_image" : "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAw1BMVEUAAAANhr8Ym9glMjwYm9glMjwNhr8Ym9glMjwNhr8Ym9glMjwNhr8Ym9gYm9glMjwNhr8XYocYm9gNhr8Ym9gfR10lMjwNhr8Ym9giO0slMjwNhr8Ym9gbVHAlMjwYm9glMjwNhr8Qi8UYm9glMjwYm9glMjwNhr8Ym9glMjwYm9glMjwNhr8PgbcQi8USdqYTcZ4TkcwVbJYWZ44WhrsYm9gZXH4ZfKsbV3UcUm0eTGUfR10fZ4ohQlUiPUwkN0QlMjwzhEifAAAALHRSTlMAEBAQICAwMDBAQEBQUGBgcHBwgICAgI+Pj4+fn5+fr6+/v7+/z8/f39/v76ecmrsAAAGnSURBVHjanZPrQoJAEIUPZiFbkimpmUWEJKHdwy528f2fKgZXWZotWb8/zuyZM7s7K9DQGIwWGaNBA1VoULVktIuNHC5UJodG9cQGx75sfN7tXkyW8b8X2bnOa7rLZJAnV/iDPcdxTqji+8iRnOWO4yzaY+Wt8TTjiwoep2tmlH9RNG6Vuwe5/kj6vKiXHe7yMCh2sTpSfiX5XjU80cpMJh0LOQfjlfwpD1BwQ4b3VTY+oPZBIZP6Ni0xL/cILPQUVd1fPaWS9/Cg8JHx/FDihdbUBaSGmBsSs/oEoZkhNDd4ZgbP3NA0MzQh9MMQQj8+AZsvxmnqAz4FDBv85YZwm8gQLoZMhMbgYo2rM4Rs1FTp++5fWsgnhz799oE2N5BYIvJqqC/DOmrtqFBkE3is/2rUQqPyi/m2arB9PhChmVKUH45py01tzcVqw+w5aoDPDZqH6GNNnz2DztAuDG2tIWL/jTRxATfJgl9EIMKUEwOx9nsjqA8jinSrQxCewffGb8bh8xDVDWI7A6obsKUhrlofS8PlbUUupaE3rcipNFhBtfrAAvADzXlsJf/WC3oAAAAASUVORK5CYII=", "description" : "$LANG{'Upgrade/Downgrade'}", "group" : "whmcs", "url" : "integration/index.html?app=WHMCS_clientarea_upgrade", "implements" : "upgrade" } ] WP_Error( 'invalid_format', __( 'Invalid cookie format.' ) ); } return $parts; } /** * Generates the recovery mode cookie value. * * The cookie is a base64 encoded string with the following format: * * recovery_mode|iat|rand|signature * * Where "recovery_mode" is a constant string, * iat is the time the cookie was generated at, * rand is a randomly generated password that is also used as a session identifier * and signature is an hmac of the preceding 3 parts. * * @since 5.2.0 * * @return string Generated cookie content. */ private function generate_cookie() { $to_sign = sprintf( 'recovery_mode|%s|%s', time(), wp_generate_password( 20, false ) ); $signed = $this->recovery_mode_hash( $to_sign ); return base64_encode( sprintf( '%s|%s', $to_sign, $signed ) ); } /** * Gets a form of `wp_hash()` specific to Recovery Mode. * * We cannot use `wp_hash()` because it is defined in `pluggable.php` which is not loaded until after plugins are loaded, * which is too late to verify the recovery mode cookie. * * This tries to use the `AUTH` salts first, but if they aren't valid specific salts will be generated and stored. * * @since 5.2.0 * * @param string $data Data to hash. * @return string|false The hashed $data, or false on failure. */ private function recovery_mode_hash( $data ) { $default_keys = array_unique( array( 'put your unique phrase here', /* * translators: This string should only be translated if wp-config-sample.php is localized. * You can check the localized release package or * https://i18n.svn.wordpress.org//branches//dist/wp-config-sample.php */ __( 'put your unique phrase here' ), ) ); if ( ! defined( 'AUTH_KEY' ) || in_array( AUTH_KEY, $default_keys, true ) ) { $auth_key = get_site_option( 'recovery_mode_auth_key' ); if ( ! $auth_key ) { if ( ! function_exists( 'wp_generate_password' ) ) { require_once ABSPATH . WPINC . '/pluggable.php'; } $auth_key = wp_generate_password( 64, true, true ); update_site_option( 'recovery_mode_auth_key', $auth_key ); } } else { $auth_key = AUTH_KEY; } if ( ! defined( 'AUTH_SALT' ) || in_array( AUTH_SALT, $default_keys, true ) || AUTH_SALT === $auth_key ) { $auth_salt = get_site_option( 'recovery_mode_auth_salt' ); if ( ! $auth_salt ) { if ( ! function_exists( 'wp_generate_password' ) ) { require_once ABSPATH . WPINC . '/pluggable.php'; } $auth_salt = wp_generate_password( 64, true, true ); update_site_option( 'recovery_mode_auth_salt', $auth_salt ); } } else { $auth_salt = AUTH_SALT; } $secret = $auth_key . $auth_salt; return hash_hmac( 'sha1', $data, $secret ); } }