function wsl_process_login() { if (!isset($_REQUEST['action']) || $_REQUEST['action'] != "wordpress_social_login") { return; } if (isset($_REQUEST['redirect_to']) && $_REQUEST['redirect_to'] != '') { $redirect_to = $_REQUEST['redirect_to']; // Redirect to https if user wants ssl if (isset($secure_cookie) && $secure_cookie && false !== strpos($redirect_to, 'wp-admin')) { $redirect_to = preg_replace('|^http://|', 'https://', $redirect_to); } if (strpos($redirect_to, 'wp-admin')) { $redirect_to = get_option('wsl_settings_redirect_url'); } } if (empty($redirect_to)) { $redirect_to = get_option('wsl_settings_redirect_url'); } if (empty($redirect_to)) { $redirect_to = site_url(); } try { // load hybridauth require_once dirname(__FILE__) . "/../hybridauth/Hybrid/Auth.php"; // selected provider name $provider = @trim(strip_tags($_REQUEST["provider"])); // build required configuratoin for this provider if (!get_option('wsl_settings_' . $provider . '_enabled')) { throw new Exception('Unknown or disabled provider'); } $config = array(); $config["base_url"] = plugins_url() . '/' . basename(dirname(__FILE__)) . '/hybridauth/'; $config["providers"] = array(); $config["providers"][$provider] = array(); $config["providers"][$provider]["enabled"] = true; // provider application id ? if (get_option('wsl_settings_' . $provider . '_app_id')) { $config["providers"][$provider]["keys"]["id"] = get_option('wsl_settings_' . $provider . '_app_id'); } // provider application key ? if (get_option('wsl_settings_' . $provider . '_app_key')) { $config["providers"][$provider]["keys"]["key"] = get_option('wsl_settings_' . $provider . '_app_key'); } // provider application secret ? if (get_option('wsl_settings_' . $provider . '_app_secret')) { $config["providers"][$provider]["keys"]["secret"] = get_option('wsl_settings_' . $provider . '_app_secret'); } // create an instance for Hybridauth $hybridauth = new Hybrid_Auth($config); // try to authenticate the selected $provider if ($hybridauth->isConnectedWith($provider)) { $adapter = $hybridauth->getAdapter($provider); $hybridauth_user_profile = $adapter->getUserProfile(); } else { throw new Exception('User not connected with ' . $provider . '!'); } $user_email = $hybridauth_user_profile->email; } catch (Exception $e) { die("Unspecified error. #" . $e->getCode()); } $user_id = null; // if the user email is verified, then try to map to legacy account if exist // > Currently only Facebook, Google, Yahaoo and Foursquare do provide the verified user email. if (!empty($hybridauth_user_profile->emailVerified)) { $user_id = (int) email_exists($hybridauth_user_profile->emailVerified); } // try to get user by meta if not if (!$user_id) { $user_id = (int) wsl_get_user_by_meta($provider, $hybridauth_user_profile->identifier); } // if user found if ($user_id) { $user_data = get_userdata($user_id); $user_login = $user_data->user_login; } else { // generate a valid user login $user_login = trim(str_replace(' ', '_', strtolower($hybridauth_user_profile->displayName))); if (empty($user_login)) { $user_login = $hybridauth_user_profile->lastName . " " . $hybridauth_user_profile->firstName; } // user name should be unique if (username_exists($user_login)) { $i = 1; $user_login_tmp = $user_login; do { $user_login_tmp = $user_login . "_" . $i++; } while (username_exists($user_login_tmp)); $user_login = $user_login_tmp; } // generate an email if none if (!isset($user_email) or !is_email($user_email)) { $user_email = strtolower($provider . "_user_" . $user_login) . "@example.com"; } // email should be unique if (email_exists($user_email)) { do { $user_email = md5(uniqid(wp_rand(10000, 99000))) . "@example.com"; } while (email_exists($user_email)); } $user_login = sanitize_user($user_login, true); if (!validate_username($user_login)) { $user_login = strtolower($provider) . "_user_" . md5($hybridauth_user_profile->identifier); } $userdata = array('user_login' => $user_login, 'user_email' => $user_email, 'first_name' => $hybridauth_user_profile->firstName, 'last_name' => $hybridauth_user_profile->lastName, 'display_name' => !empty($hybridauth_user_profile->displayName) ? $hybridauth_user_profile->displayName : $user_login, 'user_url' => $hybridauth_user_profile->profileURL, 'description' => $hybridauth_user_profile->description, 'user_pass' => wp_generate_password()); // Create a new user $user_id = wp_insert_user($userdata); // Send notifications if (get_option('wsl_settings_users_notification')) { if (get_option('wsl_settings_users_notification') == 1) { wsl_admin_notification($user_id, $provider); } } // update user metadata if ($user_id && is_integer($user_id)) { update_user_meta($user_id, $provider, $hybridauth_user_profile->identifier); } else { if (is_wp_error($user_id)) { //- http://wordpress.org/support/topic/plugin-wordpress-social-login-error-with-vkontake-provider?replies=1#post-2796109 echo $user_id->get_error_message(); } else { die("An error occurred while creating a new user!"); } } } $user_age = $hybridauth_user_profile->age; // not that precise you say... well welcome to my world if (!$user_age && (int) $hybridauth_user_profile->birthYear) { $user_age = (int) date("Y") - (int) $hybridauth_user_profile->birthYear; } update_user_meta($user_id, 'wsl_user', $provider); update_user_meta($user_id, 'wsl_user_gender', $hybridauth_user_profile->gender); update_user_meta($user_id, 'wsl_user_age', $user_age); update_user_meta($user_id, 'wsl_user_image', $hybridauth_user_profile->photoURL); wp_set_auth_cookie($user_id); wp_safe_redirect($redirect_to); exit; }
/** * Create a new wordpress user * * Ref: http://codex.wordpress.org/Function_Reference/wp_insert_user */ function wsl_process_login_create_wp_user($provider, $hybridauth_user_profile, $requested_user_login, $requested_user_email) { // HOOKABLE: do_action("wsl_process_login_create_wp_user_start", $provider, $hybridauth_user_profile, $requested_user_login, $requested_user_email); $user_login = ''; $user_email = ''; // if coming from "complete registration form" if ($requested_user_login) { $user_login = $requested_user_login; } if ($requested_user_email) { $user_email = $requested_user_email; } if (!$user_email) { $user_email = $hybridauth_user_profile->email; } // Verify that an email address has been given to us. Whether it's unique will be verified later // by the Wordpress core, during the wp_insert_user() call below. if (!isset($user_email) or !is_email($user_email)) { return wsl_process_login_render_notice_page(_wsl__('A valid email is required to connect this website', 'wordpress-social-login')); } if (!$user_login) { // attempt to generate user_login from hybridauth user profile display name $user_login = $hybridauth_user_profile->displayName; // sanitize user login $user_login = sanitize_user($user_login, true); // remove spaces and dots $user_login = trim(str_replace(array(' ', '.'), '_', $user_login)); $user_login = trim(str_replace('__', '_', $user_login)); // if user profile display name is not provided if (empty($user_login)) { $user_login = sanitize_user(current(explode('@', $user_email)), true); } // user name should be unique if (username_exists($user_login)) { $i = 1; $user_login_tmp = $user_login; do { $user_login_tmp = $user_login . "_" . $i++; } while (username_exists($user_login_tmp)); $user_login = $user_login_tmp; } } $display_name = $hybridauth_user_profile->displayName; if (empty($display_name)) { $display_name = $hybridauth_user_profile->firstName; } if (empty($display_name)) { $display_name = strtolower($provider) . "_user"; } $userdata = array('user_login' => $user_login, 'user_email' => $user_email, 'display_name' => $display_name, 'first_name' => $hybridauth_user_profile->firstName, 'last_name' => $hybridauth_user_profile->lastName, 'user_url' => $hybridauth_user_profile->profileURL, 'description' => $hybridauth_user_profile->description, 'user_pass' => wp_generate_password()); // Bouncer::Membership level $wsl_settings_bouncer_new_users_membership_default_role = get_option('wsl_settings_bouncer_new_users_membership_default_role'); // if level eq "default", we set role to wp default user role if ($wsl_settings_bouncer_new_users_membership_default_role == "default") { $userdata['role'] = get_option('default_role'); } elseif ($wsl_settings_bouncer_new_users_membership_default_role && $wsl_settings_bouncer_new_users_membership_default_role != 'wslnorole') { $userdata['role'] = $wsl_settings_bouncer_new_users_membership_default_role; } // Bouncer::User Moderation // > if Bouncer::User Moderation is enabled (Yield to Theme My Login), then we overwrite the user role to 'pending' # http://www.jfarthing.com/development/theme-my-login/user-moderation/ if (get_option('wsl_settings_bouncer_new_users_moderation_level') > 100) { $userdata['role'] = "pending"; } // HOOKABLE: change the user data $userdata = apply_filters('wsl_hook_process_login_alter_wp_insert_user_data', $userdata, $provider, $hybridauth_user_profile); // DEPRECIATED: as of 2.2.3 // $userdata = apply_filters( 'wsl_hook_process_login_alter_userdata', $userdata, $provider, $hybridauth_user_profile ); // HOOKABLE: This action runs just before creating a new wordpress user. do_action('wsl_hook_process_login_before_wp_insert_user', $userdata, $provider, $hybridauth_user_profile); // DEPRECIATED: as of 2.2.3 // do_action( 'wsl_hook_process_login_before_insert_user', $userdata, $provider, $hybridauth_user_profile ); // HOOKABLE: This action runs just before creating a new wordpress user, it delegate user insert to a custom function. $user_id = apply_filters('wsl_hook_process_login_delegate_wp_insert_user', $userdata, $provider, $hybridauth_user_profile); // Create a new WordPress user if (!$user_id || !is_integer($user_id)) { $user_id = wp_insert_user($userdata); } // do not continue without user_id if (!$user_id || !is_integer($user_id)) { if (is_wp_error($user_id)) { return wsl_process_login_render_notice_page(_wsl__("An error occurred while creating a new user: "******"An error occurred while creating a new user!", 'wordpress-social-login')); } // wp_insert_user may fail on first and last name meta, expliciting setting to correct. update_user_meta($user_id, 'first_name', apply_filters('pre_user_first_name', $userdata['first_name'])); update_user_meta($user_id, 'last_name', apply_filters('pre_user_last_name', $userdata['last_name'])); // Send notifications if (get_option('wsl_settings_users_notification') == 1) { wsl_admin_notification($user_id, $provider); } // HOOKABLE: This action runs just after a wordpress user has been created // > Note: At this point, the user has been added to wordpress database, but NOT CONNECTED. do_action('wsl_hook_process_login_after_wp_insert_user', $user_id, $provider, $hybridauth_user_profile); // DEPRECIATED: as of 2.2.3 // do_action( 'wsl_hook_process_login_after_create_wp_user', $user_id, $provider, $hybridauth_user_profile ); // returns the user created user id return $user_id; }
function wsl_process_login_create_wp_user($provider, $hybridauth_user_profile, $request_user_login, $request_user_email) { // HOOKABLE: any action to fire right before a user created on database do_action('wsl_hook_process_login_before_create_wp_user'); $user_login = null; $user_email = null; // if coming from "complete registration form" if ($request_user_email && $request_user_login) { $user_login = $request_user_login; $user_email = $request_user_email; } else { // generate a valid user login $user_login = trim(str_replace(' ', '_', strtolower($hybridauth_user_profile->displayName))); $user_email = $hybridauth_user_profile->email; if (empty($user_login)) { $user_login = trim($hybridauth_user_profile->lastName . " " . $hybridauth_user_profile->firstName); } if (empty($user_login)) { $user_login = strtolower($provider) . "_user_" . md5($hybridauth_user_profile->identifier); } // user name should be unique if (username_exists($user_login)) { $i = 1; $user_login_tmp = $user_login; do { $user_login_tmp = $user_login . "_" . $i++; } while (username_exists($user_login_tmp)); $user_login = $user_login_tmp; } // generate an email if none if (!isset($user_email) or !is_email($user_email)) { $user_email = strtolower($provider . "_user_" . $user_login) . "@example.com"; } // email should be unique if (email_exists($user_email)) { do { $user_email = md5(uniqid(wp_rand(10000, 99000))) . "@example.com"; } while (email_exists($user_email)); } $user_login = sanitize_user($user_login, true); if (!validate_username($user_login)) { $user_login = strtolower($provider) . "_user_" . md5($hybridauth_user_profile->identifier); } } $display_name = $hybridauth_user_profile->displayName; if ($request_user_login || empty($display_name)) { $display_name = $user_login; } $userdata = array('user_login' => $user_login, 'user_email' => $user_email, 'display_name' => $display_name, 'first_name' => $hybridauth_user_profile->firstName, 'last_name' => $hybridauth_user_profile->lastName, 'user_url' => $hybridauth_user_profile->profileURL, 'description' => $hybridauth_user_profile->description, 'user_pass' => wp_generate_password()); // Bouncer :: Membership level if (get_option('wsl_settings_bouncer_new_users_membership_default_role') != "default") { $userdata['role'] = get_option('wsl_settings_bouncer_new_users_membership_default_role'); } // Bouncer :: User Moderation : None if (get_option('wsl_settings_bouncer_new_users_moderation_level') == 1) { // well do nothing.. } // Bouncer :: User Moderation : Yield to Theme My Login plugin if (get_option('wsl_settings_bouncer_new_users_moderation_level') > 100) { $userdata['role'] = "pending"; } // HOOKABLE: change the user data if (apply_filters('wsl_hook_process_login_alter_userdata', $userdata, $provider, $hybridauth_user_profile)) { $userdata = apply_filters('wsl_hook_process_login_alter_userdata', $userdata, $provider, $hybridauth_user_profile); } // HOOKABLE: any action to fire right before a user created on database do_action('wsl_hook_process_login_before_insert_user', $userdata, $provider, $hybridauth_user_profile); // HOOKABLE: delegate user insert to a custom function $user_id = apply_filters('wsl_hook_process_login_alter_insert_user', $userdata, $provider, $hybridauth_user_profile); // Create a new user if (!$user_id || !is_integer($user_id)) { $user_id = wp_insert_user($userdata); } // update user metadata if ($user_id && is_integer($user_id)) { update_user_meta($user_id, $provider, $hybridauth_user_profile->identifier); } else { if (is_wp_error($user_id)) { echo $user_id->get_error_message(); } else { return wsl_render_notices_pages(_wsl__("An error occurred while creating a new user!", 'wordpress-social-login')); } } // Send notifications if (get_option('wsl_settings_users_notification') == 1) { wsl_admin_notification($user_id, $provider); } // HOOKABLE: any action to fire right after a user created on database do_action('wsl_hook_process_login_after_create_wp_user', $user_id, $provider, $hybridauth_user_profile); return array($user_id, $user_login, $user_email); }