Files
ultimatemember/includes/core/um-actions-password.php
T

361 lines
10 KiB
PHP
Raw Normal View History

2018-03-20 13:24:38 +02:00
<?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
2017-12-18 15:36:04 +02:00
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
/**
* Process a new request
*
* @param $args
*/
function um_reset_password_process_hook( $args ) {
$user = null;
2016-09-14 19:56:00 +08:00
2018-03-20 13:24:38 +02:00
foreach ( $_POST as $key => $val ) {
if( strstr( $key, "username_b") ){
$user = trim( $val );
2014-12-22 01:45:24 +02:00
}
2018-03-20 13:24:38 +02:00
}
2014-12-22 01:45:24 +02:00
2018-03-20 13:24:38 +02:00
if ( username_exists( $user ) ) {
$data = get_user_by( 'login', $user );
$user_email = $data->user_email;
} else if( email_exists( $user ) ) {
$data = get_user_by( 'email', $user );
$user_email = $user;
}
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
UM()->password()->reset_request['user_id'] = $data->ID;
UM()->password()->reset_request['user_email'] = $user_email;
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
um_fetch_user( $data->ID );
2014-12-22 01:45:24 +02:00
2018-03-20 13:24:38 +02:00
UM()->user()->password_reset();
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
um_reset_user();
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
}
add_action( 'um_reset_password_process_hook', 'um_reset_password_process_hook' );
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
/**
* Process a change request
*
* @param $args
*/
function um_change_password_process_hook( $args ) {
extract( $args );
wp_set_password( $args['user_password'], $args['user_id'] );
delete_user_meta( $args['user_id'], 'reset_pass_hash');
delete_user_meta( $args['user_id'], 'reset_pass_hash_token');
delete_user_meta( $args['user_id'], 'password_rst_attempts');
2016-03-15 15:32:15 -07:00
2016-01-18 20:04:18 +08:00
/**
2018-03-20 13:24:38 +02:00
* UM hook
2016-03-15 15:32:15 -07:00
*
2018-03-20 13:24:38 +02:00
* @type action
* @title um_after_changing_user_password
* @description Hook that runs after user change their password
* @input_vars
* [{"var":"$user_id","type":"int","desc":"User ID"}]
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_after_changing_user_password', 'function_name', 10, 1 );
* @example
* <?php
* add_action( 'um_after_changing_user_password', 'my_after_changing_user_password', 10, 1 );
* function my_user_login_extra( $user_id ) {
* // your code here
* }
* ?>
2016-01-18 20:04:18 +08:00
*/
2018-03-20 13:24:38 +02:00
do_action( 'um_after_changing_user_password', $args['user_id'] );
2016-01-18 20:04:18 +08:00
2018-02-01 10:59:44 +02:00
2018-03-20 13:24:38 +02:00
if ( is_user_logged_in() ) {
wp_logout();
}
2016-01-18 20:04:18 +08:00
2018-03-20 13:24:38 +02:00
exit( wp_redirect( um_get_core_page('login', 'password_changed') ) );
}
add_action( 'um_change_password_process_hook','um_change_password_process_hook' );
2018-02-01 10:59:44 +02:00
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
/**
* Overrides password changed notification
*
* @param $args
*
* @return bool
*/
function um_send_password_change_email( $args ) {
2016-01-18 20:04:18 +08:00
2018-03-20 13:24:38 +02:00
if ( ! is_array( $args ) )
return false;
2016-01-18 20:04:18 +08:00
2018-03-20 13:24:38 +02:00
/**
* @var $user_id
*/
extract( $args );
if ( ! isset( $user_id ) )
2016-01-18 20:04:18 +08:00
return false;
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
um_fetch_user( $user_id );
2016-01-18 20:04:18 +08:00
2018-03-20 13:24:38 +02:00
UM()->user()->password_changed();
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
um_reset_user();
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
return false;
}
add_action( 'send_password_change_email','um_send_password_change_email', 10, 1 );
2014-12-22 01:45:24 +02:00
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
/**
* This is executed after changing password
*
* @param $user_id
*/
function um_after_changing_user_password( $user_id ) {
2014-12-22 01:45:24 +02:00
2018-03-20 13:24:38 +02:00
}
add_action( 'um_after_changing_user_password', 'um_after_changing_user_password' );
/**
* Error handler: reset password
*
* @param $args
*/
function um_reset_password_errors_hook( $args ) {
2016-08-21 16:05:29 +08:00
2018-03-20 13:24:38 +02:00
if ( $_POST[ UM()->honeypot ] != '' )
wp_die('Hello, spam bot!','ultimate-member');
2016-08-25 22:54:19 +08:00
2018-03-20 13:24:38 +02:00
$form_timestamp = trim($_POST['timestamp']);
$live_timestamp = current_time( 'timestamp' );
if ( $form_timestamp == '' && UM()->options()->get( 'enable_timebot' ) == 1 )
wp_die( __('Hello, spam bot!','ultimate-member') );
if ( $live_timestamp - $form_timestamp < 3 && UM()->options()->get( 'enable_timebot' ) == 1 )
wp_die( __('Whoa, slow down! You\'re seeing this message because you tried to submit a form too fast and we think you might be a spam bot. If you are a real human being please wait a few seconds before submitting the form. Thanks!','ultimate-member') );
$user = "";
foreach ( $_POST as $key => $val ) {
if( strstr( $key, "username_b") ){
$user = trim( $val );
2014-12-22 01:45:24 +02:00
}
2018-03-20 13:24:38 +02:00
}
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
if ( empty( $user ) ) {
UM()->form()->add_error('username_b', __('Please provide your username or email','ultimate-member') );
}
2016-04-21 20:05:23 +08:00
2018-03-20 13:24:38 +02:00
if ( ( !is_email( $user ) && !username_exists( $user ) ) || ( is_email( $user ) && !email_exists( $user ) ) ) {
UM()->form()->add_error('username_b', __('We can\'t find an account registered with that address or username','ultimate-member') );
} else {
if ( is_email( $user ) ) {
$user_id = email_exists( $user );
} else {
$user_id = username_exists( $user );
}
2016-04-21 20:05:23 +08:00
2018-03-20 13:24:38 +02:00
$attempts = (int)get_user_meta( $user_id, 'password_rst_attempts', true );
$is_admin = user_can( intval( $user_id ),'manage_options' );
2016-04-21 20:05:23 +08:00
2018-03-20 13:24:38 +02:00
if ( UM()->options()->get( 'enable_reset_password_limit' ) ) { // if reset password limit is set
2016-04-21 20:05:23 +08:00
2018-03-20 13:24:38 +02:00
if ( UM()->options()->get( 'disable_admin_reset_password_limit' ) && $is_admin ) {
// Triggers this when a user has admin capabilities and when reset password limit is disabled for admins
} else {
$limit = UM()->options()->get( 'reset_password_limit_number' );
if ( $attempts >= $limit ) {
UM()->form()->add_error('username_b', __('You have reached the limit for requesting password change for this user already. Contact support if you cannot open the email','ultimate-member') );
2017-12-11 09:53:38 +02:00
} else {
2018-03-20 13:24:38 +02:00
update_user_meta( $user_id, 'password_rst_attempts', $attempts + 1 );
2016-04-21 20:05:23 +08:00
}
2016-01-30 02:18:32 +02:00
}
2018-03-20 13:24:38 +02:00
2014-12-22 01:45:24 +02:00
}
2018-03-20 13:24:38 +02:00
}
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
}
add_action( 'um_reset_password_errors_hook', 'um_reset_password_errors_hook' );
/**
* Error handler: changing password
*
* @param $args
*/
function um_change_password_errors_hook( $args ) {
if ( isset( $_POST[ UM()->honeypot ] ) && $_POST[ UM()->honeypot ] != '' ){
wp_die('Hello, spam bot!','ultimate-member');
2014-12-22 01:45:24 +02:00
}
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
$form_timestamp = trim($_POST['timestamp']);
$live_timestamp = current_time( 'timestamp' );
if ( $form_timestamp == '' && UM()->options()->get( 'enable_timebot' ) == 1 )
wp_die( __('Hello, spam bot!','ultimate-member') );
2014-12-22 01:45:24 +02:00
2018-03-20 13:24:38 +02:00
if ( $live_timestamp - $form_timestamp < 3 && UM()->options()->get( 'enable_timebot' ) == 1 ) {
wp_die( __('Whoa, slow down! You\'re seeing this message because you tried to submit a form too fast and we think you might be a spam bot. If you are a real human being please wait a few seconds before submitting the form. Thanks!','ultimate-member') );
}
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
$reset_pass_hash = '';
2014-12-22 01:45:24 +02:00
2018-03-20 13:24:38 +02:00
if( isset( $_REQUEST['act'] ) && $_REQUEST['act'] == 'reset_password' && um_is_core_page('password-reset') ){
$reset_pass_hash = get_user_meta( $args['user_id'], 'reset_pass_hash', true );
}
2016-11-23 12:30:53 +08:00
2018-03-20 13:24:38 +02:00
if( !is_user_logged_in() && isset( $args ) && ! um_is_core_page('password-reset') ||
is_user_logged_in() && isset( $args['user_id'] ) && $args['user_id'] != get_current_user_id() ||
!is_user_logged_in() && isset( $_REQUEST['hash'] ) && $reset_pass_hash != $_REQUEST['hash'] && um_is_core_page('password-reset')
){
wp_die( __( 'This is not possible for security reasons.','ultimate-member') );
}
if ( isset( $args['user_password'] ) && empty( $args['user_password'] ) ) {
UM()->form()->add_error('user_password', __('You must enter a new password','ultimate-member') );
}
2016-11-30 17:11:41 +08:00
2018-03-20 13:24:38 +02:00
if ( UM()->options()->get( 'reset_require_strongpass' ) ) {
2016-11-30 17:11:41 +08:00
2018-03-20 13:24:38 +02:00
if ( strlen( utf8_decode( $args['user_password'] ) ) < 8 ) {
UM()->form()->add_error('user_password', __('Your password must contain at least 8 characters','ultimate-member') );
2016-11-30 17:11:41 +08:00
}
2018-03-20 13:24:38 +02:00
if ( strlen( utf8_decode( $args['user_password'] ) ) > 30 ) {
UM()->form()->add_error('user_password', __('Your password must contain less than 30 characters','ultimate-member') );
2016-11-23 12:30:53 +08:00
}
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
if ( ! UM()->validation()->strong_pass( $args['user_password'] ) ) {
UM()->form()->add_error('user_password', __('Your password must contain at least one lowercase letter, one capital letter and one number','ultimate-member') );
2014-12-22 01:45:24 +02:00
}
2018-03-20 13:24:38 +02:00
}
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
if ( isset( $args['confirm_user_password'] ) && empty( $args['confirm_user_password'] ) ) {
UM()->form()->add_error('confirm_user_password', __('You must confirm your new password','ultimate-member') );
}
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
if ( isset( $args['user_password'] ) && isset( $args['confirm_user_password'] ) && $args['user_password'] != $args['confirm_user_password'] ) {
UM()->form()->add_error('confirm_user_password', __('Your passwords do not match','ultimate-member') );
}
2014-12-22 01:45:24 +02:00
2018-03-20 13:24:38 +02:00
}
add_action( 'um_change_password_errors_hook', 'um_change_password_errors_hook' );
2016-03-15 15:32:15 -07:00
2014-12-22 01:45:24 +02:00
2018-03-20 13:24:38 +02:00
/**
* Hidden fields
*
* @param $args
*/
function um_change_password_page_hidden_fields( $args ) {
?>
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
<input type="hidden" name="_um_password_change" id="_um_password_change" value="1" />
2014-12-22 01:45:24 +02:00
2018-03-20 13:24:38 +02:00
<input type="hidden" name="user_id" id="user_id" value="<?php echo $args['user_id']; ?>" />
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
<?php
}
add_action( 'um_change_password_page_hidden_fields', 'um_change_password_page_hidden_fields' );
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
/**
* Hidden fields
*
* @param $args
*/
function um_reset_password_page_hidden_fields( $args ) {
?>
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
<input type="hidden" name="_um_password_reset" id="_um_password_reset" value="1" />
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
<?php
}
add_action( 'um_reset_password_page_hidden_fields', 'um_reset_password_page_hidden_fields' );
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
/**
* Form content
*
* @param $args
*/
function um_reset_password_form( $args ) {
$fields = UM()->builtin()->get_specific_fields('password_reset_text,username_b'); ?>
<?php $output = null;
foreach( $fields as $key => $data ) {
$output .= UM()->fields()->edit_field( $key, $data );
} echo $output; ?>
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
<?php
/**
* UM hook
*
* @type action
* @title um_after_password_reset_fields
* @description Hook that runs after user reset their password
* @input_vars
* [{"var":"$args","type":"array","desc":"Form data"}]
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_after_password_reset_fields', 'function_name', 10, 1 );
* @example
* <?php
* add_action( 'um_after_password_reset_fields', 'my_after_password_reset_fields', 10, 1 );
* function my_after_password_reset_fields( $args ) {
* // your code here
* }
* ?>
*/
do_action( 'um_after_password_reset_fields', $args ); ?>
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
<div class="um-col-alt um-col-alt-b">
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
<div class="um-center"><input type="submit" value="<?php _e('Reset my password','ultimate-member'); ?>" class="um-button" id="um-submit-btn" /></div>
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
<div class="um-clear"></div>
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
</div>
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
<?php
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
}
add_action( 'um_reset_password_form', 'um_reset_password_form' );
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
/**
* Change password form
*/
function um_change_password_form() {
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
$fields = UM()->builtin()->get_specific_fields('user_password'); ?>
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
<?php $output = null;
foreach( $fields as $key => $data ) {
$output .= UM()->fields()->edit_field( $key, $data );
}echo $output; ?>
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
<div class="um-col-alt um-col-alt-b">
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
<div class="um-center"><input type="submit" value="<?php _e('Change my password','ultimate-member'); ?>" class="um-button" id="um-submit-btn" /></div>
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
<div class="um-clear"></div>
2016-03-15 15:32:15 -07:00
2018-03-20 13:24:38 +02:00
</div>
<?php
}
add_action( 'um_change_password_form', 'um_change_password_form' );