]> source.dussan.org Git - nextcloud-server.git/commitdiff
Replace the credentials table with one that can have empty user
authorJoas Schilling <coding@schilljs.com>
Tue, 10 Nov 2020 08:33:29 +0000 (09:33 +0100)
committerJoas Schilling <coding@schilljs.com>
Thu, 12 Nov 2020 11:57:52 +0000 (12:57 +0100)
Primary key columns on Oracle can not have empty strings

Signed-off-by: Joas Schilling <coding@schilljs.com>
core/Migrations/Version13000Date20170718121200.php
core/Migrations/Version20000Date20201109081915.php
core/Migrations/Version20000Date20201109081918.php [new file with mode: 0644]
core/Migrations/Version20000Date20201109081919.php [new file with mode: 0644]
lib/composer/composer/autoload_classmap.php
lib/composer/composer/autoload_static.php
lib/private/Security/CredentialsManager.php
version.php

index fcea6657b30eb088252039e38efd85020de304bd..ae4b34ec9fb59e89a011cfe608a033462319cb30 100644 (file)
@@ -810,22 +810,22 @@ class Version13000Date20170718121200 extends SimpleMigrationStep {
                        $table->addUniqueIndex(['user_id', 'object_type', 'object_id'], 'comments_marker_index');
                }
 
