MFA
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
"use strict";
|
||||
|
||||
/** @type {import('sequelize-cli').Migration} */
|
||||
module.exports = {
|
||||
async up(queryInterface, Sequelize) {
|
||||
// Add recentTotpCodes field for TOTP replay protection
|
||||
await queryInterface.addColumn("Users", "recentTotpCodes", {
|
||||
type: Sequelize.TEXT,
|
||||
allowNull: true,
|
||||
comment: "JSON array of hashed recently used TOTP codes for replay protection",
|
||||
});
|
||||
|
||||
// Remove deprecated columns (if they exist)
|
||||
await queryInterface.removeColumn("Users", "twoFactorEnabledAt").catch(() => {});
|
||||
await queryInterface.removeColumn("Users", "recoveryCodesUsedCount").catch(() => {});
|
||||
},
|
||||
|
||||
async down(queryInterface, Sequelize) {
|
||||
await queryInterface.removeColumn("Users", "recentTotpCodes");
|
||||
|
||||
// Re-add deprecated columns for rollback
|
||||
await queryInterface.addColumn("Users", "twoFactorEnabledAt", {
|
||||
type: Sequelize.DATE,
|
||||
allowNull: true,
|
||||
});
|
||||
await queryInterface.addColumn("Users", "recoveryCodesUsedCount", {
|
||||
type: Sequelize.INTEGER,
|
||||
defaultValue: 0,
|
||||
allowNull: false,
|
||||
});
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user