]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
OStatus: record source profile & saving method in ostatus_source table; this allows...
authorBrion Vibber <brion@pobox.com>
Mon, 22 Feb 2010 03:51:11 +0000 (19:51 -0800)
committerBrion Vibber <brion@pobox.com>
Mon, 22 Feb 2010 03:52:53 +0000 (19:52 -0800)
plugins/OStatus/OStatusPlugin.php
plugins/OStatus/classes/Ostatus_profile.php
plugins/OStatus/classes/Ostatus_source.php [new file with mode: 0644]
plugins/OStatus/lib/salmonaction.php

index 641765daebae4e325cfdbf4d4a3b702de70b1c8a..5b9e3be2bccfd0f9583024a1d70b5dcfb05bd6e6 100644 (file)
@@ -305,6 +305,7 @@ class OStatusPlugin extends Plugin
     function onCheckSchema() {
         $schema = Schema::get();
         $schema->ensureTable('ostatus_profile', Ostatus_profile::schemaDef());
+        $schema->ensureTable('ostatus_source', Ostatus_source::schemaDef());
         $schema->ensureTable('feedsub', FeedSub::schemaDef());
         $schema->ensureTable('hubsub', HubSub::schemaDef());
         return true;
index 3bed1c2aa01212af27c29fe167f5458d1032819b..71885bcdce9618fc012b001e8efea7730950cfb7 100644 (file)
@@ -508,13 +508,15 @@ class Ostatus_profile extends Memcached_DataObject
             }
         }
 
-        // @fixme save detailed ostatus source info
         // @fixme ensure that groups get handled correctly
 
         $saved = Notice::saveNew($oprofile->localProfile()->id,
                                  $content,
                                  'ostatus',
                                  $params);
+
+        // Record which feed this came through...
+        Ostatus_source::saveNew($saved, $this, 'push');
     }
 
     /**
diff --git a/plugins/OStatus/classes/Ostatus_source.php b/plugins/OStatus/classes/Ostatus_source.php
new file mode 100644 (file)
index 0000000..e6ce7d4
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, 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
+ * 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/>.
+ */
+
+/**
+ * @package OStatusPlugin
+ * @maintainer Brion Vibber <brion@status.net>
+ */
+
+class Ostatus_source extends Memcached_DataObject
+{
+    public $__table = 'ostatus_source';
+
+    public $notice_id; // notice we're referring to
+    public $profile_uri; // uri of the ostatus_profile this came through -- may be a group feed
+    public $method; // push or salmon
+
+    public /*static*/ function staticGet($k, $v=null)
+    {
+        return parent::staticGet(__CLASS__, $k, $v);
+    }
+
+    /**
+     * return table definition for DB_DataObject
+     *
+     * DB_DataObject needs to know something about the table to manipulate
+     * instances. This method provides all the DB_DataObject needs to know.
+     *
+     * @return array array of column definitions
+     */
+
+    function table()
+    {
+        return array('notice_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+                     'profile_uri' => DB_DATAOBJECT_STR,
+                     'method' => DB_DATAOBJECT_STR);
+    }
+
+    static function schemaDef()
+    {
+        return array(new ColumnDef('notice_id', 'integer',
+                                   null, false, 'PRI'),
+                     new ColumnDef('profile_uri', 'varchar',
+                                   255, false),
+                     new ColumnDef('method', "ENUM('push','salmon')",
+                                   null, false));
+    }
+
+    /**
+     * return key definitions for DB_DataObject
+     *
+     * DB_DataObject needs to know about keys that the table has; this function
+     * defines them.
+     *
+     * @return array key definitions
+     */
+
+    function keys()
+    {
+        return array_keys($this->keyTypes());
+    }
+
+    /**
+     * return key definitions for Memcached_DataObject
+     *
+     * Our caching system uses the same key definitions, but uses a different
+     * method to get them.
+     *
+     * @return array key definitions
+     */
+
+    function keyTypes()
+    {
+        return array('notice_id' => 'K');
+    }
+
+    function sequenceKey()
+    {
+        return array(false, false, false);
+    }
+
+    /**
+     * Save a remote notice source record; this helps indicate how trusted we are.
+     * @param string $method
+     */
+    public static function saveNew(Notice $notice, Ostatus_profile $oprofile, $method)
+    {
+        $osource = new Ostatus_source();
+        $osource->notice_id = $notice->id;
+        $osource->profile_uri = $oprofile->uri;
+        $osource->method = $method;
+        if ($osource->insert()) {
+           return true;
+        } else {
+            common_log_db_error($osource, 'INSERT', __FILE__);
+            return false;
+        }
+    }
+}
index 11c411c7dbb9f26239576cdadd8bfb1ae42e3802..d93cc9aa4a162a05c0508d8f626888085f9b0181 100644 (file)
@@ -202,9 +202,14 @@ class SalmonAction extends Action
             $options['created'] = common_sql_time($this->act->time);
         }
 
-        return Notice::saveNew($oprofile->profile_id,
-                               $content,
-                               'ostatus+salmon',
-                               $options);
+        $saved = Notice::saveNew($oprofile->profile_id,
+                                 $content,
+                                 'ostatus+salmon',
+                                 $options);
+
+        // Record that this was saved through a validated Salmon source
+        // @fixme actually do the signature validation!
+        Ostatus_source::saveNew($saved, $oprofile, 'salmon');
+        return $saved;
     }
 }