]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/postnotice.php
notice_inbox.id -> notice_inbox.notice_id
[quix0rs-gnu-social.git] / actions / postnotice.php
index dd13f60b2a2f89db508029624468b8c4be653f05..be486a1e9df39491e1b79aa59e298859ea8eb5fb 100644 (file)
 
 if (!defined('LACONICA')) { exit(1); }
 
+require_once(INSTALLDIR.'/lib/omb.php');
+
 class PostnoticeAction extends Action {
        function handle($args) {
                parent::handle($args);
-               common_server_error(_t('Not yet implemented.'));
+               try {
+                       common_remove_magic_from_request();
+                       $req = OAuthRequest::from_request();
+                       # Note: server-to-server function!
+                       $server = omb_oauth_server();
+                       list($consumer, $token) = $server->verify_request($req);
+                       if ($this->save_notice($req, $consumer, $token)) {
+                               print "omb_version=".OMB_VERSION_01;
+                       }
+               } catch (OAuthException $e) {
+                       common_server_error($e->getMessage());
+                       return;
+               }
+       }
+
+       function save_notice(&$req, &$consumer, &$token) {
+               $version = $req->get_parameter('omb_version');
+               if ($version != OMB_VERSION_01) {
+                       common_user_error(_('Unsupported OMB version'), 400);
+                       return false;
+               }
+               # First, check to see
+               $listenee =  $req->get_parameter('omb_listenee');
+               $remote_profile = Remote_profile::staticGet('uri', $listenee);
+               if (!$remote_profile) {
+                       common_user_error(_('Profile unknown'), 403);
+                       return false;
+               }
+               $sub = Subscription::staticGet('token', $token->key);
+               if (!$sub) {
+                       common_user_error(_('No such subscription'), 403);
+                       return false;
+               }
+               $content = $req->get_parameter('omb_notice_content');
+               if (!$content || strlen($content) > 140) {
+                       common_user_error(_('Invalid notice content'), 400);
+                       return false;
+               }
+               $notice_uri = $req->get_parameter('omb_notice');
+               if (!Validate::uri($notice_uri) &&
+                       !common_valid_tag($notice_uri)) {
+                       common_user_error(_('Invalid notice uri'), 400);
+                       return false;
+               }
+               $notice_url = $req->get_parameter('omb_notice_url');
+               if ($notice_url && !common_valid_http_url($notice_url)) {
+                       common_user_error(_('Invalid notice url'), 400);
+                       return false;
+               }
+               $notice = Notice::staticGet('uri', $notice_uri);
+               if (!$notice) {
+                       $notice = Notice::saveNew($remote_profile->id, $content, 'omb', false, 0, $notice_uri);
+                       if (is_string($notice)) {
+                               common_server_serror($notice, 500);
+                               return false;
+                       }
+                       common_broadcast_notice($notice, true);
+               }
+               return true;
        }
 }