%PDF- %PDF-
| Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Migration/ |
| Current File : /www/varak.net/nextcloud.varak.net/apps_old/apps/passwords/lib/Migration/Version20220101.php |
<?php
/*
* @copyright 2022 Passwords App
*
* @author Marius David Wieschollek
* @license AGPL-3.0
*
* This file is part of the Passwords App
* created by Marius David Wieschollek.
*/
declare(strict_types=1);
namespace OCA\Passwords\Migration;
use Closure;
use Doctrine\DBAL\Schema\SchemaException;
use OCA\Passwords\Helper\Uuid\UuidHelper;
use OCP\DB\Exception;
use OCP\DB\ISchemaWrapper;
use OCP\IDBConnection;
use OCP\Migration\IOutput;
use OCP\Migration\SimpleMigrationStep;
/**
* Class Version20220101
*
* @package OCA\Passwords\Migration
*/
class Version20220101 extends SimpleMigrationStep {
/**
* @var IDBConnection
*/
protected IDBConnection $db;
/**
* @var UuidHelper
*/
protected UuidHelper $uuidHelper;
/**
* Version20220101 constructor.
*
* @param IDBConnection $db
* @param UuidHelper $uuidHelper
*/
public function __construct(IDBConnection $db, UuidHelper $uuidHelper) {
$this->db = $db;
$this->uuidHelper = $uuidHelper;
}
/**
* Human readable name of the migration step
*
* @return string
* @since 14.0.0
*/
public function name(): string {
return 'Create tables and move data';
}
/**
* Human readable description of the migration step
*
* @return string
* @since 14.0.0
*/
public function description(): string {
return 'Creates new tables matching NC 22 spec and moves entries from old tables';
}
/**
* @param IOutput $output
* @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
* @param array $options
*/
public function preSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void {
}
/**
* @param IOutput $output
* @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
* @param array $options
*
* @return null|ISchemaWrapper
* @throws SchemaException
* @throws Exception
*/
public function changeSchema(IOutput $output, Closure $schemaClosure, array $options): ?ISchemaWrapper {
/** @var ISchemaWrapper $schema */
$schema = $schemaClosure();
$this->createPasswordModelTable($schema, $output);
$this->createPasswordRevisionTable($schema, $output);
$this->createFolderModelTable($schema, $output);
$this->createFolderRevisionTable($schema, $output);
$this->createTagModelTable($schema, $output);
$this->createTagRevisionTable($schema, $output);
$this->createPasswordTagRelationTable($schema, $output);
$this->createShareTable($schema, $output);
$this->createSessionTable($schema, $output);
$this->createKeychainTable($schema, $output);
$this->createChallengeTable($schema, $output);
$this->createRegistrationTable($schema, $output);
return $schema;
}
/**
* @param IOutput $output
* @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
* @param array $options
*
* @throws Exception
*/
public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void {
/** @var ISchemaWrapper $schema */
$schema = $schemaClosure();
$tableMap = [
'passwords_entity_challenge' => 'passwords_challenge',
'passwords_entity_folder' => 'passwords_folder',
'passwords_entity_folder_revision' => 'passwords_folder_rv',
'passwords_entity_keychain' => 'passwords_keychain',
'passwords_entity_password' => 'passwords_password',
'passwords_entity_password_revision' => 'passwords_password_rv',
'passwords_entity_registration' => 'passwords_registration',
'passwords_entity_session' => 'passwords_session',
'passwords_entity_share' => 'passwords_share',
'passwords_entity_tag' => 'passwords_tag',
'passwords_entity_tag_revision' => 'passwords_tag_rv',
'passwords_relation_password_tag' => 'passwords_pw_tag_rel'
];
foreach($tableMap as $oldTable => $newTable) {
if($schema->hasTable($oldTable) && $schema->hasTable($newTable)) {
$select = $this->db->getQueryBuilder()->select('a.*')->from($oldTable, 'a');
$uuids = $this->getMigratedUuids($newTable);
if(!empty($uuids) && $this->tablesMigrated()) {
return;
}
$result = $select->executeQuery();
$total = $result->rowCount();
$items = $result->fetchAll();
$output->info("Migrating {$total} entries from {$oldTable} to {$newTable}");
$output->startProgress($total);
foreach($items as $item) {
$query = $this->db->getQueryBuilder()->insert($newTable);
if(empty($item['uuid'])) {
$item['uuid'] = $this->uuidHelper->generateUuid();
}
if(in_array($item['uuid'], $uuids)) {
$output->info("Skipping {$item['uuid']} because it exists in new table");
$output->advance($total);
continue;
}
foreach($item as $key => $value) {
if($key === 'id') continue;
$type = $schema->getTable($newTable)->getColumn($key)->getType();
$query->setValue($key, $query->createNamedParameter($value, $type));
}
$query->executeStatement();
$output->advance($total);
}
$output->finishProgress();
$output->info('Done');
}
}
}
/**
* @param string $newTable
*
* @return array
* @throws Exception
*/
protected function getMigratedUuids(string $newTable): array {
$select = $this->db->getQueryBuilder()->select('a.uuid')->from($newTable, 'a');
$result = $select->executeQuery();
$items = $result->fetchAll();
$uuids = [];
foreach($items as $item) {
$uuids[] = $item['uuid'];
}
return $uuids;
}
/**
* @return bool
* @throws Exception
*/
protected function tablesMigrated(): bool {
$qb = $this->db->getQueryBuilder();
$select = $qb->select('a.*')
->from('migrations', 'a')
->where($qb->expr()->eq('a.app', $qb->createNamedParameter('passwords')))
->where($qb->expr()->eq('a.version', $qb->createNamedParameter('20210800')));
$result = $select->executeQuery();
return $result->rowCount() > 0;
}
/**
* @param ISchemaWrapper $schema
* @param IOutput $output
*
* @throws SchemaException
*/
protected function createPasswordModelTable(ISchemaWrapper $schema, IOutput $output): void {
if(!$schema->hasTable('passwords_password')) {
$output->info('Creating table passwords_password');
$table = $schema->createTable('passwords_password');
} else {
$table = $schema->getTable('passwords_password');
}
if(!$table->hasColumn('id')) {
$output->info('Creating column id in table passwords_password');
$table->addColumn(
'id',
'bigint',
[
'autoincrement' => true,
'notnull' => true,
'length' => 8,
'unsigned' => true,
]
);
}
if(!$table->hasColumn('user_id')) {
$output->info('Creating column user_id in table passwords_password');
$table->addColumn(
'user_id',
'string',
[
'notnull' => true,
'length' => 64,
]
);
}
if(!$table->hasColumn('uuid')) {
$output->info('Creating column uuid in table passwords_password');
$table->addColumn(
'uuid',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('revision')) {
$output->info('Creating column revision in table passwords_password');
$table->addColumn(
'revision',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('share_id')) {
$output->info('Creating column share_id in table passwords_password');
$table->addColumn(
'share_id',
'string',
[
'notnull' => false,
'length' => 36,
]
);
}
if(!$table->hasColumn('has_shares')) {
$output->info('Creating column has_shares in table passwords_password');
$table->addColumn(
'has_shares',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('editable')) {
$output->info('Creating column editable in table passwords_password');
$table->addColumn(
'editable',
'boolean',
[
'notnull' => false,
'default' => true,
]
);
}
if(!$table->hasColumn('suspended')) {
$output->info('Creating column suspended in table passwords_password');
$table->addColumn(
'suspended',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('deleted')) {
$output->info('Creating column deleted in table passwords_password');
$table->addColumn(
'deleted',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('created')) {
$output->info('Creating column created in table passwords_password');
$table->addColumn(
'created',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('updated')) {
$output->info('Creating column updated in table passwords_password');
$table->addColumn(
'updated',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasPrimaryKey()) {
$output->info('Creating primary key id in table passwords_password');
$table->setPrimaryKey(['id']);
}
if($table->hasIndex('pw_password_index')) {
$output->info('Removing index pw_password_index from table passwords_password');
$table->dropIndex('pw_password_index');
}
if(!$table->hasIndex('pw_index_password')) {
$output->info('Creating index pw_index_password in table passwords_password');
$table->addUniqueIndex(['user_id', 'uuid'], 'pw_index_password');
}
if(!$table->hasIndex('pw_index_password_ac')) {
$output->info('Creating index pw_index_password_ac in table passwords_password');
$table->addUniqueIndex(['user_id', 'uuid', 'deleted'], 'pw_index_password_ac');
}
}
/**
* @param ISchemaWrapper $schema
* @param IOutput $output
*
* @throws SchemaException
*/
protected function createPasswordRevisionTable(ISchemaWrapper $schema, IOutput $output): void {
if(!$schema->hasTable('passwords_password_rv')) {
$output->info('Creating table passwords_password_rv');
$table = $schema->createTable('passwords_password_rv');
} else {
$table = $schema->getTable('passwords_password_rv');
}
if(!$table->hasColumn('id')) {
$output->info('Creating column id in table passwords_password_rv');
$table->addColumn(
'id',
'bigint',
[
'autoincrement' => true,
'notnull' => true,
'length' => 8,
'unsigned' => true,
]
);
}
if(!$table->hasColumn('user_id')) {
$output->info('Creating column user_id in table passwords_password_rv');
$table->addColumn(
'user_id',
'string',
[
'notnull' => true,
'length' => 64,
]
);
}
if(!$table->hasColumn('uuid')) {
$output->info('Creating column uuid in table passwords_password_rv');
$table->addColumn(
'uuid',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('model')) {
$output->info('Creating column model in table passwords_password_rv');
$table->addColumn(
'model',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('folder')) {
$output->info('Creating column folder in table passwords_password_rv');
$table->addColumn(
'folder',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('hidden')) {
$output->info('Creating column hidden in table passwords_password_rv');
$table->addColumn(
'hidden',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('trashed')) {
$output->info('Creating column trashed in table passwords_password_rv');
$table->addColumn(
'trashed',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('cse_type')) {
$output->info('Creating column cse_type in table passwords_password_rv');
$table->addColumn(
'cse_type',
'string',
[
'notnull' => true,
'length' => 10,
]
);
}
if(!$table->hasColumn('cse_key')) {
$output->info('Creating column cse_key in table passwords_password_rv');
$table->addColumn(
'cse_key',
'string',
[
'notnull' => true,
'length' => 36,
'default' => '',
]
);
}
if(!$table->hasColumn('sse_type')) {
$output->info('Creating column sse_type in table passwords_password_rv');
$table->addColumn(
'sse_type',
'string',
[
'notnull' => true,
'length' => 10,
]
);
}
if(!$table->hasColumn('sse_key')) {
$output->info('Creating column sse_key in table passwords_password_rv');
$table->addColumn(
'sse_key',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('username')) {
$output->info('Creating column username in table passwords_password_rv');
$table->addColumn(
'username',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('password')) {
$output->info('Creating column password in table passwords_password_rv');
$table->addColumn(
'password',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('label')) {
$output->info('Creating column label in table passwords_password_rv');
$table->addColumn(
'label',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('url')) {
$output->info('Creating column url in table passwords_password_rv');
$table->addColumn(
'url',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('notes')) {
$output->info('Creating column notes in table passwords_password_rv');
$table->addColumn(
'notes',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('custom_fields')) {
$output->info('Creating column custom_fields in table passwords_password_rv');
$table->addColumn(
'custom_fields',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('hash')) {
$output->info('Creating column hash in table passwords_password_rv');
$table->addColumn(
'hash',
'string',
[
'notnull' => true,
'length' => 64,
]
);
}
if(!$table->hasColumn('favorite')) {
$output->info('Creating column favorite in table passwords_password_rv');
$table->addColumn(
'favorite',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('status')) {
$output->info('Creating column status in table passwords_password_rv');
$table->addColumn(
'status',
'smallint',
[
'notnull' => true,
'length' => 1,
'default' => 0,
]
);
}
if(!$table->hasColumn('status_code')) {
$output->info('Creating column status_code in table passwords_password_rv');
$table->addColumn(
'status_code',
'string',
[
'notnull' => true,
'length' => 12,
'default' => 'GOOD',
]
);
}
if(!$table->hasColumn('deleted')) {
$output->info('Creating column deleted in table passwords_password_rv');
$table->addColumn(
'deleted',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('edited')) {
$output->info('Creating column edited in table passwords_password_rv');
$table->addColumn(
'edited',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('created')) {
$output->info('Creating column created in table passwords_password_rv');
$table->addColumn(
'created',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('updated')) {
$output->info('Creating column updated in table passwords_password_rv');
$table->addColumn(
'updated',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('client')) {
$output->info('Creating column client in table passwords_password_rv');
$table->addColumn(
'client',
'string',
[
'notnull' => true,
'length' => 256,
'default' => 'CLIENT::UNKNOWN',
]
);
}
if(!$table->hasPrimaryKey()) {
$output->info('Creating primary key id in table passwords_password_rv');
$table->setPrimaryKey(['id']);
}
if($table->hasIndex('pw_password_revision_index')) {
$output->info('Removing index pw_password_revision_index from table passwords_password_rv');
$table->dropIndex('pw_password_revision_index');
}
if($table->hasIndex('pw_index_password_revision')) {
$output->info('Removing index pw_index_password_revision from table passwords_password_rv');
$table->dropIndex('pw_index_password_revision');
}
if(!$table->hasIndex('pw_index_password_rv')) {
$output->info('Creating index pw_index_password_rv in table passwords_password_rv');
$table->addUniqueIndex(['user_id', 'uuid'], 'pw_index_password_rv');
}
if(!$table->hasIndex('pw_index_password_rv_ac')) {
$output->info('Creating index pw_index_password_rv_ac in table passwords_password_rv');
$table->addUniqueIndex(['user_id', 'uuid', 'deleted'], 'pw_index_password_rv_ac');
}
}
/**
* @param ISchemaWrapper $schema
* @param IOutput $output
*
* @throws SchemaException
*/
protected function createFolderModelTable(ISchemaWrapper $schema, IOutput $output): void {
if(!$schema->hasTable('passwords_folder')) {
$output->info('Creating table passwords_folder');
$table = $schema->createTable('passwords_folder');
} else {
$table = $schema->getTable('passwords_folder');
}
if(!$table->hasColumn('id')) {
$output->info('Creating column id in table passwords_folder');
$table->addColumn(
'id',
'bigint',
[
'autoincrement' => true,
'notnull' => true,
'length' => 8,
'unsigned' => true,
]
);
}
if(!$table->hasColumn('user_id')) {
$output->info('Creating column user_id in table passwords_folder');
$table->addColumn(
'user_id',
'string',
[
'notnull' => true,
'length' => 64,
]
);
}
if(!$table->hasColumn('uuid')) {
$output->info('Creating column uuid in table passwords_folder');
$table->addColumn(
'uuid',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('revision')) {
$output->info('Creating column revision in table passwords_folder');
$table->addColumn(
'revision',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('suspended')) {
$output->info('Creating column suspended in table passwords_folder');
$table->addColumn(
'suspended',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('deleted')) {
$output->info('Creating column deleted in table passwords_folder');
$table->addColumn(
'deleted',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('created')) {
$output->info('Creating column created in table passwords_folder');
$table->addColumn(
'created',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('updated')) {
$output->info('Creating column updated in table passwords_folder');
$table->addColumn(
'updated',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasPrimaryKey()) {
$output->info('Creating primary key id in table passwords_folder');
$table->setPrimaryKey(['id']);
}
if($table->hasIndex('pw_folder_index')) {
$output->info('Removing index pw_folder_index from table passwords_folder');
$table->dropIndex('pw_folder_index');
}
if(!$table->hasIndex('pw_index_folder')) {
$output->info('Creating index pw_index_folder in table passwords_folder');
$table->addUniqueIndex(['user_id', 'uuid'], 'pw_index_folder');
}
if(!$table->hasIndex('pw_index_folder_ac')) {
$output->info('Creating index pw_index_folder_ac in table passwords_folder');
$table->addUniqueIndex(['user_id', 'uuid', 'deleted'], 'pw_index_folder_ac');
}
}
/**
* @param ISchemaWrapper $schema
* @param IOutput $output
*
* @throws SchemaException
*/
protected function createFolderRevisionTable(ISchemaWrapper $schema, IOutput $output): void {
if(!$schema->hasTable('passwords_folder_rv')) {
$output->info('Creating table passwords_folder_rv');
$table = $schema->createTable('passwords_folder_rv');
} else {
$table = $schema->getTable('passwords_folder_rv');
}
if(!$table->hasColumn('id')) {
$output->info('Creating column id in table passwords_folder_rv');
$table->addColumn(
'id',
'bigint',
[
'autoincrement' => true,
'notnull' => true,
'length' => 8,
'unsigned' => true,
]
);
}
if(!$table->hasColumn('user_id')) {
$output->info('Creating column user_id in table passwords_folder_rv');
$table->addColumn(
'user_id',
'string',
[
'notnull' => true,
'length' => 64,
]
);
}
if(!$table->hasColumn('uuid')) {
$output->info('Creating column uuid in table passwords_folder_rv');
$table->addColumn(
'uuid',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('model')) {
$output->info('Creating column model in table passwords_folder_rv');
$table->addColumn(
'model',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('parent')) {
$output->info('Creating column parent in table passwords_folder_rv');
$table->addColumn(
'parent',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('label')) {
$output->info('Creating column label in table passwords_folder_rv');
$table->addColumn(
'label',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('cse_type')) {
$output->info('Creating column cse_type in table passwords_folder_rv');
$table->addColumn(
'cse_type',
'string',
[
'notnull' => true,
'length' => 10,
]
);
}
if(!$table->hasColumn('cse_key')) {
$output->info('Creating column cse_key in table passwords_folder_rv');
$table->addColumn(
'cse_key',
'string',
[
'notnull' => true,
'length' => 36,
'default' => '',
]
);
}
if(!$table->hasColumn('sse_type')) {
$output->info('Creating column sse_type in table passwords_folder_rv');
$table->addColumn(
'sse_type',
'string',
[
'notnull' => true,
'length' => 10,
]
);
}
if(!$table->hasColumn('sse_key')) {
$output->info('Creating column sse_key in table passwords_folder_rv');
$table->addColumn(
'sse_key',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('favorite')) {
$output->info('Creating column favorite in table passwords_folder_rv');
$table->addColumn(
'favorite',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('hidden')) {
$output->info('Creating column hidden in table passwords_folder_rv');
$table->addColumn(
'hidden',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('trashed')) {
$output->info('Creating column trashed in table passwords_folder_rv');
$table->addColumn(
'trashed',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('deleted')) {
$output->info('Creating column deleted in table passwords_folder_rv');
$table->addColumn(
'deleted',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('edited')) {
$output->info('Creating column edited in table passwords_folder_rv');
$table->addColumn(
'edited',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('created')) {
$output->info('Creating column created in table passwords_folder_rv');
$table->addColumn(
'created',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('updated')) {
$output->info('Creating column updated in table passwords_folder_rv');
$table->addColumn(
'updated',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('client')) {
$output->info('Creating column client in table passwords_folder_rv');
$table->addColumn(
'client',
'string',
[
'notnull' => true,
'length' => 256,
'default' => 'CLIENT::UNKNOWN',
]
);
}
if(!$table->hasPrimaryKey()) {
$output->info('Creating primary key id in table passwords_folder_rv');
$table->setPrimaryKey(['id']);
}
if($table->hasIndex('pw_folder_revision_index')) {
$output->info('Removing index pw_folder_revision_index from table passwords_folder_rv');
$table->dropIndex('pw_folder_revision_index');
}
if($table->hasIndex('pw_index_folder_revision')) {
$output->info('Removing index pw_index_folder_revision from table passwords_folder_rv');
$table->dropIndex('pw_index_folder_revision');
}
if(!$table->hasIndex('pw_index_folder_rv')) {
$output->info('Creating index pw_index_folder_rv in table passwords_folder_rv');
$table->addUniqueIndex(['user_id', 'uuid'], 'pw_index_folder_rv');
}
if(!$table->hasIndex('pw_index_folder_rv_ac')) {
$output->info('Creating index pw_index_folder_rv_ac in table passwords_folder_rv');
$table->addUniqueIndex(['user_id', 'uuid', 'deleted'], 'pw_index_folder_rv_ac');
}
}
/**
* @param ISchemaWrapper $schema
* @param IOutput $output
*
* @throws SchemaException
*/
protected function createTagModelTable(ISchemaWrapper $schema, IOutput $output): void {
if(!$schema->hasTable('passwords_tag')) {
$output->info('Creating table passwords_tag');
$table = $schema->createTable('passwords_tag');
} else {
$table = $schema->getTable('passwords_tag');
}
if(!$table->hasColumn('id')) {
$output->info('Creating column id in table passwords_tag');
$table->addColumn(
'id',
'bigint',
[
'autoincrement' => true,
'notnull' => true,
'length' => 8,
'unsigned' => true,
]
);
}
if(!$table->hasColumn('user_id')) {
$output->info('Creating column user_id in table passwords_tag');
$table->addColumn(
'user_id',
'string',
[
'notnull' => true,
'length' => 64,
]
);
}
if(!$table->hasColumn('uuid')) {
$output->info('Creating column uuid in table passwords_tag');
$table->addColumn(
'uuid',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('revision')) {
$output->info('Creating column revision in table passwords_tag');
$table->addColumn(
'revision',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('deleted')) {
$output->info('Creating column deleted in table passwords_tag');
$table->addColumn(
'deleted',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('created')) {
$output->info('Creating column created in table passwords_tag');
$table->addColumn(
'created',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('updated')) {
$output->info('Creating column updated in table passwords_tag');
$table->addColumn(
'updated',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasPrimaryKey()) {
$output->info('Creating primary key id in table passwords_tag');
$table->setPrimaryKey(['id']);
}
if($table->hasIndex('pw_tag_index')) {
$output->info('Removing index pw_tag_index from table passwords_tag');
$table->dropIndex('pw_tag_index');
}
if(!$table->hasIndex('pw_index_tag')) {
$output->info('Creating index pw_index_tag in table passwords_tag');
$table->addUniqueIndex(['user_id', 'uuid'], 'pw_index_tag');
}
if(!$table->hasIndex('pw_index_tag_ac')) {
$output->info('Creating index pw_index_tag_ac in table passwords_tag');
$table->addUniqueIndex(['user_id', 'uuid', 'deleted'], 'pw_index_tag_ac');
}
}
/**
* @param ISchemaWrapper $schema
* @param IOutput $output
*
* @throws SchemaException
*/
protected function createTagRevisionTable(ISchemaWrapper $schema, IOutput $output): void {
if(!$schema->hasTable('passwords_tag_rv')) {
$output->info('Creating table passwords_tag_rv');
$table = $schema->createTable('passwords_tag_rv');
} else {
$table = $schema->getTable('passwords_tag_rv');
}
if(!$table->hasColumn('id')) {
$output->info('Creating column id in table passwords_tag_rv');
$table->addColumn(
'id',
'bigint',
[
'autoincrement' => true,
'notnull' => true,
'length' => 8,
'unsigned' => true,
]
);
}
if(!$table->hasColumn('user_id')) {
$output->info('Creating column user_id in table passwords_tag_rv');
$table->addColumn(
'user_id',
'string',
[
'notnull' => true,
'length' => 64,
]
);
}
if(!$table->hasColumn('uuid')) {
$output->info('Creating column uuid in table passwords_tag_rv');
$table->addColumn(
'uuid',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('model')) {
$output->info('Creating column model in table passwords_tag_rv');
$table->addColumn(
'model',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('cse_type')) {
$output->info('Creating column cse_type in table passwords_tag_rv');
$table->addColumn(
'cse_type',
'string',
[
'notnull' => true,
'length' => 10,
]
);
}
if(!$table->hasColumn('cse_key')) {
$output->info('Creating column cse_key in table passwords_tag_rv');
$table->addColumn(
'cse_key',
'string',
[
'notnull' => true,
'length' => 36,
'default' => '',
]
);
}
if(!$table->hasColumn('sse_type')) {
$output->info('Creating column sse_type in table passwords_tag_rv');
$table->addColumn(
'sse_type',
'string',
[
'notnull' => true,
'length' => 10,
]
);
}
if(!$table->hasColumn('sse_key')) {
$output->info('Creating column sse_key in table passwords_tag_rv');
$table->addColumn(
'sse_key',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('label')) {
$output->info('Creating column label in table passwords_tag_rv');
$table->addColumn(
'label',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('color')) {
$output->info('Creating column color in table passwords_tag_rv');
$table->addColumn(
'color',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('favorite')) {
$output->info('Creating column favorite in table passwords_tag_rv');
$table->addColumn(
'favorite',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('hidden')) {
$output->info('Creating column hidden in table passwords_tag_rv');
$table->addColumn(
'hidden',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('trashed')) {
$output->info('Creating column trashed in table passwords_tag_rv');
$table->addColumn(
'trashed',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('deleted')) {
$output->info('Creating column deleted in table passwords_tag_rv');
$table->addColumn(
'deleted',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('edited')) {
$output->info('Creating column edited in table passwords_tag_rv');
$table->addColumn(
'edited',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('created')) {
$output->info('Creating column created in table passwords_tag_rv');
$table->addColumn(
'created',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('updated')) {
$output->info('Creating column updated in table passwords_tag_rv');
$table->addColumn(
'updated',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('client')) {
$output->info('Creating column client in table passwords_tag_rv');
$table->addColumn(
'client',
'string',
[
'notnull' => true,
'length' => 256,
'default' => 'CLIENT::UNKNOWN',
]
);
}
if(!$table->hasPrimaryKey()) {
$output->info('Creating primary key id in table passwords_tag_rv');
$table->setPrimaryKey(['id']);
}
if($table->hasIndex('pw_tag_revision_index')) {
$output->info('Removing index pw_tag_revision_index from table passwords_tag_rv');
$table->dropIndex('pw_tag_revision_index');
}
if($table->hasIndex('pw_index_tag_revision')) {
$output->info('Removing index pw_index_tag_revision from table passwords_tag_rv');
$table->dropIndex('pw_index_tag_revision');
}
if(!$table->hasIndex('pw_index_tag_rv')) {
$output->info('Creating index pw_index_tag_rv in table passwords_tag_rv');
$table->addUniqueIndex(['user_id', 'uuid'], 'pw_index_tag_rv');
}
if(!$table->hasIndex('pw_index_tag_rv_ac')) {
$output->info('Creating index pw_index_tag_rv_ac in table passwords_tag_rv');
$table->addUniqueIndex(['user_id', 'uuid', 'deleted'], 'pw_index_tag_rv_ac');
}
}
/**
* @param ISchemaWrapper $schema
* @param IOutput $output
*
* @throws SchemaException
*/
protected function createPasswordTagRelationTable(ISchemaWrapper $schema, IOutput $output): void {
if(!$schema->hasTable('passwords_pw_tag_rel')) {
$output->info('Creating table passwords_pw_tag_rel');
$table = $schema->createTable('passwords_pw_tag_rel');
} else {
$table = $schema->getTable('passwords_pw_tag_rel');
}
if(!$table->hasColumn('id')) {
$output->info('Creating column id in table passwords_pw_tag_rel');
$table->addColumn(
'id',
'bigint',
[
'autoincrement' => true,
'notnull' => true,
'length' => 8,
'unsigned' => true,
]
);
}
if(!$table->hasColumn('user_id')) {
$output->info('Creating column user_id in table passwords_pw_tag_rel');
$table->addColumn(
'user_id',
'string',
[
'notnull' => true,
'length' => 64,
]
);
}
if(!$table->hasColumn('uuid')) {
$output->info('Creating column uuid in table passwords_pw_tag_rel');
$table->addColumn(
'uuid',
'string',
[
'notnull' => true,
'length' => 36,
'default' => '',
]
);
}
if(!$table->hasColumn('password')) {
$output->info('Creating column password in table passwords_pw_tag_rel');
$table->addColumn(
'password',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('password_revision')) {
$output->info('Creating column password_revision in table passwords_pw_tag_rel');
$table->addColumn(
'password_revision',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('tag')) {
$output->info('Creating column tag in table passwords_pw_tag_rel');
$table->addColumn(
'tag',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('tag_revision')) {
$output->info('Creating column tag_revision in table passwords_pw_tag_rel');
$table->addColumn(
'tag_revision',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('hidden')) {
$output->info('Creating column hidden in table passwords_pw_tag_rel');
$table->addColumn(
'hidden',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('deleted')) {
$output->info('Creating column deleted in table passwords_pw_tag_rel');
$table->addColumn(
'deleted',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('created')) {
$output->info('Creating column created in table passwords_pw_tag_rel');
$table->addColumn(
'created',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('updated')) {
$output->info('Creating column updated in table passwords_pw_tag_rel');
$table->addColumn(
'updated',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('client')) {
$output->info('Creating column client in table passwords_pw_tag_rel');
$table->addColumn(
'client',
'string',
[
'notnull' => true,
'length' => 256,
'default' => 'CLIENT::UNKNOWN',
]
);
}
if(!$table->hasPrimaryKey()) {
$output->info('Creating primary key id in table passwords_pw_tag_rel');
$table->setPrimaryKey(['id']);
}
if($table->hasIndex('pw_password_tag_index')) {
$output->info('Removing index pw_password_tag_index from table passwords_pw_tag_rel');
$table->dropIndex('pw_password_tag_index');
}
if(!$table->hasIndex('pw_index_password_tag')) {
$output->info('Creating index pw_index_password_tag in table passwords_pw_tag_rel');
$table->addUniqueIndex(['user_id', 'uuid'], 'pw_index_password_tag');
}
if(!$table->hasIndex('pw_index_pw_tag_rel_ac')) {
$output->info('Creating index pw_index_pw_tag_rel_ac in table passwords_pw_tag_rel');
$table->addUniqueIndex(['user_id', 'uuid', 'deleted'], 'pw_index_pw_tag_rel_ac');
}
}
/**
* @param ISchemaWrapper $schema
* @param IOutput $output
*
* @throws SchemaException
* @throws Exception
*/
protected function createShareTable(ISchemaWrapper $schema, IOutput $output): void {
if(!$schema->hasTable('passwords_share')) {
$output->info('Creating table passwords_share');
$table = $schema->createTable('passwords_share');
} else {
$table = $schema->getTable('passwords_share');
if($table->hasColumn('pwid')) {
$qb = $this->db->getQueryBuilder();
$delete = $qb
->delete('passwords_share')
->where($qb->expr()->isNotNull('pwid'));
$delete->execute();
$output->info('Removing column pwid from table passwords_share');
$table->dropColumn('pwid');
}
if($table->hasColumn('sharedto')) {
$output->info('Removing column sharedto from table passwords_share');
$table->dropColumn('sharedto');
}
if($table->hasColumn('sharekey')) {
$output->info('Removing column sharekey from table passwords_share');
$table->dropColumn('sharekey');
}
}
if(!$table->hasColumn('id')) {
$output->info('Creating column id in table passwords_share');
$table->addColumn(
'id',
'bigint',
[
'autoincrement' => true,
'notnull' => true,
'length' => 8,
'unsigned' => true,
]
);
}
if(!$table->hasColumn('user_id')) {
$output->info('Creating column user_id in table passwords_share');
$table->addColumn(
'user_id',
'string',
[
'notnull' => true,
'length' => 64,
]
);
}
if(!$table->hasColumn('uuid')) {
$output->info('Creating column uuid in table passwords_share');
$table->addColumn(
'uuid',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('receiver')) {
$output->info('Creating column receiver in table passwords_share');
$table->addColumn(
'receiver',
'string',
[
'notnull' => true,
'length' => 64,
]
);
}
if(!$table->hasColumn('source_password')) {
$output->info('Creating column source_password in table passwords_share');
$table->addColumn(
'source_password',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('target_password')) {
$output->info('Creating column target_password in table passwords_share');
$table->addColumn(
'target_password',
'string',
[
'notnull' => false,
'length' => 36,
]
);
}
if(!$table->hasColumn('source_updated')) {
$output->info('Creating column source_updated in table passwords_share');
$table->addColumn(
'source_updated',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('target_updated')) {
$output->info('Creating column target_updated in table passwords_share');
$table->addColumn(
'target_updated',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('type')) {
$output->info('Creating column type in table passwords_share');
$table->addColumn(
'type',
'string',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('editable')) {
$output->info('Creating column editable in table passwords_share');
$table->addColumn(
'editable',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('shareable')) {
$output->info('Creating column shareable in table passwords_share');
$table->addColumn(
'shareable',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('expires')) {
$output->info('Creating column expires in table passwords_share');
$table->addColumn(
'expires',
'bigint',
[
'notnull' => false,
'length' => 12,
]
);
}
if(!$table->hasColumn('deleted')) {
$output->info('Creating column deleted in table passwords_share');
$table->addColumn(
'deleted',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('created')) {
$output->info('Creating column created in table passwords_share');
$table->addColumn(
'created',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('updated')) {
$output->info('Creating column updated in table passwords_share');
$table->addColumn(
'updated',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('client')) {
$output->info('Creating column client in table passwords_share');
$table->addColumn(
'client',
'string',
[
'notnull' => true,
'length' => 256,
'default' => 'CLIENT::UNKNOWN',
]
);
}
if(!$table->hasPrimaryKey()) {
$output->info('Creating primary key id in table passwords_share');
$table->setPrimaryKey(['id']);
}
if($table->hasIndex('pw_share_index')) {
$output->info('Removing index pw_share_index from table passwords_share');
$table->dropIndex('pw_share_index');
}
if(!$table->hasIndex('pw_index_share')) {
$output->info('Creating index pw_index_share in table passwords_share');
$table->addUniqueIndex(['user_id', 'uuid'], 'pw_index_share');
}
if(!$table->hasIndex('pw_index_share_ac')) {
$output->info('Creating index pw_index_share_ac in table passwords_share');
$table->addUniqueIndex(['user_id', 'uuid', 'deleted'], 'pw_index_share_ac');
}
}
/**
* @param ISchemaWrapper $schema
* @param IOutput $output
*
* @throws SchemaException
*/
protected function createSessionTable(ISchemaWrapper $schema, IOutput $output): void {
if(!$schema->hasTable('passwords_session')) {
$output->info('Creating table passwords_session');
$table = $schema->createTable('passwords_session');
} else {
$table = $schema->getTable('passwords_session');
}
if(!$table->hasColumn('id')) {
$output->info('Creating column id in table passwords_session');
$table->addColumn(
'id',
'bigint',
[
'autoincrement' => true,
'notnull' => true,
'length' => 8,
'unsigned' => true,
]
);
}
if(!$table->hasColumn('user_id')) {
$output->info('Creating column user_id in table passwords_session');
$table->addColumn(
'user_id',
'string',
[
'notnull' => true,
'length' => 64,
]
);
}
if(!$table->hasColumn('uuid')) {
$output->info('Creating column uuid in table passwords_session');
$table->addColumn(
'uuid',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('login_type')) {
$output->info('Creating column login_type in table passwords_session');
$table->addColumn(
'login_type',
'string',
[
'notnull' => true,
'length' => 12,
'default' => 'none',
]
);
}
if(!$table->hasColumn('created')) {
$output->info('Creating column created in table passwords_session');
$table->addColumn(
'created',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('updated')) {
$output->info('Creating column updated in table passwords_session');
$table->addColumn(
'updated',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('deleted')) {
$output->info('Creating column deleted in table passwords_session');
$table->addColumn(
'deleted',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('authorized')) {
$output->info('Creating column authorized in table passwords_session');
$table->addColumn(
'authorized',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasColumn('data')) {
$output->info('Creating column data in table passwords_session');
$table->addColumn(
'data',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('shadow_data')) {
$output->info('Creating column shadow_data in table passwords_session');
$table->addColumn(
'shadow_data',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('client')) {
$output->info('Creating column client in table passwords_session');
$table->addColumn(
'client',
'string',
[
'notnull' => true,
'length' => 256,
'default' => 'CLIENT::UNKNOWN',
]
);
}
if(!$table->hasPrimaryKey()) {
$output->info('Creating primary key id in table passwords_session');
$table->setPrimaryKey(['id']);
}
if($table->hasIndex('pw_session_index')) {
$output->info('Removing index pw_session_index from table passwords_session');
$table->dropIndex('pw_session_index');
}
if(!$table->hasIndex('pw_index_session')) {
$output->info('Creating index pw_index_session in table passwords_session');
$table->addUniqueIndex(['user_id', 'uuid'], 'pw_index_session');
}
if(!$table->hasIndex('pw_index_session_ac')) {
$output->info('Creating index pw_index_session_ac in table passwords_session');
$table->addUniqueIndex(['user_id', 'uuid', 'deleted'], 'pw_index_session_ac');
}
}
/**
* @param ISchemaWrapper $schema
* @param IOutput $output
*
* @throws SchemaException
*/
protected function createKeychainTable(ISchemaWrapper $schema, IOutput $output): void {
if(!$schema->hasTable('passwords_keychain')) {
$output->info('Creating table passwords_keychain');
$table = $schema->createTable('passwords_keychain');
} else {
$table = $schema->getTable('passwords_keychain');
}
if(!$table->hasColumn('id')) {
$output->info('Creating column id in table passwords_keychain');
$table->addColumn(
'id',
'bigint',
[
'autoincrement' => true,
'notnull' => true,
'length' => 8,
'unsigned' => true,
]
);
}
if(!$table->hasColumn('user_id')) {
$output->info('Creating column user_id in table passwords_keychain');
$table->addColumn(
'user_id',
'string',
[
'notnull' => true,
'length' => 64,
]
);
}
if(!$table->hasColumn('uuid')) {
$output->info('Creating column uuid in table passwords_keychain');
$table->addColumn(
'uuid',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('type')) {
$output->info('Creating column type in table passwords_keychain');
$table->addColumn(
'type',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('scope')) {
$output->info('Creating column scope in table passwords_keychain');
$table->addColumn(
'scope',
'string',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('data')) {
$output->info('Creating column data in table passwords_keychain');
$table->addColumn(
'data',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('created')) {
$output->info('Creating column created in table passwords_keychain');
$table->addColumn(
'created',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('updated')) {
$output->info('Creating column updated in table passwords_keychain');
$table->addColumn(
'updated',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('deleted')) {
$output->info('Creating column deleted in table passwords_keychain');
$table->addColumn(
'deleted',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasPrimaryKey()) {
$output->info('Creating primary key id in table passwords_keychain');
$table->setPrimaryKey(['id']);
}
if($table->hasIndex('pw_keychain_index')) {
$output->info('Removing index pw_keychain_index from table passwords_keychain');
$table->dropIndex('pw_keychain_index');
}
if(!$table->hasIndex('pw_index_keychain')) {
$output->info('Creating index pw_index_keychain in table passwords_keychain');
$table->addUniqueIndex(['user_id', 'uuid'], 'pw_index_keychain');
}
if(!$table->hasIndex('pw_index_keychain_ac')) {
$output->info('Creating index pw_index_keychain_ac in table passwords_keychain');
$table->addUniqueIndex(['user_id', 'uuid', 'deleted'], 'pw_index_keychain_ac');
}
}
/**
* @param ISchemaWrapper $schema
* @param IOutput $output
*
* @throws SchemaException
*/
protected function createChallengeTable(ISchemaWrapper $schema, IOutput $output): void {
if(!$schema->hasTable('passwords_challenge')) {
$output->info('Creating table passwords_challenge');
$table = $schema->createTable('passwords_challenge');
} else {
$table = $schema->getTable('passwords_challenge');
}
if(!$table->hasColumn('id')) {
$output->info('Creating column id in table passwords_challenge');
$table->addColumn(
'id',
'bigint',
[
'autoincrement' => true,
'notnull' => true,
'length' => 8,
'unsigned' => true,
]
);
}
if(!$table->hasColumn('user_id')) {
$output->info('Creating column user_id in table passwords_challenge');
$table->addColumn(
'user_id',
'string',
[
'notnull' => true,
'length' => 64,
]
);
}
if(!$table->hasColumn('uuid')) {
$output->info('Creating column uuid in table passwords_challenge');
$table->addColumn(
'uuid',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('type')) {
$output->info('Creating column type in table passwords_challenge');
$table->addColumn(
'type',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('secret')) {
$output->info('Creating column secret in table passwords_challenge');
$table->addColumn(
'secret',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('server_data')) {
$output->info('Creating column server_data in table passwords_challenge');
$table->addColumn(
'server_data',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('client_data')) {
$output->info('Creating column client_data in table passwords_challenge');
$table->addColumn(
'client_data',
'text',
[
'notnull' => false,
]
);
}
if(!$table->hasColumn('created')) {
$output->info('Creating column created in table passwords_challenge');
$table->addColumn(
'created',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('updated')) {
$output->info('Creating column updated in table passwords_challenge');
$table->addColumn(
'updated',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('deleted')) {
$output->info('Creating column deleted in table passwords_challenge');
$table->addColumn(
'deleted',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasPrimaryKey()) {
$output->info('Creating primary key id in table passwords_challenge');
$table->setPrimaryKey(['id']);
}
if($table->hasIndex('pw_challenge_index')) {
$output->info('Removing index pw_challenge_index from table passwords_challenge');
$table->dropIndex('pw_challenge_index');
}
if(!$table->hasIndex('pw_index_challenge')) {
$output->info('Creating index pw_index_challenge in table passwords_challenge');
$table->addUniqueIndex(['user_id', 'uuid'], 'pw_index_challenge');
}
if(!$table->hasIndex('pw_index_challenge_ac')) {
$output->info('Creating index pw_index_challenge_ac in table passwords_challenge');
$table->addUniqueIndex(['user_id', 'uuid', 'deleted'], 'pw_index_challenge_ac');
}
}
/**
* @param ISchemaWrapper $schema
* @param IOutput $output
*
* @throws SchemaException
*/
protected function createRegistrationTable(ISchemaWrapper $schema, IOutput $output): void {
if(!$schema->hasTable('passwords_registration')) {
$output->info('Creating table passwords_registration');
$table = $schema->createTable('passwords_registration');
} else {
$table = $schema->getTable('passwords_registration');
}
if(!$table->hasColumn('id')) {
$output->info('Creating column id in table passwords_registration');
$table->addColumn(
'id',
'bigint',
[
'autoincrement' => true,
'notnull' => true,
'length' => 8,
'unsigned' => true,
]
);
}
if(!$table->hasColumn('user_id')) {
$output->info('Creating column user_id in table passwords_registration');
$table->addColumn(
'user_id',
'string',
[
'notnull' => true,
'length' => 64,
]
);
}
if(!$table->hasColumn('uuid')) {
$output->info('Creating column uuid in table passwords_registration');
$table->addColumn(
'uuid',
'string',
[
'notnull' => true,
'length' => 36,
]
);
}
if(!$table->hasColumn('label')) {
$output->info('Creating column label in table passwords_registration');
$table->addColumn(
'label',
'string',
[
'notnull' => false,
'length' => 256,
]
);
}
if(!$table->hasColumn('code')) {
$output->info('Creating column code in table passwords_registration');
$table->addColumn(
'code',
'string',
[
'notnull' => false,
'length' => 128,
]
);
}
if(!$table->hasColumn('login')) {
$output->info('Creating column login in table passwords_registration');
$table->addColumn(
'login',
'string',
[
'notnull' => false,
'length' => 128,
]
);
}
if(!$table->hasColumn('token')) {
$output->info('Creating column token in table passwords_registration');
$table->addColumn(
'token',
'string',
[
'notnull' => false,
'length' => 128,
]
);
}
if(!$table->hasColumn('limit')) {
$output->info('Creating column limit in table passwords_registration');
$table->addColumn(
'limit',
'bigint',
[
'notnull' => false,
'length' => 12,
]
);
}
if(!$table->hasColumn('status')) {
$output->info('Creating column status in table passwords_registration');
$table->addColumn(
'status',
'bigint',
[
'notnull' => true,
'length' => 12,
'default' => 0,
]
);
}
if(!$table->hasColumn('created')) {
$output->info('Creating column created in table passwords_registration');
$table->addColumn(
'created',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('updated')) {
$output->info('Creating column updated in table passwords_registration');
$table->addColumn(
'updated',
'bigint',
[
'notnull' => true,
'length' => 12,
]
);
}
if(!$table->hasColumn('deleted')) {
$output->info('Creating column deleted in table passwords_registration');
$table->addColumn(
'deleted',
'boolean',
[
'notnull' => false,
'default' => false,
]
);
}
if(!$table->hasPrimaryKey()) {
$output->info('Creating primary key id in table passwords_registration');
$table->setPrimaryKey(['id']);
}
if($table->hasIndex('pw_registration_index')) {
$output->info('Removing index pw_registration_index from table passwords_registration');
$table->dropIndex('pw_registration_index');
}
if(!$table->hasIndex('pw_index_registration')) {
$output->info('Creating index pw_index_registration in table passwords_registration');
$table->addUniqueIndex(['user_id', 'uuid'], 'pw_index_registration');
}
if(!$table->hasIndex('pw_index_registration_ac')) {
$output->info('Creating index pw_index_registration_ac in table passwords_registration');
$table->addUniqueIndex(['user_id', 'uuid', 'deleted'], 'pw_index_registration_ac');
}
}
}