public function ajax_connect_clef_account_with_oauth_code() { if (!ClefUtils::isset_POST('identifier')) { return new WP_Error("invalid_oauth_code", __("invalid OAuth Code", "clef")); } try { $info = ClefUtils::exchange_oauth_code_for_info(ClefUtils::isset_POST('identifier'), $this->settings); } catch (LoginException $e) { return new WP_Error("bad_oauth_exchange", $e->getMessage()); } $result = ClefUtils::associate_clef_id($info->id); if (is_wp_error($result)) { return $result; } else { $session = ClefSession::start(); $session->set('logged_in_at', time()); return array("success" => true); } }
public function connect_clef_account() { if (ClefUtils::isset_GET('connect_clef_account') && ClefUtils::isset_get('code')) { try { $info = ClefUtils::exchange_oauth_code_for_info(ClefUtils::isset_GET('code'), $this->settings); $result = ClefUtils::associate_clef_id($info->id); if (is_wp_error($result)) { $this->connect_error = $result; } else { $session = ClefSession::start(); $session->set('logged_in_at', time()); return; } } catch (LoginException $e) { $this->connect_error = new WP_Error("bad_oauth_exchange", $e->getMessage()); } catch (ClefStateException $e) { $this->connect_error = new WP_Error("bad_state_parameter", $e->getMessage()); } } }
public function authenticate_clef($user, $username, $password) { if (isset($_REQUEST['clef']) && isset($_REQUEST['code'])) { $this->apply_filter_and_action_fixes("authenticate"); // Authenticate try { $info = ClefUtils::exchange_oauth_code_for_info($_REQUEST['code'], $this->settings); } catch (LoginException $e) { return new WP_Error('clef', $e->getMessage()); } catch (ClefStateException $e) { return new WP_Error('clef', $e->getMessage()); } $clef_id = $info->id; $email = isset($info->email) ? $info->email : ""; $first_name = isset($info->first_name) ? $info->first_name : ""; $last_name = isset($info->last_name) ? $info->last_name : ""; $users = get_users(array('meta_key' => 'clef_id', 'meta_value' => $clef_id, 'blog_id' => false)); if ($users) { // already have a user with this clef_id $user = $users[0]; } else { $user = get_user_by('email', $email); if (!$user) { if (get_option('users_can_register') && $this->settings->registration_with_clef_is_allowed()) { // Users can register, so create a new user $id = wp_create_user($email, wp_generate_password(16, FALSE), $email); if (is_wp_error($id)) { return new WP_Error('clef', __("An error occurred when creating your new account: ", 'clef') . $id->get_error_message()); } $user = get_user_by('id', $id); } else { $this->clef_id_to_connect = $clef_id; return new WP_Error('clef', __("There's <b>no WordPress user</b> connected to your Clef account. <br></br> Log in with your standard username and password to <b>automatically connect your Clef account</b> now.", 'clef')); } } ClefUtils::associate_clef_id($clef_id, $user->ID); } do_action('clef_login', $user->ID); // Log in the user $session = ClefSession::start(); $session->set('logged_in_at', time()); return $user; } else { return $user; } }