. */ if (!defined('LACONICA')) { exit(1); } // XXX: Not sure of terminology yet... maybe call things "api_methods" insteads of "commands" class ApiAction extends Action { function handle($args) { parent::handle($args); $command = $this->arg('command'); # XXX Maybe check to see if the command actually exists first if($this->requires_auth($command)) { if (!isset($_SERVER['PHP_AUTH_USER'])) { # This header makes basic auth go header('WWW-Authenticate: Basic realm="Laconica API'); # if the user hits cancel -- bam! common_show_basic_auth_error(); } else { $nickname = $_SERVER['PHP_AUTH_USER']; $password = $_SERVER['PHP_AUTH_PW']; $user = common_check_user($nickname, $password); if ($user) { $this->process_command($command, $nickname, $password); } else { # basic authentication failed common_show_basic_auth_error(); } } } else { $this->process_command($command); } } # this is where we can dispatch off to api Class files function process_command($command, $nickname=NULL, $password=NULL) { $parts = explode('.', $command); $api_action = "api_$parts[0]"; $extension = $parts[1]; # requested content type $api_actionfile = INSTALLDIR."/actions/$api_action.php"; if (file_exists($api_actionfile)) { require_once($api_actionfile); $action_class = ucfirst($api_action)."Action"; $action_obj = new $action_class(); # need to pass off nick and password and stuff ... put in $args? constructor? # pull from $_REQUEST later? call_user_func(array($action_obj, 'handle'), $_REQUEST); } else { # need appropriate API error functs print "\nerror!\n"; } } # Whitelist of API methods that don't need authentication function requires_auth($command) { # The only command that doesn't in Twitter's API is public_timeline if (ereg('^public_timeline.*$', $command)) { return false; } return true; } }