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

Check your 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); } } } ?>