user_login."@".WebfingerPlugin::getHost();
if ($protocol) {
$webfinger = "acct:".$webfinger;
}
return $webfinger;
} else {
return null;
}
}
/**
* returns all webfingers
*
* @param mixed $id_or_name_or_object
* @param boolean $protocol
*
* @return array
*/
function get_webfingers($id_or_name_or_object = null, $protocol = false) {
$user = WebfingerPlugin::getUserByVarious($id_or_name_or_object);
$webfingers = array();
if ($user) {
$webfingers[] = ($protocol ? "acct:" : "").get_webfinger($user);
$webfingers[] = get_author_posts_url($user->ID, $user->user_nicename);
$webfingers = apply_filters('webfingers', $webfingers);
return $webfingers;
} else {
return array();
}
}
/**
* webfinger
*
* @author Matthias Pfefferle
*/
class WebfingerPlugin {
/**
* adds some query vars
*
* @param array $vars
* @return array
*/
function queryVars($vars) {
$vars[] = 'webfinger-uri';
//$vars[] = 'webfinger';
return $vars;
}
/**
* parses the request
*/
function parseRequest() {
global $wp_query, $wp;
$queryVars = $wp->query_vars;
if( array_key_exists('webfinger-uri', $queryVars) ) {
if (!$user = WebfingerPlugin::getUserByUri($queryVars['webfinger-uri'])) {
return null;
}
$url = get_author_posts_url($user->ID, $user->user_nicename);
header('Content-Type: application/xrd+xml; charset=' . get_option('blog_charset'), true);
echo "\n";
echo "\n";
echo " ".htmlentities($queryVars['webfinger-uri'])." \n";
echo " ".$url." \n";
echo " \n";
echo " \n";
do_action('webfinger_xrd', $user);
// @deprecated please don't use
do_action('webfinger_xrd_'.$user->user_login);
echo " ";
exit;
} else {
return null;
}
}
/**
* returns a Userobject
*
* @param string $uri
* @return stdClass
*/
function getUserByUri($uri) {
global $wpdb;
$uri = urldecode($uri);
if (preg_match("~^https?://~i", $uri)) {
// check if url matches with a
// users profile url
foreach (get_users_of_blog() as $user) {
if (rtrim(str_replace("www.", "", get_author_posts_url($user->ID, $user->user_nicename)), "/") ==
rtrim(str_replace("www.", "", $uri), "/")) {
return $user;
}
}
} elseif (preg_match('/^([a-zA-Z]+:)?([^@]+)@([a-zA-Z0-9._-]+)$/i', $uri, $array)) {
$username = $array[2];
$host = $array[3];
$email = $username."@".$host;
if ($host == WebfingerPlugin::getHost()) {
$sql = "SELECT * FROM $wpdb->users u INNER JOIN $wpdb->usermeta um ON u.id=um.user_id WHERE u.user_email = '$email' OR
(um.meta_key = 'jabber' AND um.meta_value = '$email') OR
u.user_login = '$username' LIMIT 1;";
$user = $wpdb->get_results($wpdb->prepare($sql));
if (!empty($user)) {
return $user[0];
}
}
}
return false;
}
/**
* add the host meta information
*/
function addHostMeta() {
echo " ";
}
/**
* adds lrdd-header-link to author profile pages
*/
function addHtmlHeader() {
global $wp_query;
if (is_author() && !is_feed()) {
$author = $wp_query->get_queried_object();
$url = get_author_posts_url($author->ID, $author->user_nicename);
echo "\n";
echo " ";
echo "\n";
}
}
/**
* prints webfinger part on the user-site
*/
function addUserProfileInfos($user) {
$webfingers = get_webfingers($user, true);
?>
Webfinger
' . __('Identifiers') . '';
array_unshift( $links, $settings_link );
}
return $links;
}
/**
* Convenience method to get user data by ID, username, object or from current user.
*
* @param mixed $id_or_name_or_object the username, ID or object. If not provided, the current user will be used.
* @return bool|object False on failure, User DB row object
*
* @author Will Norris
* @see get_userdata_by_various() # DiSo OpenID-Plugin
*/
function getUserByVarious($id_or_name_or_object = null) {
if ( $id_or_name_or_object === null ) {
$user = wp_get_current_user();
if ($user == null) return false;
return $user->data;
} else if ( is_object($id_or_name_or_object) ) {
return $id_or_name_or_object;
} else if ( is_numeric($id_or_name_or_object) ) {
return get_userdata($id_or_name_or_object);
} else {
return get_userdatabylogin($id_or_name_or_object);
}
}
}
?>