-               if (!$schema->hasTable('credentials')) {
-                       $table = $schema->createTable('credentials');
-                       $table->addColumn('user', 'string', [
-                               'notnull' => false,
-                               'length' => 64,
-                       ]);
-                       $table->addColumn('identifier', 'string', [
-                               'notnull' => true,
-                               'length' => 64,
-                       ]);
-                       $table->addColumn('credentials', 'text', [
-                               'notnull' => false,
-                       ]);
-                       $table->setPrimaryKey(['user', 'identifier']);
-                       $table->addIndex(['user'], 'credentials_user');
-               }
+//             if (!$schema->hasTable('credentials')) {
+//                     $table = $schema->createTable('credentials');
+//                     $table->addColumn('user', 'string', [
+//                             'notnull' => false,
+//                             'length' => 64,
+//                     ]);
+//                     $table->addColumn('identifier', 'string', [
+//                             'notnull' => true,
+//                             'length' => 64,
+//                     ]);
+//                     $table->addColumn('credentials', 'text', [
+//                             'notnull' => false,
+//                     ]);
+//                     $table->setPrimaryKey(['user', 'identifier']);
+//                     $table->addIndex(['user'], 'credentials_user');
+//             }
 
                if (!$schema->hasTable('admin_sections')) {
                        $table = $schema->createTable('admin_sections');
index 720f54d8e8b6ef0e47ade6f8a69cc446b834af7d..d19c9ca0bb2bb258738264eefadeafe34eaa8b0e 100644 (file)
@@ -43,7 +43,7 @@ class Version20000Date20201109081915 extends SimpleMigrationStep {
 
                $result = $this->ensureColumnIsNullable($schema, 'share', 'password_by_talk');
                $result = $this->ensureColumnIsNullable($schema, 'share', 'hide_download') || $result;
-               $result = $this->ensureColumnIsNullable($schema, 'credentials', 'user') || $result;
+//             $result = $this->ensureColumnIsNullable($schema, 'credentials', 'user') || $result;
                $result = $this->ensureColumnIsNullable($schema, 'authtoken', 'password_invalid') || $result;
                $result = $this->ensureColumnIsNullable($schema, 'collres_accesscache', 'access') || $result;
 
diff --git a/core/Migrations/Version20000Date20201109081918.php b/core/Migrations/Version20000Date20201109081918.php
new file mode 100644 (file)
index 0000000..8e685b2
--- /dev/null
@@ -0,0 +1,107 @@
+<?php
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2020 Joas Schilling <coding@schilljs.com>
+ *
+ * @author Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * 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/>.
+ *
+ */
+
+namespace OC\Core\Migrations;
+
+use Closure;
+use Doctrine\DBAL\Types\Type;
+use OCP\DB\ISchemaWrapper;
+use OCP\IDBConnection;
+use OCP\Migration\IOutput;
+use OCP\Migration\SimpleMigrationStep;
+
+class Version20000Date20201109081918 extends SimpleMigrationStep {
+
+       /** @var IDBConnection */
+       protected $connection;
+
+       public function __construct(IDBConnection $connection) {
+               $this->connection = $connection;
+       }
+
+       /**
+        * @param IOutput $output
+        * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
+        * @param array $options
+        * @return null|ISchemaWrapper
+        */
+       public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
+               /** @var ISchemaWrapper $schema */
+               $schema = $schemaClosure();
+
+               $table = $schema->createTable('storages_credentials');
+               $table->addColumn('id', Type::BIGINT, [
+                       'autoincrement' => true,
+                       'notnull' => true,
+                       'length' => 64,
+               ]);
+               $table->addColumn('user', Type::STRING, [
+                       'notnull' => false,
+                       'length' => 64,
+               ]);
+               $table->addColumn('identifier', Type::STRING, [
+                       'notnull' => true,
+                       'length' => 64,
+               ]);
+               $table->addColumn('credentials', Type::TEXT, [
+                       'notnull' => false,
+               ]);
+               $table->setPrimaryKey(['id']);
+               $table->addUniqueIndex(['user', 'identifier'], 'stocred_ui');
+               $table->addIndex(['user'], 'stocred_user');
+
+               return $schema;
+       }
+
+       /**
+        * {@inheritDoc}
+        *
+        * @since 13.0.0
+        */
+       public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options): void {
+               if (!$this->connection->tableExists('credentials')) {
+                       return;
+               }
+
+               $query = $this->connection->getQueryBuilder();
+               $query->select('*')
+                       ->from('credentials');
+
+               $insert = $this->connection->getQueryBuilder();
+               $insert->insert('storages_credentials')
+                       ->setValue('user', $insert->createNamedParameter('user'))
+                       ->setValue('identifier', $insert->createNamedParameter('identifier'))
+                       ->setValue('credentials', $insert->createNamedParameter('credentials'));
+
+               $result = $query->execute();
+               while ($row = $result->fetch()) {
+                       $insert->setParameter('user', (string) $row['user'])
+                               ->setParameter('identifier', (string) $row['identifier'])
+                               ->setParameter('credentials', (string) $row['credentials']);
+                       $insert->execute();
+               }
+               $result->closeCursor();
+       }
+}
diff --git a/core/Migrations/Version20000Date20201109081919.php b/core/Migrations/Version20000Date20201109081919.php
new file mode 100644 (file)
index 0000000..bfc7080
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2020 Joas Schilling <coding@schilljs.com>
+ *
+ * @author Joas Schilling <coding@schilljs.com>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * 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/>.
+ *
+ */
+
+namespace OC\Core\Migrations;
+
+use Closure;
+use OCP\DB\ISchemaWrapper;
+use OCP\Migration\IOutput;
+use OCP\Migration\SimpleMigrationStep;
+
+class Version20000Date20201109081919 extends SimpleMigrationStep {
+
+       /**
+        * @param IOutput $output
+        * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
+        * @param array $options
+        * @return null|ISchemaWrapper
+        */
+       public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
+               /** @var ISchemaWrapper $schema */
+               $schema = $schemaClosure();
+
+               if ($schema->hasTable('credentials')) {
+                       $schema->dropTable('credentials');
+                       return $schema;
+               }
+
+               return null;
+       }
+}
index 48f9f60999d6b5b546931f55992754d943c30d0d..c214e42c61ad524e81ed50895d6c59ddb28ddb13 100644 (file)
@@ -920,6 +920,8 @@ return array(
     'OC\\Core\\Migrations\\Version18000Date20191204114856' => $baseDir . '/core/Migrations/Version18000Date20191204114856.php',
     'OC\\Core\\Migrations\\Version19000Date20200211083441' => $baseDir . '/core/Migrations/Version19000Date20200211083441.php',
     'OC\\Core\\Migrations\\Version20000Date20201109081915' => $baseDir . '/core/Migrations/Version20000Date20201109081915.php',
+    'OC\\Core\\Migrations\\Version20000Date20201109081918' => $baseDir . '/core/Migrations/Version20000Date20201109081918.php',
+    'OC\\Core\\Migrations\\Version20000Date20201109081919' => $baseDir . '/core/Migrations/Version20000Date20201109081919.php',
     'OC\\Core\\Notification\\RemoveLinkSharesNotifier' => $baseDir . '/core/Notification/RemoveLinkSharesNotifier.php',
     'OC\\Core\\Service\\LoginFlowV2Service' => $baseDir . '/core/Service/LoginFlowV2Service.php',
     'OC\\DB\\Adapter' => $baseDir . '/lib/private/DB/Adapter.php',
index c6f23f18523b8103fe8ea3b3574e520f6e4a95b1..328c580e88f8bce4b81332ffd194dfbd525a1b76 100644 (file)
@@ -949,6 +949,8 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
         'OC\\Core\\Migrations\\Version18000Date20191204114856' => __DIR__ . '/../../..' . '/core/Migrations/Version18000Date20191204114856.php',
         'OC\\Core\\Migrations\\Version19000Date20200211083441' => __DIR__ . '/../../..' . '/core/Migrations/Version19000Date20200211083441.php',
         'OC\\Core\\Migrations\\Version20000Date20201109081915' => __DIR__ . '/../../..' . '/core/Migrations/Version20000Date20201109081915.php',
+        'OC\\Core\\Migrations\\Version20000Date20201109081918' => __DIR__ . '/../../..' . '/core/Migrations/Version20000Date20201109081918.php',
+        'OC\\Core\\Migrations\\Version20000Date20201109081919' => __DIR__ . '/../../..' . '/core/Migrations/Version20000Date20201109081919.php',
         'OC\\Core\\Notification\\RemoveLinkSharesNotifier' => __DIR__ . '/../../..' . '/core/Notification/RemoveLinkSharesNotifier.php',
         'OC\\Core\\Service\\LoginFlowV2Service' => __DIR__ . '/../../..' . '/core/Service/LoginFlowV2Service.php',
         'OC\\DB\\Adapter' => __DIR__ . '/../../..' . '/lib/private/DB/Adapter.php',
index 20af25ae10fab15b8226136d8f055e2751c19854..2a480ef71053b7e2f0376aa9bb42e208bcce0d51 100644 (file)
@@ -35,7 +35,7 @@ use OCP\Security\ICrypto;
  * @package OC\Security
  */
 class CredentialsManager implements ICredentialsManager {
-       public const DB_TABLE = 'credentials';
+       public const DB_TABLE = 'storages_credentials';
 
        /** @var ICrypto */
        protected $crypto;
index f971a54fa15facf02ef355591f65a55f95d72950..60bb166006f2fda9fb5b630197cc6f090945374e 100644 (file)
@@ -29,7 +29,7 @@
 // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel
 // when updating major/minor version number.
 
-$OC_Version = [20, 0, 1, 4];
+$OC_Version = [20, 0, 1, 5];
 
 // The human readable string
 $OC_VersionString = '20.0.1';