Export individual user to auth0

This commit is contained in:
Emi Matchu 2021-03-10 05:18:31 -08:00
parent 9f61250f05
commit 2f36f8a0e8

View file

@ -1,8 +1,8 @@
// This exports users from the MySQL database to Auth0. // This exports users from the MySQL database to Auth0.
// //
// If you use the --since flag, we'll only include users whose OpenNeo ID // If you use the --since flag, we'll only include users whose OpenNeo ID
// records were updated (or created) since then. Otherwise, we'll include all // records were updated (or created) since then. Or, the --username flag will
// users. // filter for a single specific username. Otherwise, we'll include all users.
// //
// This sorta creates a second copy of everyone's account, copied onto Auth0. // This sorta creates a second copy of everyone's account, copied onto Auth0.
// We should be thoughtful about how we do the actual migration process! // We should be thoughtful about how we do the actual migration process!
@ -44,15 +44,25 @@ async function main() {
}, },
]); ]);
let conditionSQL = "1";
let conditionValues = [];
if (argv.username) {
conditionSQL = "oid.name = ?";
conditionValues = [argv.username];
} else if (argv.since) {
conditionSQL = "oid.created_at >= ?";
conditionValues = [argv.since];
}
let users; let users;
try { try {
const [rows] = await db.query( const [rows] = await db.query(
`SELECT dti.id, oid.name, email, encrypted_password, password_salt `SELECT dti.id, oid.name, email, encrypted_password, password_salt
FROM openneo_id.users oid FROM openneo_id.users oid
INNER JOIN openneo_impress.users dti ON dti.remote_id = oid.id INNER JOIN openneo_impress.users dti ON dti.remote_id = oid.id
WHERE oid.created_at >= ? WHERE ${conditionSQL}
ORDER BY dti.id`, ORDER BY dti.id`,
[argv.since || ""] conditionValues
); );
users = rows.map(normalizeRow); users = rows.map(normalizeRow);
} finally { } finally {
@ -130,9 +140,19 @@ function pause(delayMs) {
} }
function formatUserForAuth0(user) { function formatUserForAuth0(user) {
const normalizedUsername = user.name.replace(
/[^a-zA-Z0-9_+\-.!#$^`~@']/g,
""
);
if (normalizedUsername !== user.name) {
console.warn(
`WARN: Username ${user.name} (${user.email}) was not valid, changing to ${normalizedUsername}`
);
}
return { return {
user_id: `impress-${user.id}`, user_id: `impress-${user.id}`,
username: user.name, username: normalizedUsername,
email: user.email, email: user.email,
custom_password_hash: { custom_password_hash: {
algorithm: "hmac", algorithm: "hmac",