97 lines
4.3 KiB
JavaScript
97 lines
4.3 KiB
JavaScript
var db = require('./db')
|
|
const constants = require('../lib/constants')
|
|
|
|
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 '${constants.AUTH_TOKEN_EXPIRATION_TIME}',
|
|
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 '${constants.REGISTRATION_TOKEN_EXPIRATION_TIME}'
|
|
)`,
|
|
// migrate values from customers which reference user_tokens for data persistence
|
|
`CREATE TABLE customer_compliance_persistence (
|
|
customer_id UUID NOT NULL PRIMARY KEY REFERENCES customers(id),
|
|
sms_override_by_old TEXT,
|
|
id_card_data_override_by_old TEXT,
|
|
id_card_photo_override_by_old TEXT,
|
|
front_camera_override_by_old TEXT,
|
|
sanctions_override_by_old TEXT,
|
|
authorized_override_by_old TEXT,
|
|
us_ssn_override_by_old TEXT
|
|
)`,
|
|
`INSERT INTO customer_compliance_persistence (
|
|
customer_id,
|
|
sms_override_by_old,
|
|
id_card_data_override_by_old,
|
|
id_card_photo_override_by_old,
|
|
front_camera_override_by_old,
|
|
sanctions_override_by_old,
|
|
authorized_override_by_old,
|
|
us_ssn_override_by_old
|
|
) SELECT id, sms_override_by, id_card_data_override_by, id_card_photo_override_by,
|
|
front_camera_override_by, sanctions_override_by, authorized_override_by, us_ssn_override_by
|
|
FROM customers`,
|
|
`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
|
|
`CREATE TABLE compliance_overrides_persistence (
|
|
override_id UUID NOT NULL PRIMARY KEY REFERENCES compliance_overrides(id),
|
|
override_by_old TEXT
|
|
)`,
|
|
`INSERT INTO compliance_overrides_persistence (
|
|
override_id,
|
|
override_by_old
|
|
) SELECT id, override_by FROM compliance_overrides`,
|
|
`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()
|
|
}
|