Edit File by line
/home/zeestwma/ceyloniy.../wp-inclu...
File: pluggable.php
[500] Fix | Delete
// Set to use PHP's mail().
[501] Fix | Delete
$phpmailer->isMail();
[502] Fix | Delete
[503] Fix | Delete
// Set Content-Type and charset.
[504] Fix | Delete
[505] Fix | Delete
// If we don't have a Content-Type from the input headers.
[506] Fix | Delete
if ( ! isset( $content_type ) ) {
[507] Fix | Delete
$content_type = 'text/plain';
[508] Fix | Delete
}
[509] Fix | Delete
[510] Fix | Delete
/**
[511] Fix | Delete
* Filters the wp_mail() content type.
[512] Fix | Delete
*
[513] Fix | Delete
* @since 2.3.0
[514] Fix | Delete
*
[515] Fix | Delete
* @param string $content_type Default wp_mail() content type.
[516] Fix | Delete
*/
[517] Fix | Delete
$content_type = apply_filters( 'wp_mail_content_type', $content_type );
[518] Fix | Delete
[519] Fix | Delete
$phpmailer->ContentType = $content_type;
[520] Fix | Delete
[521] Fix | Delete
// Set whether it's plaintext, depending on $content_type.
[522] Fix | Delete
if ( 'text/html' === $content_type ) {
[523] Fix | Delete
$phpmailer->isHTML( true );
[524] Fix | Delete
}
[525] Fix | Delete
[526] Fix | Delete
// If we don't have a charset from the input headers.
[527] Fix | Delete
if ( ! isset( $charset ) ) {
[528] Fix | Delete
$charset = get_bloginfo( 'charset' );
[529] Fix | Delete
}
[530] Fix | Delete
[531] Fix | Delete
/**
[532] Fix | Delete
* Filters the default wp_mail() charset.
[533] Fix | Delete
*
[534] Fix | Delete
* @since 2.3.0
[535] Fix | Delete
*
[536] Fix | Delete
* @param string $charset Default email charset.
[537] Fix | Delete
*/
[538] Fix | Delete
$phpmailer->CharSet = apply_filters( 'wp_mail_charset', $charset );
[539] Fix | Delete
[540] Fix | Delete
// Set custom headers.
[541] Fix | Delete
if ( ! empty( $headers ) ) {
[542] Fix | Delete
foreach ( (array) $headers as $name => $content ) {
[543] Fix | Delete
// Only add custom headers not added automatically by PHPMailer.
[544] Fix | Delete
if ( ! in_array( $name, array( 'MIME-Version', 'X-Mailer' ), true ) ) {
[545] Fix | Delete
try {
[546] Fix | Delete
$phpmailer->addCustomHeader( sprintf( '%1$s: %2$s', $name, $content ) );
[547] Fix | Delete
} catch ( PHPMailer\PHPMailer\Exception $e ) {
[548] Fix | Delete
continue;
[549] Fix | Delete
}
[550] Fix | Delete
}
[551] Fix | Delete
}
[552] Fix | Delete
}
[553] Fix | Delete
[554] Fix | Delete
if ( ! empty( $attachments ) ) {
[555] Fix | Delete
foreach ( $attachments as $filename => $attachment ) {
[556] Fix | Delete
$filename = is_string( $filename ) ? $filename : '';
[557] Fix | Delete
[558] Fix | Delete
try {
[559] Fix | Delete
$phpmailer->addAttachment( $attachment, $filename );
[560] Fix | Delete
} catch ( PHPMailer\PHPMailer\Exception $e ) {
[561] Fix | Delete
continue;
[562] Fix | Delete
}
[563] Fix | Delete
}
[564] Fix | Delete
}
[565] Fix | Delete
[566] Fix | Delete
if ( ! empty( $embeds ) ) {
[567] Fix | Delete
foreach ( $embeds as $key => $embed_path ) {
[568] Fix | Delete
/**
[569] Fix | Delete
* Filters the arguments for PHPMailer's addEmbeddedImage() method.
[570] Fix | Delete
*
[571] Fix | Delete
* @since 6.9.0
[572] Fix | Delete
*
[573] Fix | Delete
* @param array $args {
[574] Fix | Delete
* An array of arguments for `addEmbeddedImage()`.
[575] Fix | Delete
* @type string $path The path to the file.
[576] Fix | Delete
* @type string $cid The Content-ID of the image. Default: The key in the embeds array.
[577] Fix | Delete
* @type string $name The filename of the image.
[578] Fix | Delete
* @type string $encoding The encoding of the image. Default: 'base64'.
[579] Fix | Delete
* @type string $type The MIME type of the image. Default: empty string, which lets PHPMailer auto-detect.
[580] Fix | Delete
* @type string $disposition The disposition of the image. Default: 'inline'.
[581] Fix | Delete
* }
[582] Fix | Delete
*/
[583] Fix | Delete
$embed_args = apply_filters(
[584] Fix | Delete
'wp_mail_embed_args',
[585] Fix | Delete
array(
[586] Fix | Delete
'path' => $embed_path,
[587] Fix | Delete
'cid' => (string) $key,
[588] Fix | Delete
'name' => basename( $embed_path ),
[589] Fix | Delete
'encoding' => 'base64',
[590] Fix | Delete
'type' => '',
[591] Fix | Delete
'disposition' => 'inline',
[592] Fix | Delete
)
[593] Fix | Delete
);
[594] Fix | Delete
[595] Fix | Delete
try {
[596] Fix | Delete
$phpmailer->addEmbeddedImage(
[597] Fix | Delete
$embed_args['path'],
[598] Fix | Delete
$embed_args['cid'],
[599] Fix | Delete
$embed_args['name'],
[600] Fix | Delete
$embed_args['encoding'],
[601] Fix | Delete
$embed_args['type'],
[602] Fix | Delete
$embed_args['disposition']
[603] Fix | Delete
);
[604] Fix | Delete
} catch ( PHPMailer\PHPMailer\Exception $e ) {
[605] Fix | Delete
continue;
[606] Fix | Delete
}
[607] Fix | Delete
}
[608] Fix | Delete
}
[609] Fix | Delete
[610] Fix | Delete
/**
[611] Fix | Delete
* Fires after PHPMailer is initialized.
[612] Fix | Delete
*
[613] Fix | Delete
* @since 2.2.0
[614] Fix | Delete
*
[615] Fix | Delete
* @param PHPMailer $phpmailer The PHPMailer instance (passed by reference).
[616] Fix | Delete
*/
[617] Fix | Delete
do_action_ref_array( 'phpmailer_init', array( &$phpmailer ) );
[618] Fix | Delete
[619] Fix | Delete
$mail_data = compact( 'to', 'subject', 'message', 'headers', 'attachments', 'embeds' );
[620] Fix | Delete
[621] Fix | Delete
// Send!
[622] Fix | Delete
try {
[623] Fix | Delete
$send = $phpmailer->send();
[624] Fix | Delete
[625] Fix | Delete
/**
[626] Fix | Delete
* Fires after PHPMailer has successfully sent an email.
[627] Fix | Delete
*
[628] Fix | Delete
* The firing of this action does not necessarily mean that the recipient(s) received the
[629] Fix | Delete
* email successfully. It only means that the `send` method above was able to
[630] Fix | Delete
* process the request without any errors.
[631] Fix | Delete
*
[632] Fix | Delete
* @since 5.9.0
[633] Fix | Delete
*
[634] Fix | Delete
* @param array $mail_data {
[635] Fix | Delete
* An array containing the email recipient(s), subject, message, headers, and attachments.
[636] Fix | Delete
*
[637] Fix | Delete
* @type string[] $to Email addresses to send message.
[638] Fix | Delete
* @type string $subject Email subject.
[639] Fix | Delete
* @type string $message Message contents.
[640] Fix | Delete
* @type string[] $headers Additional headers.
[641] Fix | Delete
* @type string[] $attachments Paths to files to attach.
[642] Fix | Delete
* @type string[] $embeds Paths to files to embed.
[643] Fix | Delete
* }
[644] Fix | Delete
*/
[645] Fix | Delete
do_action( 'wp_mail_succeeded', $mail_data );
[646] Fix | Delete
[647] Fix | Delete
return $send;
[648] Fix | Delete
} catch ( PHPMailer\PHPMailer\Exception $e ) {
[649] Fix | Delete
$mail_data['phpmailer_exception_code'] = $e->getCode();
[650] Fix | Delete
[651] Fix | Delete
/**
[652] Fix | Delete
* Fires after a PHPMailer\PHPMailer\Exception is caught.
[653] Fix | Delete
*
[654] Fix | Delete
* @since 4.4.0
[655] Fix | Delete
*
[656] Fix | Delete
* @param WP_Error $error A WP_Error object with the PHPMailer\PHPMailer\Exception message, and an array
[657] Fix | Delete
* containing the mail recipient, subject, message, headers, and attachments.
[658] Fix | Delete
*/
[659] Fix | Delete
do_action( 'wp_mail_failed', new WP_Error( 'wp_mail_failed', $e->getMessage(), $mail_data ) );
[660] Fix | Delete
[661] Fix | Delete
return false;
[662] Fix | Delete
}
[663] Fix | Delete
}
[664] Fix | Delete
endif;
[665] Fix | Delete
[666] Fix | Delete
if ( ! function_exists( 'wp_authenticate' ) ) :
[667] Fix | Delete
/**
[668] Fix | Delete
* Authenticates a user, confirming the login credentials are valid.
[669] Fix | Delete
*
[670] Fix | Delete
* @since 2.5.0
[671] Fix | Delete
* @since 4.5.0 `$username` now accepts an email address.
[672] Fix | Delete
*
[673] Fix | Delete
* @param string $username User's username or email address.
[674] Fix | Delete
* @param string $password User's password.
[675] Fix | Delete
* @return WP_User|WP_Error WP_User object if the credentials are valid,
[676] Fix | Delete
* otherwise WP_Error.
[677] Fix | Delete
*/
[678] Fix | Delete
function wp_authenticate(
[679] Fix | Delete
$username,
[680] Fix | Delete
#[\SensitiveParameter]
[681] Fix | Delete
$password
[682] Fix | Delete
) {
[683] Fix | Delete
$username = sanitize_user( $username );
[684] Fix | Delete
$password = trim( $password );
[685] Fix | Delete
[686] Fix | Delete
/**
[687] Fix | Delete
* Filters whether a set of user login credentials are valid.
[688] Fix | Delete
*
[689] Fix | Delete
* A WP_User object is returned if the credentials authenticate a user.
[690] Fix | Delete
* WP_Error or null otherwise.
[691] Fix | Delete
*
[692] Fix | Delete
* @since 2.8.0
[693] Fix | Delete
* @since 4.5.0 `$username` now accepts an email address.
[694] Fix | Delete
*
[695] Fix | Delete
* @param null|WP_User|WP_Error $user WP_User if the user is authenticated.
[696] Fix | Delete
* WP_Error or null otherwise.
[697] Fix | Delete
* @param string $username Username or email address.
[698] Fix | Delete
* @param string $password User password.
[699] Fix | Delete
*/
[700] Fix | Delete
$user = apply_filters( 'authenticate', null, $username, $password );
[701] Fix | Delete
[702] Fix | Delete
if ( null === $user || false === $user ) {
[703] Fix | Delete
/*
[704] Fix | Delete
* TODO: What should the error message be? (Or would these even happen?)
[705] Fix | Delete
* Only needed if all authentication handlers fail to return anything.
[706] Fix | Delete
*/
[707] Fix | Delete
$user = new WP_Error( 'authentication_failed', __( '<strong>Error:</strong> Invalid username, email address or incorrect password.' ) );
[708] Fix | Delete
}
[709] Fix | Delete
[710] Fix | Delete
$ignore_codes = array( 'empty_username', 'empty_password' );
[711] Fix | Delete
[712] Fix | Delete
if ( is_wp_error( $user ) && ! in_array( $user->get_error_code(), $ignore_codes, true ) ) {
[713] Fix | Delete
$error = $user;
[714] Fix | Delete
[715] Fix | Delete
/**
[716] Fix | Delete
* Fires after a user login has failed.
[717] Fix | Delete
*
[718] Fix | Delete
* @since 2.5.0
[719] Fix | Delete
* @since 4.5.0 The value of `$username` can now be an email address.
[720] Fix | Delete
* @since 5.4.0 The `$error` parameter was added.
[721] Fix | Delete
*
[722] Fix | Delete
* @param string $username Username or email address.
[723] Fix | Delete
* @param WP_Error $error A WP_Error object with the authentication failure details.
[724] Fix | Delete
*/
[725] Fix | Delete
do_action( 'wp_login_failed', $username, $error );
[726] Fix | Delete
}
[727] Fix | Delete
[728] Fix | Delete
return $user;
[729] Fix | Delete
}
[730] Fix | Delete
endif;
[731] Fix | Delete
[732] Fix | Delete
if ( ! function_exists( 'wp_logout' ) ) :
[733] Fix | Delete
/**
[734] Fix | Delete
* Logs the current user out.
[735] Fix | Delete
*
[736] Fix | Delete
* @since 2.5.0
[737] Fix | Delete
*/
[738] Fix | Delete
function wp_logout() {
[739] Fix | Delete
$user_id = get_current_user_id();
[740] Fix | Delete
[741] Fix | Delete
wp_destroy_current_session();
[742] Fix | Delete
wp_clear_auth_cookie();
[743] Fix | Delete
wp_set_current_user( 0 );
[744] Fix | Delete
[745] Fix | Delete
/**
[746] Fix | Delete
* Fires after a user is logged out.
[747] Fix | Delete
*
[748] Fix | Delete
* @since 1.5.0
[749] Fix | Delete
* @since 5.5.0 Added the `$user_id` parameter.
[750] Fix | Delete
*
[751] Fix | Delete
* @param int $user_id ID of the user that was logged out.
[752] Fix | Delete
*/
[753] Fix | Delete
do_action( 'wp_logout', $user_id );
[754] Fix | Delete
}
[755] Fix | Delete
endif;
[756] Fix | Delete
[757] Fix | Delete
if ( ! function_exists( 'wp_validate_auth_cookie' ) ) :
[758] Fix | Delete
/**
[759] Fix | Delete
* Validates authentication cookie.
[760] Fix | Delete
*
[761] Fix | Delete
* The checks include making sure that the authentication cookie is set and
[762] Fix | Delete
* pulling in the contents (if $cookie is not used).
[763] Fix | Delete
*
[764] Fix | Delete
* Makes sure the cookie is not expired. Verifies the hash in cookie is what is
[765] Fix | Delete
* should be and compares the two.
[766] Fix | Delete
*
[767] Fix | Delete
* @since 2.5.0
[768] Fix | Delete
*
[769] Fix | Delete
* @global int $login_grace_period
[770] Fix | Delete
*
[771] Fix | Delete
* @param string $cookie Optional. If used, will validate contents instead of cookie's.
[772] Fix | Delete
* @param string $scheme Optional. The cookie scheme to use: 'auth', 'secure_auth', or 'logged_in'.
[773] Fix | Delete
* Note: This does *not* default to 'auth' like other cookie functions.
[774] Fix | Delete
* @return int|false User ID if valid cookie, false if invalid.
[775] Fix | Delete
*/
[776] Fix | Delete
function wp_validate_auth_cookie( $cookie = '', $scheme = '' ) {
[777] Fix | Delete
$cookie_elements = wp_parse_auth_cookie( $cookie, $scheme );
[778] Fix | Delete
if ( ! $cookie_elements ) {
[779] Fix | Delete
/**
[780] Fix | Delete
* Fires if an authentication cookie is malformed.
[781] Fix | Delete
*
[782] Fix | Delete
* @since 2.7.0
[783] Fix | Delete
*
[784] Fix | Delete
* @param string $cookie Malformed auth cookie.
[785] Fix | Delete
* @param string $scheme Authentication scheme. Values include 'auth', 'secure_auth',
[786] Fix | Delete
* or 'logged_in'.
[787] Fix | Delete
*/
[788] Fix | Delete
do_action( 'auth_cookie_malformed', $cookie, $scheme );
[789] Fix | Delete
return false;
[790] Fix | Delete
}
[791] Fix | Delete
[792] Fix | Delete
$scheme = $cookie_elements['scheme'];
[793] Fix | Delete
$username = $cookie_elements['username'];
[794] Fix | Delete
$hmac = $cookie_elements['hmac'];
[795] Fix | Delete
$token = $cookie_elements['token'];
[796] Fix | Delete
$expiration = $cookie_elements['expiration'];
[797] Fix | Delete
[798] Fix | Delete
$expired = (int) $expiration;
[799] Fix | Delete
[800] Fix | Delete
// Allow a grace period for POST and Ajax requests.
[801] Fix | Delete
if ( wp_doing_ajax() || 'POST' === $_SERVER['REQUEST_METHOD'] ) {
[802] Fix | Delete
$expired += HOUR_IN_SECONDS;
[803] Fix | Delete
}
[804] Fix | Delete
[805] Fix | Delete
// Quick check to see if an honest cookie has expired.
[806] Fix | Delete
if ( $expired < time() ) {
[807] Fix | Delete
/**
[808] Fix | Delete
* Fires once an authentication cookie has expired.
[809] Fix | Delete
*
[810] Fix | Delete
* @since 2.7.0
[811] Fix | Delete
*
[812] Fix | Delete
* @param string[] $cookie_elements {
[813] Fix | Delete
* Authentication cookie components. None of the components should be assumed
[814] Fix | Delete
* to be valid as they come directly from a client-provided cookie value.
[815] Fix | Delete
*
[816] Fix | Delete
* @type string $username User's username.
[817] Fix | Delete
* @type string $expiration The time the cookie expires as a UNIX timestamp.
[818] Fix | Delete
* @type string $token User's session token used.
[819] Fix | Delete
* @type string $hmac The security hash for the cookie.
[820] Fix | Delete
* @type string $scheme The cookie scheme to use.
[821] Fix | Delete
* }
[822] Fix | Delete
*/
[823] Fix | Delete
do_action( 'auth_cookie_expired', $cookie_elements );
[824] Fix | Delete
return false;
[825] Fix | Delete
}
[826] Fix | Delete
[827] Fix | Delete
$user = get_user_by( 'login', $username );
[828] Fix | Delete
if ( ! $user ) {
[829] Fix | Delete
/**
[830] Fix | Delete
* Fires if a bad username is entered in the user authentication process.
[831] Fix | Delete
*
[832] Fix | Delete
* @since 2.7.0
[833] Fix | Delete
*
[834] Fix | Delete
* @param string[] $cookie_elements {
[835] Fix | Delete
* Authentication cookie components. None of the components should be assumed
[836] Fix | Delete
* to be valid as they come directly from a client-provided cookie value.
[837] Fix | Delete
*
[838] Fix | Delete
* @type string $username User's username.
[839] Fix | Delete
* @type string $expiration The time the cookie expires as a UNIX timestamp.
[840] Fix | Delete
* @type string $token User's session token used.
[841] Fix | Delete
* @type string $hmac The security hash for the cookie.
[842] Fix | Delete
* @type string $scheme The cookie scheme to use.
[843] Fix | Delete
* }
[844] Fix | Delete
*/
[845] Fix | Delete
do_action( 'auth_cookie_bad_username', $cookie_elements );
[846] Fix | Delete
return false;
[847] Fix | Delete
}
[848] Fix | Delete
[849] Fix | Delete
if ( str_starts_with( $user->user_pass, '$P$' ) || str_starts_with( $user->user_pass, '$2y$' ) ) {
[850] Fix | Delete
// Retain previous behaviour of phpass or vanilla bcrypt hashed passwords.
[851] Fix | Delete
$pass_frag = substr( $user->user_pass, 8, 4 );
[852] Fix | Delete
} else {
[853] Fix | Delete
// Otherwise, use a substring from the end of the hash to avoid dealing with potentially long hash prefixes.
[854] Fix | Delete
$pass_frag = substr( $user->user_pass, -4 );
[855] Fix | Delete
}
[856] Fix | Delete
[857] Fix | Delete
$key = wp_hash( $username . '|' . $pass_frag . '|' . $expiration . '|' . $token, $scheme );
[858] Fix | Delete
[859] Fix | Delete
$hash = hash_hmac( 'sha256', $username . '|' . $expiration . '|' . $token, $key );
[860] Fix | Delete
[861] Fix | Delete
if ( ! hash_equals( $hash, $hmac ) ) {
[862] Fix | Delete
/**
[863] Fix | Delete
* Fires if a bad authentication cookie hash is encountered.
[864] Fix | Delete
*
[865] Fix | Delete
* @since 2.7.0
[866] Fix | Delete
*
[867] Fix | Delete
* @param string[] $cookie_elements {
[868] Fix | Delete
* Authentication cookie components. None of the components should be assumed
[869] Fix | Delete
* to be valid as they come directly from a client-provided cookie value.
[870] Fix | Delete
*
[871] Fix | Delete
* @type string $username User's username.
[872] Fix | Delete
* @type string $expiration The time the cookie expires as a UNIX timestamp.
[873] Fix | Delete
* @type string $token User's session token used.
[874] Fix | Delete
* @type string $hmac The security hash for the cookie.
[875] Fix | Delete
* @type string $scheme The cookie scheme to use.
[876] Fix | Delete
* }
[877] Fix | Delete
*/
[878] Fix | Delete
do_action( 'auth_cookie_bad_hash', $cookie_elements );
[879] Fix | Delete
return false;
[880] Fix | Delete
}
[881] Fix | Delete
[882] Fix | Delete
$manager = WP_Session_Tokens::get_instance( $user->ID );
[883] Fix | Delete
if ( ! $manager->verify( $token ) ) {
[884] Fix | Delete
/**
[885] Fix | Delete
* Fires if a bad session token is encountered.
[886] Fix | Delete
*
[887] Fix | Delete
* @since 4.0.0
[888] Fix | Delete
*
[889] Fix | Delete
* @param string[] $cookie_elements {
[890] Fix | Delete
* Authentication cookie components. None of the components should be assumed
[891] Fix | Delete
* to be valid as they come directly from a client-provided cookie value.
[892] Fix | Delete
*
[893] Fix | Delete
* @type string $username User's username.
[894] Fix | Delete
* @type string $expiration The time the cookie expires as a UNIX timestamp.
[895] Fix | Delete
* @type string $token User's session token used.
[896] Fix | Delete
* @type string $hmac The security hash for the cookie.
[897] Fix | Delete
* @type string $scheme The cookie scheme to use.
[898] Fix | Delete
* }
[899] Fix | Delete
*/
[900] Fix | Delete
do_action( 'auth_cookie_bad_session_token', $cookie_elements );
[901] Fix | Delete
return false;
[902] Fix | Delete
}
[903] Fix | Delete
[904] Fix | Delete
// Ajax/POST grace period set above.
[905] Fix | Delete
if ( $expiration < time() ) {
[906] Fix | Delete
$GLOBALS['login_grace_period'] = 1;
[907] Fix | Delete
}
[908] Fix | Delete
[909] Fix | Delete
/**
[910] Fix | Delete
* Fires once an authentication cookie has been validated.
[911] Fix | Delete
*
[912] Fix | Delete
* @since 2.7.0
[913] Fix | Delete
*
[914] Fix | Delete
* @param string[] $cookie_elements {
[915] Fix | Delete
* Authentication cookie components.
[916] Fix | Delete
*
[917] Fix | Delete
* @type string $username User's username.
[918] Fix | Delete
* @type string $expiration The time the cookie expires as a UNIX timestamp.
[919] Fix | Delete
* @type string $token User's session token used.
[920] Fix | Delete
* @type string $hmac The security hash for the cookie.
[921] Fix | Delete
* @type string $scheme The cookie scheme to use.
[922] Fix | Delete
* }
[923] Fix | Delete
* @param WP_User $user User object.
[924] Fix | Delete
*/
[925] Fix | Delete
do_action( 'auth_cookie_valid', $cookie_elements, $user );
[926] Fix | Delete
[927] Fix | Delete
return $user->ID;
[928] Fix | Delete
}
[929] Fix | Delete
endif;
[930] Fix | Delete
[931] Fix | Delete
if ( ! function_exists( 'wp_generate_auth_cookie' ) ) :
[932] Fix | Delete
/**
[933] Fix | Delete
* Generates authentication cookie contents.
[934] Fix | Delete
*
[935] Fix | Delete
* @since 2.5.0
[936] Fix | Delete
* @since 4.0.0 The `$token` parameter was added.
[937] Fix | Delete
*
[938] Fix | Delete
* @param int $user_id User ID.
[939] Fix | Delete
* @param int $expiration The time the cookie expires as a UNIX timestamp.
[940] Fix | Delete
* @param string $scheme Optional. The cookie scheme to use: 'auth', 'secure_auth', or 'logged_in'.
[941] Fix | Delete
* Default 'auth'.
[942] Fix | Delete
* @param string $token User's session token to use for this cookie.
[943] Fix | Delete
* @return string Authentication cookie contents. Empty string if user does not exist.
[944] Fix | Delete
*/
[945] Fix | Delete
function wp_generate_auth_cookie( $user_id, $expiration, $scheme = 'auth', $token = '' ) {
[946] Fix | Delete
$user = get_userdata( $user_id );
[947] Fix | Delete
if ( ! $user ) {
[948] Fix | Delete
return '';
[949] Fix | Delete
}
[950] Fix | Delete
[951] Fix | Delete
if ( ! $token ) {
[952] Fix | Delete
$manager = WP_Session_Tokens::get_instance( $user_id );
[953] Fix | Delete
$token = $manager->create( $expiration );
[954] Fix | Delete
}
[955] Fix | Delete
[956] Fix | Delete
if ( str_starts_with( $user->user_pass, '$P$' ) || str_starts_with( $user->user_pass, '$2y$' ) ) {
[957] Fix | Delete
// Retain previous behaviour of phpass or vanilla bcrypt hashed passwords.
[958] Fix | Delete
$pass_frag = substr( $user->user_pass, 8, 4 );
[959] Fix | Delete
} else {
[960] Fix | Delete
// Otherwise, use a substring from the end of the hash to avoid dealing with potentially long hash prefixes.
[961] Fix | Delete
$pass_frag = substr( $user->user_pass, -4 );
[962] Fix | Delete
}
[963] Fix | Delete
[964] Fix | Delete
$key = wp_hash( $user->user_login . '|' . $pass_frag . '|' . $expiration . '|' . $token, $scheme );
[965] Fix | Delete
[966] Fix | Delete
$hash = hash_hmac( 'sha256', $user->user_login . '|' . $expiration . '|' . $token, $key );
[967] Fix | Delete
[968] Fix | Delete
$cookie = $user->user_login . '|' . $expiration . '|' . $token . '|' . $hash;
[969] Fix | Delete
[970] Fix | Delete
/**
[971] Fix | Delete
* Filters the authentication cookie.
[972] Fix | Delete
*
[973] Fix | Delete
* @since 2.5.0
[974] Fix | Delete
* @since 4.0.0 The `$token` parameter was added.
[975] Fix | Delete
*
[976] Fix | Delete
* @param string $cookie Authentication cookie.
[977] Fix | Delete
* @param int $user_id User ID.
[978] Fix | Delete
* @param int $expiration The time the cookie expires as a UNIX timestamp.
[979] Fix | Delete
* @param string $scheme Cookie scheme used. Accepts 'auth', 'secure_auth', or 'logged_in'.
[980] Fix | Delete
* @param string $token User's session token used.
[981] Fix | Delete
*/
[982] Fix | Delete
return apply_filters( 'auth_cookie', $cookie, $user_id, $expiration, $scheme, $token );
[983] Fix | Delete
}
[984] Fix | Delete
endif;
[985] Fix | Delete
[986] Fix | Delete
if ( ! function_exists( 'wp_parse_auth_cookie' ) ) :
[987] Fix | Delete
/**
[988] Fix | Delete
* Parses a cookie into its components.
[989] Fix | Delete
*
[990] Fix | Delete
* @since 2.7.0
[991] Fix | Delete
* @since 4.0.0 The `$token` element was added to the return value.
[992] Fix | Delete
*
[993] Fix | Delete
* @param string $cookie Authentication cookie.
[994] Fix | Delete
* @param string $scheme Optional. The cookie scheme to use: 'auth', 'secure_auth', or 'logged_in'.
[995] Fix | Delete
* @return string[]|false {
[996] Fix | Delete
* Authentication cookie components. None of the components should be assumed
[997] Fix | Delete
* to be valid as they come directly from a client-provided cookie value. If
[998] Fix | Delete
* the cookie value is malformed, false is returned.
[999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function