lamassu-server/migrations/1618843631500-users.js

90 lines
4.6 KiB
JavaScript

var db = require('./db')
exports.up = function (next) {
var sql = [
`CREATE TYPE role AS ENUM('user', 'superuser')`,
`CREATE TABLE users (
id UUID PRIMARY KEY,
username TEXT NOT NULL UNIQUE,
password VARCHAR(100),
role role NOT NULL DEFAULT 'user',
enabled BOOLEAN DEFAULT true,
twofa_code VARCHAR(100),
temp_twofa_code VARCHAR(100),
created TIMESTAMPTZ NOT NULL DEFAULT now(),
last_accessed TIMESTAMPTZ NOT NULL DEFAULT now(),
last_accessed_from TEXT,
last_accessed_address INET )`,
`CREATE TABLE "user_sessions" (
"sid" VARCHAR NOT NULL COLLATE "default",
"sess" JSON NOT NULL,
"expire" TIMESTAMPTZ NOT NULL )
WITH (OIDS=FALSE)`,
`ALTER TABLE "user_sessions" ADD CONSTRAINT "session_pkey" PRIMARY KEY ("sid") NOT DEFERRABLE INITIALLY IMMEDIATE`,
`CREATE INDEX "IDX_session_expire" ON "user_sessions" ("expire")`,
`CREATE TYPE auth_token_type AS ENUM('reset_password', 'reset_twofa')`,
`CREATE TABLE auth_tokens (
token TEXT NOT NULL PRIMARY KEY,
type auth_token_type NOT NULL,
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
expire TIMESTAMPTZ NOT NULL DEFAULT now() + interval '30 minutes',
CONSTRAINT unique_userid_type UNIQUE (user_id, type)
)`,
`CREATE TABLE user_register_tokens (
token TEXT NOT NULL PRIMARY KEY,
username TEXT NOT NULL UNIQUE,
role role DEFAULT 'user',
expire TIMESTAMPTZ NOT NULL DEFAULT now() + interval '30 minutes'
)`,
// migrate values from customers which reference user_tokens for data persistence
`ALTER TABLE customers ADD COLUMN sms_override_by_old TEXT`,
`ALTER TABLE customers ADD COLUMN id_card_data_override_by_old TEXT`,
`ALTER TABLE customers ADD COLUMN id_card_photo_override_by_old TEXT`,
`ALTER TABLE customers ADD COLUMN front_camera_override_by_old TEXT`,
`ALTER TABLE customers ADD COLUMN sanctions_override_by_old TEXT`,
`ALTER TABLE customers ADD COLUMN authorized_override_by_old TEXT`,
`ALTER TABLE customers ADD COLUMN us_ssn_override_by_old TEXT`,
`UPDATE customers SET sms_override_by_old=ut.name FROM user_tokens ut
WHERE customers.sms_override_by=ut.token`,
`UPDATE customers SET id_card_data_override_by_old=ut.name FROM user_tokens ut
WHERE customers.id_card_data_override_by=ut.token`,
`UPDATE customers SET id_card_photo_override_by_old=ut.name FROM user_tokens ut
WHERE customers.id_card_photo_override_by=ut.token`,
`UPDATE customers SET front_camera_override_by_old=ut.name FROM user_tokens ut
WHERE customers.front_camera_override_by=ut.token`,
`UPDATE customers SET sanctions_override_by_old=ut.name FROM user_tokens ut
WHERE customers.sanctions_override_by=ut.token`,
`UPDATE customers SET authorized_override_by_old=ut.name FROM user_tokens ut
WHERE customers.authorized_override_by=ut.token`,
`UPDATE customers SET us_ssn_override_by_old=ut.name FROM user_tokens ut
WHERE customers.us_ssn_override_by=ut.token`,
`ALTER TABLE customers DROP COLUMN sms_override_by`,
`ALTER TABLE customers DROP COLUMN id_card_data_override_by`,
`ALTER TABLE customers DROP COLUMN id_card_photo_override_by`,
`ALTER TABLE customers DROP COLUMN front_camera_override_by`,
`ALTER TABLE customers DROP COLUMN sanctions_override_by`,
`ALTER TABLE customers DROP COLUMN authorized_override_by`,
`ALTER TABLE customers DROP COLUMN us_ssn_override_by`,
`ALTER TABLE customers ADD COLUMN sms_override_by UUID REFERENCES users(id)`,
`ALTER TABLE customers ADD COLUMN id_card_data_override_by UUID REFERENCES users(id)`,
`ALTER TABLE customers ADD COLUMN id_card_photo_override_by UUID REFERENCES users(id)`,
`ALTER TABLE customers ADD COLUMN front_camera_override_by UUID REFERENCES users(id)`,
`ALTER TABLE customers ADD COLUMN sanctions_override_by UUID REFERENCES users(id)`,
`ALTER TABLE customers ADD COLUMN authorized_override_by UUID REFERENCES users(id)`,
`ALTER TABLE customers ADD COLUMN us_ssn_override_by UUID REFERENCES users(id)`,
// migrate values from compliance_overrides which reference user_tokens for data persistence
`ALTER TABLE compliance_overrides ADD COLUMN override_by_old TEXT`,
`UPDATE compliance_overrides SET override_by_old=ut.name FROM user_tokens ut
WHERE compliance_overrides.override_by=ut.token`,
`ALTER TABLE compliance_overrides DROP COLUMN override_by`,
`ALTER TABLE compliance_overrides ADD COLUMN override_by UUID REFERENCES users(id)`,
`DROP TABLE IF EXISTS one_time_passes`,
`DROP TABLE IF EXISTS user_tokens`
]
db.multi(sql, next)
}
exports.down = function (next) {
next()
}