]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - actions/postnotice.php
Fix help text for getvaliddaemons.php
[quix0rs-gnu-social.git] / actions / postnotice.php
index d83ceb971a61bd276f8beea68b86a8a4d708a5c7..eb2d63b61cf08119ba2911b130a6aaf50ee508fd 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /*
  * Laconica - a distributed open-source microblogging tool
- * Copyright (C) 2008, Controlez-Vous, Inc.
+ * Copyright (C) 2008, 2009, Control Yourself, 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
@@ -21,76 +21,71 @@ if (!defined('LACONICA')) { exit(1); }
 
 require_once(INSTALLDIR.'/lib/omb.php');
 
-class PostnoticeAction extends Action {
-       function handle($args) {
-               parent::handle($args);
-               try {
-                       $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(_t('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(_t('Profile unknown'), 403);
-                       return false;
-               }
-               $sub = Subscription::staticGet('token', $token->key);
-               if (!$sub) {
-                       common_user_error(_t('No such subscription'), 403);
-                       return false;
-               }
-               $content = $req->get_parameter('omb_notice_content');
-               if (!$content || strlen($content) > 140) {
-                       common_user_error(_t('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(_t('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(_t('Invalid notice url'), 400);
-                       return false;
-               }
-               $notice = Notice::staticGet('uri', $notice_uri);
-               if (!$notice) {
-                       $notice = new Notice();
-                       $notice->profile_id = $remote_profile->id;
-                       $notice->uri = $notice_uri;
-                       $notice->content = $content;
-                       $notice->rendered = common_render_content($notice->content, $notice);
-                       if ($notice_url) {
-                               $notice->url = $notice_url;
-                       }
-                       $notice->created = DB_DataObject_Cast::dateTime(); # current time
-                       $id = $notice->insert();
-                       if (!$id) {
-                               common_server_error(_t('Error inserting notice'), 500);
-                               return false;
-                       }
-                       common_save_replies($notice);   
-                       common_broadcast_notice($notice, true);
-               }
-               return true;
-       }
+class PostnoticeAction extends Action
+{
+    function handle($args)
+    {
+        parent::handle($args);
+        try {
+            common_remove_magic_from_request();
+            $req = OAuthRequest::from_request('POST', common_local_url('postnotice'));
+            # 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) {
+            $this->serverError($e->getMessage());
+            return;
+        }
+    }
+
+    function save_notice(&$req, &$consumer, &$token)
+    {
+        $version = $req->get_parameter('omb_version');
+        if ($version != OMB_VERSION_01) {
+            $this->clientError(_('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) {
+            $this->clientError(_('Profile unknown'), 403);
+            return false;
+        }
+        $sub = Subscription::staticGet('token', $token->key);
+        if (!$sub) {
+            $this->clientError(_('No such subscription'), 403);
+            return false;
+        }
+        $content = $req->get_parameter('omb_notice_content');
+        $content_shortened = common_shorten_links($content);
+        if (mb_strlen($content_shortened) > 140) {
+            $this->clientError(_('Invalid notice content'), 400);
+            return false;
+        }
+        $notice_uri = $req->get_parameter('omb_notice');
+        if (!Validate::uri($notice_uri) &&
+            !common_valid_tag($notice_uri)) {
+            $this->clientError(_('Invalid notice uri'), 400);
+            return false;
+        }
+        $notice_url = $req->get_parameter('omb_notice_url');
+        if ($notice_url && !common_valid_http_url($notice_url)) {
+            $this->clientError(_('Invalid notice url'), 400);
+            return false;
+        }
+        $notice = Notice::staticGet('uri', $notice_uri);
+        if (!$notice) {
+            $notice = Notice::saveNew($remote_profile->id, $content, 'omb', false, null, $notice_uri);
+            if (is_string($notice)) {
+                common_server_serror($notice, 500);
+                return false;
+            }
+            common_broadcast_notice($notice, true);
+        }
+        return true;
+    }
 }