diff options
author | Evan Prodromou <evan@status.net> | 2010-11-26 21:38:38 -0500 |
---|---|---|
committer | Evan Prodromou <evan@status.net> | 2010-11-26 21:38:38 -0500 |
commit | 0a4911552e6930f2e5d2830615b29be518af2a8a (patch) | |
tree | 542b85a59ab159e3585bf00467c30d145f205c58 /actions/userxrd.php | |
parent | 3f3b38766f13d93bcc17264ad0aad0df90daf22a (diff) |
Move user xrd action to core and use hooks to extend
Moved the Webfinger user XRD action from the OStatus plugin to core.
Added hooks to add OStatus-specific stuff, but kept general stuff in
the core.
Diffstat (limited to 'actions/userxrd.php')
-rw-r--r-- | actions/userxrd.php | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/actions/userxrd.php b/actions/userxrd.php new file mode 100644 index 000000000..575a07c40 --- /dev/null +++ b/actions/userxrd.php @@ -0,0 +1,65 @@ +<?php +/* + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2010, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * @package OStatusPlugin + * @maintainer James Walker <james@status.net> + */ +class UserxrdAction extends XrdAction +{ + function prepare($args) + { + parent::prepare($args); + + $this->uri = $this->trimmed('uri'); + $this->uri = Discovery::normalize($this->uri); + + if (Discovery::isWebfinger($this->uri)) { + $parts = explode('@', substr(urldecode($this->uri), 5)); + if (count($parts) == 2) { + list($nick, $domain) = $parts; + // @fixme confirm the domain too + // @fixme if domain checking is added, ensure that it will not + // cause problems with sites that have changed domains! + $nick = common_canonical_nickname($nick); + $this->user = User::staticGet('nickname', $nick); + } + } else { + $this->user = User::staticGet('uri', $this->uri); + if (empty($this->user)) { + // try and get it by profile url + $profile = Profile::staticGet('profileurl', $this->uri); + if (!empty($profile)) { + $this->user = User::staticGet('id', $profile->id); + } + } + } + + if (!$this->user) { + $this->clientError(_m('No such user.'), 404); + return false; + } + + return true; + } +} |