Browse Source

fix: migration error for new installs

NGPixel 4 years ago
parent
commit
60f2a2a8d9

+ 13 - 2
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('')

+ 14 - 0
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 => { }

+ 7 - 2
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()