| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * StatusNet, the distributed open-source microblogging tool | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Base class for API actions that require authentication | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * PHP version 5 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * LICENCE: 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/>. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category  API | 
					
						
							|  |  |  |  * @package   StatusNet | 
					
						
							| 
									
										
										
										
											2009-10-12 16:36:00 -07:00
										 |  |  |  * @author    Adrian Lang <mail@adrianlang.de> | 
					
						
							|  |  |  |  * @author    Brenda Wallace <shiny@cpan.org> | 
					
						
							|  |  |  |  * @author    Craig Andrews <candrews@integralblue.com> | 
					
						
							|  |  |  |  * @author    Dan Moore <dan@moore.cx> | 
					
						
							|  |  |  |  * @author    Evan Prodromou <evan@status.net> | 
					
						
							|  |  |  |  * @author    mEDI <medi@milaro.net> | 
					
						
							|  |  |  |  * @author    Sarven Capadisli <csarven@status.net> | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  |  * @author    Zach Copley <zach@status.net> | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |  * @copyright 2009 StatusNet, Inc. | 
					
						
							|  |  |  |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | 
					
						
							|  |  |  |  * @link      http://status.net/ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if (!defined('STATUSNET')) { | 
					
						
							|  |  |  |     exit(1); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-12 15:12:20 -07:00
										 |  |  | require_once INSTALLDIR . '/lib/api.php'; | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  | require_once INSTALLDIR . '/lib/apioauth.php'; | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-27 15:33:46 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Actions extending this class will require auth | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @category API | 
					
						
							|  |  |  |  * @package  StatusNet | 
					
						
							|  |  |  |  * @author   Zach Copley <zach@status.net> | 
					
						
							|  |  |  |  * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | 
					
						
							|  |  |  |  * @link     http://status.net/ | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 14:22:18 -07:00
										 |  |  | class ApiAuthAction extends ApiAction | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  |     var $access_token; | 
					
						
							|  |  |  |     var $oauth_access_type; | 
					
						
							| 
									
										
										
										
											2009-09-30 10:22:26 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 16:57:22 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Take arguments for running, and output basic auth header if needed | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param array $args $_REQUEST args | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return boolean success flag | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function prepare($args) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         parent::prepare($args); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($this->requiresAuth()) { | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |             $this->consumer_key = $this->arg('oauth_consumer_key'); | 
					
						
							|  |  |  |             $this->access_token = $this->arg('oauth_token'); | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |             if (!empty($this->access_token)) { | 
					
						
							|  |  |  |                 $this->checkOAuthRequest(); | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 $this->checkBasicAuthUser(); | 
					
						
							| 
									
										
										
										
											2010-01-14 02:16:03 +00:00
										 |  |  |                 // By default, all basic auth users have read and write access
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 $this->access = self::READ_WRITE; | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2009-10-09 16:57:22 -07:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-14 02:16:03 +00:00
										 |  |  |     function handle($args) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         parent::handle($args); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($this->isReadOnly($args) == false) { | 
					
						
							|  |  |  |             if ($this->access == self::READ_ONLY) { | 
					
						
							|  |  |  |                 $this->clientError(_('API method requires write access.'), 401); | 
					
						
							|  |  |  |                 exit(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  |     function checkOAuthRequest() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |         common_debug("We have an OAuth request."); | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |         $datastore   = new ApiStatusNetOAuthDataStore(); | 
					
						
							|  |  |  |         $server      = new OAuthServer($datastore); | 
					
						
							|  |  |  |         $hmac_method = new OAuthSignatureMethod_HMAC_SHA1(); | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |         $server->add_signature_method($hmac_method); | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |         ApiOauthAction::cleanRequest(); | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |         try { | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |             $req  = OAuthRequest::from_request(); | 
					
						
							|  |  |  |             $server->verify_request($req); | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |             common_debug("Good OAuth request!"); | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |             $app = Oauth_application::getByConsumerKey($this->consumer_key); | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |             if (empty($app)) { | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |                 // this should really not happen
 | 
					
						
							|  |  |  |                 common_log(LOG_WARN, | 
					
						
							|  |  |  |                            "Couldn't find the OAuth app for consumer key: $this->consumer_key"); | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |                 throw new OAuthException('No application for that consumer key.'); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |             $appUser = Oauth_application_user::staticGet('token', | 
					
						
							|  |  |  |                                                          $this->access_token); | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |             // XXX: check that app->id and appUser->application_id and consumer all
 | 
					
						
							|  |  |  |             // match?
 | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |             if (!empty($appUser)) { | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |                 // read or read-write
 | 
					
						
							|  |  |  |                 $this->oauth_access_type = $appUser->access_type; | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |                 // If access_type == 0 we have either a request token
 | 
					
						
							|  |  |  |                 // or a bad / revoked access token
 | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |                 if ($this->oauth_access_type != 0) { | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-14 02:16:03 +00:00
										 |  |  |                     // Set the read or read-write access for the api call
 | 
					
						
							|  |  |  |                     $this->access = ($appUser->access_type & Oauth_application::$writeAccess) | 
					
						
							|  |  |  |                       ? self::READ_WRITE : self::READ_ONLY; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-20 18:01:07 -08:00
										 |  |  |                     if (Event::handle('StartSetApiUser', array(&$user))) { | 
					
						
							|  |  |  |                         $this->auth_user = User::staticGet('id', $appUser->profile_id); | 
					
						
							|  |  |  |                         Event::handle('EndSetApiUser', array($user)); | 
					
						
							|  |  |  |                     } | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |                     $msg = "API OAuth authentication for user '%s' (id: %d) on behalf of " . | 
					
						
							|  |  |  |                       "application '%s' (id: %d)."; | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |                     common_log(LOG_INFO, sprintf($msg, | 
					
						
							|  |  |  |                                                  $this->auth_user->nickname, | 
					
						
							|  |  |  |                                                  $this->auth_user->id, | 
					
						
							|  |  |  |                                                  $app->name, | 
					
						
							|  |  |  |                                                  $app->id)); | 
					
						
							|  |  |  |                     return true; | 
					
						
							|  |  |  |                 } else { | 
					
						
							|  |  |  |                     throw new OAuthException('Bad access token.'); | 
					
						
							|  |  |  |                 } | 
					
						
							|  |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |                 // also should not happen
 | 
					
						
							|  |  |  |                 throw new OAuthException('No user for that token.'); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |         } catch (OAuthException $e) { | 
					
						
							|  |  |  |             common_log(LOG_WARN, 'API OAuthException - ' . $e->getMessage()); | 
					
						
							|  |  |  |             common_debug(var_export($req, true)); | 
					
						
							|  |  |  |             $this->showOAuthError($e->getMessage()); | 
					
						
							|  |  |  |             exit(); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function showOAuthError($msg) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-01-13 05:06:35 +00:00
										 |  |  |         header('HTTP/1.1 401 Unauthorized'); | 
					
						
							|  |  |  |         header('Content-Type: text/html; charset=utf-8'); | 
					
						
							|  |  |  |         print $msg . "\n"; | 
					
						
							| 
									
										
										
										
											2010-01-11 17:30:56 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Does this API resource require authentication? | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return boolean true | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function requiresAuth() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-27 15:33:46 -07:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2009-11-09 20:01:46 +01:00
										 |  |  |      * Check for a user specified via HTTP basic auth. If there isn't | 
					
						
							| 
									
										
										
										
											2009-09-27 15:33:46 -07:00
										 |  |  |      * one, try to get one by outputting the basic auth header. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return boolean true or false | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |     function checkBasicAuthUser() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->basicAuthProcessHeader(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-12 15:12:20 -07:00
										 |  |  |         $realm = common_config('site', 'name') . ' API'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |         if (!isset($this->auth_user)) { | 
					
						
							| 
									
										
										
										
											2009-10-12 15:12:20 -07:00
										 |  |  |             header('WWW-Authenticate: Basic realm="' . $realm . '"'); | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |             // show error if the user clicks 'cancel'
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $this->showBasicAuthError(); | 
					
						
							| 
									
										
										
										
											2009-10-09 16:57:22 -07:00
										 |  |  |             exit; | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $nickname = $this->auth_user; | 
					
						
							|  |  |  |             $password = $this->auth_pw; | 
					
						
							| 
									
										
										
										
											2009-11-18 14:19:43 -05:00
										 |  |  |             $user = common_check_user($nickname, $password); | 
					
						
							|  |  |  |             if (Event::handle('StartSetApiUser', array(&$user))) { | 
					
						
							|  |  |  |                 $this->auth_user = $user; | 
					
						
							|  |  |  |                 Event::handle('EndSetApiUser', array($user)); | 
					
						
							|  |  |  |             } | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |             if (empty($this->auth_user)) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 // basic authentication failed
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 list($proxy, $ip) = common_client_ip(); | 
					
						
							| 
									
										
										
										
											2009-09-27 15:33:46 -07:00
										 |  |  |                 common_log( | 
					
						
							|  |  |  |                     LOG_WARNING, | 
					
						
							|  |  |  |                     'Failed API auth attempt, nickname = ' . | 
					
						
							|  |  |  |                     "$nickname, proxy = $proxy, ip = $ip." | 
					
						
							|  |  |  |                 ); | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |                 $this->showBasicAuthError(); | 
					
						
							| 
									
										
										
										
											2009-10-09 16:57:22 -07:00
										 |  |  |                 exit; | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2010-01-14 02:16:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-27 15:33:46 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Read the HTTP headers and set the auth user.  Decodes HTTP_AUTHORIZATION | 
					
						
							|  |  |  |      * param to support basic auth when PHP is running in CGI mode. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |     function basicAuthProcessHeader() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-09-27 15:33:46 -07:00
										 |  |  |         if (isset($_SERVER['AUTHORIZATION']) | 
					
						
							|  |  |  |             || isset($_SERVER['HTTP_AUTHORIZATION']) | 
					
						
							|  |  |  |         ) { | 
					
						
							|  |  |  |                 $authorization_header = isset($_SERVER['HTTP_AUTHORIZATION']) | 
					
						
							|  |  |  |                 ? $_SERVER['HTTP_AUTHORIZATION'] : $_SERVER['AUTHORIZATION']; | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if (isset($_SERVER['PHP_AUTH_USER'])) { | 
					
						
							|  |  |  |             $this->auth_user = $_SERVER['PHP_AUTH_USER']; | 
					
						
							|  |  |  |             $this->auth_pw = $_SERVER['PHP_AUTH_PW']; | 
					
						
							| 
									
										
										
										
											2009-09-27 15:33:46 -07:00
										 |  |  |         } elseif (isset($authorization_header) | 
					
						
							|  |  |  |             && strstr(substr($authorization_header, 0, 5), 'Basic')) { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |             // decode the HTTP_AUTHORIZATION header on php-cgi server self
 | 
					
						
							|  |  |  |             // on fcgid server the header name is AUTHORIZATION
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             $auth_hash = base64_decode(substr($authorization_header, 6)); | 
					
						
							|  |  |  |             list($this->auth_user, $this->auth_pw) = explode(':', $auth_hash); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             // set all to null on a empty basic auth request
 | 
					
						
							| 
									
										
										
										
											2009-09-27 15:33:46 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |             if ($this->auth_user == "") { | 
					
						
							|  |  |  |                 $this->auth_user = null; | 
					
						
							|  |  |  |                 $this->auth_pw = null; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             $this->auth_user = null; | 
					
						
							|  |  |  |             $this->auth_pw = null; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-27 15:33:46 -07:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Output an authentication error message.  Use XML or JSON if one | 
					
						
							|  |  |  |      * of those formats is specified, otherwise output plain text | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return void | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |     function showBasicAuthError() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         header('HTTP/1.1 401 Unauthorized'); | 
					
						
							|  |  |  |         $msg = 'Could not authenticate you.'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-09 17:11:40 -07:00
										 |  |  |         if ($this->format == 'xml') { | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |             header('Content-Type: application/xml; charset=utf-8'); | 
					
						
							|  |  |  |             $this->startXML(); | 
					
						
							|  |  |  |             $this->elementStart('hash'); | 
					
						
							|  |  |  |             $this->element('error', null, $msg); | 
					
						
							|  |  |  |             $this->element('request', null, $_SERVER['REQUEST_URI']); | 
					
						
							|  |  |  |             $this->elementEnd('hash'); | 
					
						
							|  |  |  |             $this->endXML(); | 
					
						
							| 
									
										
										
										
											2009-10-09 17:11:40 -07:00
										 |  |  |         } elseif ($this->format == 'json') { | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |             header('Content-Type: application/json; charset=utf-8'); | 
					
						
							| 
									
										
										
										
											2009-09-27 15:33:46 -07:00
										 |  |  |             $error_array = array('error' => $msg, | 
					
						
							|  |  |  |                                  'request' => $_SERVER['REQUEST_URI']); | 
					
						
							| 
									
										
										
										
											2009-09-25 16:58:35 -07:00
										 |  |  |             print(json_encode($error_array)); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             header('Content-type: text/plain'); | 
					
						
							|  |  |  |             print "$msg\n"; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-27 15:33:46 -07:00
										 |  |  | } |