X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=actions%2Fpostnotice.php;h=694c7808d9930722c5d2e054a59b0387201c4ae2;hb=f2d6e1e375410bee0efc90c80b1e74699a4c6b7d;hp=dd13f60b2a2f89db508029624468b8c4be653f05;hpb=2fe978e1bb044a2ba8920156184dee7bb57c728b;p=quix0rs-gnu-social.git diff --git a/actions/postnotice.php b/actions/postnotice.php index dd13f60b2a..694c7808d9 100644 --- a/actions/postnotice.php +++ b/actions/postnotice.php @@ -1,7 +1,18 @@ + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + * + * StatusNet - the distributed open-source microblogging tool + * Copyright (C) 2008, 2009, 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 @@ -17,11 +28,80 @@ * along with this program. If not, see . */ -if (!defined('LACONICA')) { exit(1); } +if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); } + +require_once INSTALLDIR.'/lib/omb.php'; +require_once INSTALLDIR.'/extlib/libomb/service_provider.php'; + +/** + * Handler for postnotice action + * + * @category Action + * @package StatusNet + * @author Evan Prodromou + * @author Robin Millette + * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 + * @link http://status.net/ + */ +class PostnoticeAction extends Action +{ + /** + * For initializing members of the class. + * + * @param array $argarray misc. arguments + * + * @return boolean true + */ + function prepare($argarray) + { + StatusNet::setApi(true); // Send smaller error pages + + parent::prepare($argarray); + + try { + $this->checkNotice(); + } catch (Exception $e) { + $this->clientError($e->getMessage()); + return false; + } + return true; + } + + function handle($args) + { + parent::handle($args); + try { + $srv = new OMB_Service_Provider(null, omb_oauth_datastore(), + omb_oauth_server()); + $srv->handlePostNotice(); + } catch (OMB_RemoteServiceException $rse) { + $msg = $rse->getMessage(); + if (preg_match('/Revoked accesstoken/', $msg) || + preg_match('/No subscriber/', $msg)) { + $this->clientError($msg, 403); + } else { + $this->clientError($msg); + } + } catch (Exception $e) { + $this->serverError($e->getMessage()); + return; + } + } -class PostnoticeAction extends Action { - function handle($args) { - parent::handle($args); - common_server_error(_t('Not yet implemented.')); - } + function checkNotice() + { + $content = common_shorten_links($_POST['omb_notice_content']); + if (Notice::contentTooLong($content)) { + $this->clientError(_('Invalid notice content.'), 400); + return false; + } + $license = $_POST['omb_notice_license']; + $site_license = common_config('license', 'url'); + if ($license && !common_compatible_license($license, $site_license)) { + throw new Exception(sprintf(_('Notice license ‘%1$s’ is not ' . + 'compatible with site license ‘%2$s’.'), + $license, $site_license)); + } + } } +?> \ No newline at end of file