Release candidate of basic user management - currently only CRUD on users, no permission assignment.
This commit is contained in:
parent
e7856bfb73
commit
eb2287f6e9
10 changed files with 776 additions and 750 deletions
|
@ -1,75 +1,75 @@
|
|||
exports.up = function(knex, Promise) {
|
||||
/* This is shows what it would look like when we specify the "users" table with Knex.
|
||||
In some sense, this is probably the most complicated table we have in Mailtrain.
|
||||
|
||||
return knex.schema.hasTable('users'))
|
||||
.then(exists => {
|
||||
if (!exists) {
|
||||
return knex.schema.createTable('users', table => {
|
||||
table.increments('id').primary();
|
||||
table.string('username').notNullable().defaultTo('');
|
||||
table.string('password').notNullable().defaultTo('');
|
||||
table.string('email').notNullable();
|
||||
table.string('access_token', 40).index();
|
||||
table.string('reset_token').index();
|
||||
table.dateTime('reset_expire');
|
||||
table.timestamp('created').defaultTo(knex.fn.now());
|
||||
})
|
||||
|
||||
// INNODB tables have the limit of 767 bytes for an index.
|
||||
// Combined with the charset used, this poses limits on the size of keys. Knex does not offer API
|
||||
// for such settings, thus we resort to raw queries.
|
||||
.raw('ALTER TABLE `users` MODIFY `email` VARCHAR(255) CHARACTER SET utf8 NOT NULL')
|
||||
.raw('ALTER TABLE `users` ADD UNIQUE KEY `email` (`email`)')
|
||||
.raw('ALTER TABLE `users` ADD KEY `username` (`username`(191))')
|
||||
.raw('ALTER TABLE `users` ADD KEY `check_reset` (`username`(191),`reset_token`,`reset_expire`)')
|
||||
|
||||
.then(() => knex('users').insert({
|
||||
id: 1,
|
||||
username: 'admin',
|
||||
password: '$2a$10$FZV.tFT252o4iiHoZ9b2sOZOc.EBDOcY2.9HNCtNwshtSLf21mB1i',
|
||||
email: 'hostmaster@sathyasai.org'
|
||||
}));
|
||||
}
|
||||
});
|
||||
*/
|
||||
|
||||
// We should check here if the tables already exist and upgrade them to db_schema_version 28, which is the baseline.
|
||||
// For now, we just check whether our DB is up-to-date based on the existing SQL migration infrastructure in Mailtrain.
|
||||
return knex('settings').where({key: 'db_schema_version'}).first('value')
|
||||
.then(row => {
|
||||
if (!row || Number(row.value) !== 29) {
|
||||
throw new Error('Unsupported DB schema version: ' + row.value);
|
||||
}
|
||||
})
|
||||
|
||||
// We have to update data types of primary keys and related foreign keys. Mailtrain uses unsigned int(11), while
|
||||
// Knex uses unsigned int (which is unsigned int(10) ).
|
||||
.then(() => knex.schema
|
||||
.raw('ALTER TABLE `users` MODIFY `id` int unsigned not null auto_increment')
|
||||
.raw('ALTER TABLE `lists` MODIFY `id` int unsigned not null auto_increment')
|
||||
.raw('ALTER TABLE `confirmations` MODIFY `list` int unsigned not null')
|
||||
.raw('ALTER TABLE `custom_fields` MODIFY `list` int unsigned not null')
|
||||
.raw('ALTER TABLE `importer` MODIFY `list` int unsigned not null')
|
||||
.raw('ALTER TABLE `segments` MODIFY `list` int unsigned not null')
|
||||
.raw('ALTER TABLE `triggers` MODIFY `list` int unsigned not null')
|
||||
.raw('ALTER TABLE `custom_forms` MODIFY `list` int unsigned not null')
|
||||
)
|
||||
|
||||
/*
|
||||
Remaining foreign keys:
|
||||
-----------------------
|
||||
|
||||
links campaign campaigns id
|
||||
segment_rules segment segments id
|
||||
import_failed import importer id
|
||||
rss parent campaigns id
|
||||
attachments campaign campaigns id
|
||||
custom_forms_data form custom_forms id
|
||||
report_template report_template report_templates id
|
||||
*/
|
||||
};
|
||||
|
||||
exports.down = function(knex, Promise) {
|
||||
// return knex.schema.dropTable('users');
|
||||
exports.up = function(knex, Promise) {
|
||||
/* This is shows what it would look like when we specify the "users" table with Knex.
|
||||
In some sense, this is probably the most complicated table we have in Mailtrain.
|
||||
|
||||
return knex.schema.hasTable('users'))
|
||||
.then(exists => {
|
||||
if (!exists) {
|
||||
return knex.schema.createTable('users', table => {
|
||||
table.increments('id').primary();
|
||||
table.string('username').notNullable();
|
||||
table.string('password').notNullable();
|
||||
table.string('email').notNullable();
|
||||
table.string('access_token', 40).index();
|
||||
table.string('reset_token').index();
|
||||
table.dateTime('reset_expire');
|
||||
table.timestamp('created').defaultTo(knex.fn.now());
|
||||
})
|
||||
|
||||
// INNODB tables have the limit of 767 bytes for an index.
|
||||
// Combined with the charset used, this poses limits on the size of keys. Knex does not offer API
|
||||
// for such settings, thus we resort to raw queries.
|
||||
.raw('ALTER TABLE `users` MODIFY `email` VARCHAR(255) CHARACTER SET utf8 NOT NULL')
|
||||
.raw('ALTER TABLE `users` ADD UNIQUE KEY `email` (`email`)')
|
||||
.raw('ALTER TABLE `users` ADD KEY `username` (`username`(191))')
|
||||
.raw('ALTER TABLE `users` ADD KEY `check_reset` (`username`(191),`reset_token`,`reset_expire`)')
|
||||
|
||||
.then(() => knex('users').insert({
|
||||
id: 1,
|
||||
username: 'admin',
|
||||
password: '$2a$10$FZV.tFT252o4iiHoZ9b2sOZOc.EBDOcY2.9HNCtNwshtSLf21mB1i',
|
||||
email: 'hostmaster@sathyasai.org'
|
||||
}));
|
||||
}
|
||||
});
|
||||
*/
|
||||
|
||||
// We should check here if the tables already exist and upgrade them to db_schema_version 28, which is the baseline.
|
||||
// For now, we just check whether our DB is up-to-date based on the existing SQL migration infrastructure in Mailtrain.
|
||||
return knex('settings').where({key: 'db_schema_version'}).first('value')
|
||||
.then(row => {
|
||||
if (!row || Number(row.value) !== 29) {
|
||||
throw new Error('Unsupported DB schema version: ' + row.value);
|
||||
}
|
||||
})
|
||||
|
||||
// We have to update data types of primary keys and related foreign keys. Mailtrain uses unsigned int(11), while
|
||||
// Knex uses unsigned int (which is unsigned int(10) ).
|
||||
.then(() => knex.schema
|
||||
.raw('ALTER TABLE `users` MODIFY `id` int unsigned not null auto_increment')
|
||||
.raw('ALTER TABLE `lists` MODIFY `id` int unsigned not null auto_increment')
|
||||
.raw('ALTER TABLE `confirmations` MODIFY `list` int unsigned not null')
|
||||
.raw('ALTER TABLE `custom_fields` MODIFY `list` int unsigned not null')
|
||||
.raw('ALTER TABLE `importer` MODIFY `list` int unsigned not null')
|
||||
.raw('ALTER TABLE `segments` MODIFY `list` int unsigned not null')
|
||||
.raw('ALTER TABLE `triggers` MODIFY `list` int unsigned not null')
|
||||
.raw('ALTER TABLE `custom_forms` MODIFY `list` int unsigned not null')
|
||||
)
|
||||
|
||||
/*
|
||||
Remaining foreign keys:
|
||||
-----------------------
|
||||
|
||||
links campaign campaigns id
|
||||
segment_rules segment segments id
|
||||
import_failed import importer id
|
||||
rss parent campaigns id
|
||||
attachments campaign campaigns id
|
||||
custom_forms_data form custom_forms id
|
||||
report_template report_template report_templates id
|
||||
*/
|
||||
};
|
||||
|
||||
exports.down = function(knex, Promise) {
|
||||
// return knex.schema.dropTable('users');
|
||||
};
|
|
@ -1,7 +1,10 @@
|
|||
exports.up = function(knex, Promise) {
|
||||
return knex.schema.table('users', table => {
|
||||
table.string('name');
|
||||
table.string('name').notNullable().default('');
|
||||
})
|
||||
.then(() => knex('users').where('id', 1).update({
|
||||
name: 'Administrator'
|
||||
}));
|
||||
};
|
||||
|
||||
exports.down = function(knex, Promise) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue