move some nickname-guessing code to lib/util.php from OpenID

This commit is contained in:
Evan Prodromou 2010-02-16 11:06:10 -05:00
parent 813451c9f9
commit a8c2a8261e
2 changed files with 55 additions and 46 deletions

View File

@ -1008,7 +1008,6 @@ function common_enqueue_notice($notice)
$transports[] = 'plugin'; $transports[] = 'plugin';
} }
$xmpp = common_config('xmpp', 'enabled'); $xmpp = common_config('xmpp', 'enabled');
if ($xmpp) { if ($xmpp) {
@ -1574,3 +1573,56 @@ function common_client_ip()
return array($proxy, $ip); return array($proxy, $ip);
} }
function common_url_to_nickname($url)
{
static $bad = array('query', 'user', 'password', 'port', 'fragment');
$parts = parse_url($url);
# If any of these parts exist, this won't work
foreach ($bad as $badpart) {
if (array_key_exists($badpart, $parts)) {
return null;
}
}
# We just have host and/or path
# If it's just a host...
if (array_key_exists('host', $parts) &&
(!array_key_exists('path', $parts) || strcmp($parts['path'], '/') == 0))
{
$hostparts = explode('.', $parts['host']);
# Try to catch common idiom of nickname.service.tld
if ((count($hostparts) > 2) &&
(strlen($hostparts[count($hostparts) - 2]) > 3) && # try to skip .co.uk, .com.au
(strcmp($hostparts[0], 'www') != 0))
{
return common_nicknamize($hostparts[0]);
} else {
# Do the whole hostname
return common_nicknamize($parts['host']);
}
} else {
if (array_key_exists('path', $parts)) {
# Strip starting, ending slashes
$path = preg_replace('@/$@', '', $parts['path']);
$path = preg_replace('@^/@', '', $path);
if (strpos($path, '/') === false) {
return common_nicknamize($path);
}
}
}
return null;
}
function common_nicknamize($str)
{
$str = preg_replace('/\W/', '', $str);
return strtolower($str);
}

View File

@ -438,49 +438,7 @@ class FinishopenidloginAction extends Action
function urlToNickname($openid) function urlToNickname($openid)
{ {
static $bad = array('query', 'user', 'password', 'port', 'fragment'); return common_url_to_nickname($openid);
$parts = parse_url($openid);
# If any of these parts exist, this won't work
foreach ($bad as $badpart) {
if (array_key_exists($badpart, $parts)) {
return null;
}
}
# We just have host and/or path
# If it's just a host...
if (array_key_exists('host', $parts) &&
(!array_key_exists('path', $parts) || strcmp($parts['path'], '/') == 0))
{
$hostparts = explode('.', $parts['host']);
# Try to catch common idiom of nickname.service.tld
if ((count($hostparts) > 2) &&
(strlen($hostparts[count($hostparts) - 2]) > 3) && # try to skip .co.uk, .com.au
(strcmp($hostparts[0], 'www') != 0))
{
return $this->nicknamize($hostparts[0]);
} else {
# Do the whole hostname
return $this->nicknamize($parts['host']);
}
} else {
if (array_key_exists('path', $parts)) {
# Strip starting, ending slashes
$path = preg_replace('@/$@', '', $parts['path']);
$path = preg_replace('@^/@', '', $path);
if (strpos($path, '/') === false) {
return $this->nicknamize($path);
}
}
}
return null;
} }
function xriToNickname($xri) function xriToNickname($xri)
@ -510,7 +468,6 @@ class FinishopenidloginAction extends Action
function nicknamize($str) function nicknamize($str)
{ {
$str = preg_replace('/\W/', '', $str); return common_nicknamize($str);
return strtolower($str);
} }
} }