diff --git a/server/db/migrations-sqlite/2.5.1.js b/server/db/migrations-sqlite/2.5.1.js index 8cf75a6c..ffd70e0c 100644 --- a/server/db/migrations-sqlite/2.5.1.js +++ b/server/db/migrations-sqlite/2.5.1.js @@ -1,9 +1,20 @@ exports.up = async knex => { - await knex('authentication').where('isEnabled', false).del() + // Check for users using disabled strategies + let protectedStrategies = [] + const disabledStrategies = await knex('authentication').where('isEnabled', false) + if (disabledStrategies) { + const incompatibleUsers = await knex('users').distinct('providerKey').whereIn('providerKey', disabledStrategies.map(s => s.key)) + if (incompatibleUsers && incompatibleUsers.length > 0) { + protectedStrategies = incompatibleUsers.map(u => u.providerKey) + } + } + + // Delete disabled strategies + await knex('authentication').whereNotIn('key', protectedStrategies).andWhere('isEnabled', false).del() + // Update table schema await knex.schema .alterTable('authentication', table => { - table.dropColumn('isEnabled') table.integer('order').unsigned().notNullable().defaultTo(0) table.string('strategyKey').notNullable().defaultTo('') table.string('displayName').notNullable().defaultTo('') diff --git a/server/db/migrations-sqlite/2.5.108.js b/server/db/migrations-sqlite/2.5.108.js new file mode 100644 index 00000000..34240fcc --- /dev/null +++ b/server/db/migrations-sqlite/2.5.108.js @@ -0,0 +1,14 @@ +const has = require('lodash/has') + +exports.up = async knex => { + // -> Fix 2.5.1 added isEnabled columns for beta users + const localStrategy = await knex('authentication').where('key', 'local') + if (!has(localStrategy, 'isEnabled')) { + await knex.schema + .alterTable('authentication', table => { + table.boolean('isEnabled').notNullable().defaultTo(true) + }) + } +} + +exports.down = knex => { } diff --git a/server/db/migrations/2.5.1.js b/server/db/migrations/2.5.1.js index 1e907974..ffd70e0c 100644 --- a/server/db/migrations/2.5.1.js +++ b/server/db/migrations/2.5.1.js @@ -1,8 +1,13 @@ exports.up = async knex => { // Check for users using disabled strategies + let protectedStrategies = [] const disabledStrategies = await knex('authentication').where('isEnabled', false) - const incompatibleUsers = await knex('users').distinct('providerKey').whereIn('providerKey', disabledStrategies.map(s => s.key)) - const protectedStrategies = (incompatibleUsers && incompatibleUsers.length > 0) ? incompatibleUsers.map(u => u.providerKey) : [] + if (disabledStrategies) { + const incompatibleUsers = await knex('users').distinct('providerKey').whereIn('providerKey', disabledStrategies.map(s => s.key)) + if (incompatibleUsers && incompatibleUsers.length > 0) { + protectedStrategies = incompatibleUsers.map(u => u.providerKey) + } + } // Delete disabled strategies await knex('authentication').whereNotIn('key', protectedStrategies).andWhere('isEnabled', false).del()