]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/OStatus/classes/Magicsig.php
Garbage collection script didn't loop through anything
[quix0rs-gnu-social.git] / plugins / OStatus / classes / Magicsig.php
index 31d061e6a0148ab90522db25ce3c5f7857440e73..79fcd8faabafba6826768bf45e4f9398d4caae32 100644 (file)
@@ -33,7 +33,7 @@ if (!defined('STATUSNET')) {
 
 require_once 'Crypt/RSA.php';
 
-class Magicsig extends Memcached_DataObject
+class Magicsig extends Managed_DataObject
 {
     const PUBLICKEYREL = 'magic-public-key';
 
@@ -88,16 +88,18 @@ class Magicsig extends Memcached_DataObject
      * @param mixed $v
      * @return Magicsig
      */
-    public /*static*/ function staticGet($k, $v=null)
+    static function getKV($k, $v=null)
     {
-        $obj =  parent::staticGet(__CLASS__, $k, $v);
-        if (!empty($obj)) {
+        $obj =  parent::getKV($k, $v);
+        if ($obj instanceof Magicsig) {
+            // Please note we're replacing the $obj
+            // FIXME: There should be an import-key that modifies the fetched $obj
             $obj = Magicsig::fromString($obj->keypair);
 
-            // Double check keys: Crypt_RSA did not
-            // consistently generate good keypairs.
-            // We've also moved to 1024 bit keys.
-            if (strlen($obj->publicKey->modulus->toBits()) != 1024) {
+            // Never allow less than 1024 bit keys.
+            // The only case these show up in would be imported or
+            // legacy very-old-StatusNet generated keypairs.
+            if (strlen($obj->publicKey->modulus->toBits()) < 1024) {
                 $obj->delete();
                 return false;
             }
@@ -106,40 +108,21 @@ class Magicsig extends Memcached_DataObject
         return $obj;
     }
 
-
-    function table()
+    public static function schemaDef()
     {
         return array(
-            'user_id' => DB_DATAOBJECT_INT,
-            'keypair' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
-            'alg'     => DB_DATAOBJECT_STR
+            'fields' => array(
+                'user_id' => array('type' => 'int', 'not null' => true, 'description' => 'user id'),
+                'keypair' => array('type' => 'text', 'description' => 'keypair text representation'),
+                'alg' => array('type' => 'varchar', 'length' => 64, 'description' => 'algorithm'),
+            ),
+            'primary key' => array('user_id'),
+            'foreign keys' => array(
+                'magicsig_user_id_fkey' => array('user', array('user_id' => 'id')),
+            ),
         );
     }
 
-    static function schemaDef()
-    {
-        return array(new ColumnDef('user_id', 'integer',
-                                   null, false, 'PRI'),
-                     new ColumnDef('keypair', 'text',
-                                   false, false),
-                     new ColumnDef('alg', 'varchar',
-                                   64, false));
-    }
-
-    function keys()
-    {
-        return array_keys($this->keyTypes());
-    }
-
-    function keyTypes()
-    {
-        return array('user_id' => 'K');
-    }
-
-    function sequenceKey() {
-        return array(false, false, false);
-    }
-
     /**
      * Save this keypair into the database.
      *
@@ -163,11 +146,11 @@ class Magicsig extends Memcached_DataObject
      *
      * @param int $user_id id of local user we're creating a key for
      */
-    public function generate($user_id)
+    public function generate($user_id, $bits=1024)
     {
         $rsa = new Crypt_RSA();
 
-        $keypair = $rsa->createKey();
+        $keypair = $rsa->createKey($bits);
 
         $rsa->loadKey($keypair['privatekey']);
 
@@ -215,6 +198,7 @@ class Magicsig extends Memcached_DataObject
 
         // parse components
         if (!preg_match('/RSA\.([^\.]+)\.([^\.]+)(.([^\.]+))?/', $text, $matches)) {
+            common_debug('Magicsig error: RSA key not found in provided string.');
             return false;
         }