mirror of
https://github.com/Nezumi-2711/uptime-monitoring.git
synced 2026-09-22 13:48:31 +00:00
66 lines
1.7 KiB
TypeScript
66 lines
1.7 KiB
TypeScript
import { hashPassword } from '../src/worker/lib/password';
|
|
|
|
async function readPassword() {
|
|
if (!process.stdin.isTTY) {
|
|
return (await new Response(Bun.stdin.stream()).text()).trimEnd();
|
|
}
|
|
|
|
process.stdout.write('Password: ');
|
|
process.stdin.setRawMode(true);
|
|
process.stdin.resume();
|
|
process.stdin.setEncoding('utf8');
|
|
|
|
return new Promise<string>((resolve, reject) => {
|
|
let password = '';
|
|
const cleanup = () => {
|
|
process.stdin.setRawMode(false);
|
|
process.stdin.pause();
|
|
process.stdout.write('\n');
|
|
};
|
|
|
|
process.stdin.on('data', (key: string) => {
|
|
if (key === '\u0003') {
|
|
cleanup();
|
|
reject(new Error('Cancelled'));
|
|
return;
|
|
}
|
|
if (key === '\r' || key === '\n') {
|
|
cleanup();
|
|
resolve(password);
|
|
return;
|
|
}
|
|
if (key === '\u007f' || key === '\b') {
|
|
password = password.slice(0, -1);
|
|
return;
|
|
}
|
|
password += key;
|
|
});
|
|
});
|
|
}
|
|
|
|
function sqlValue(value: string) {
|
|
return `'${value.replaceAll("'", "''")}'`;
|
|
}
|
|
|
|
function shellDoubleQuoted(value: string) {
|
|
return value.replace(/[\\"$`]/g, '\\$&');
|
|
}
|
|
|
|
const password = await readPassword();
|
|
if (password.length < 8) {
|
|
console.error('Password must contain at least 8 characters.');
|
|
process.exit(1);
|
|
}
|
|
|
|
const now = Date.now();
|
|
const statement = [
|
|
'INSERT OR REPLACE INTO admin_credentials',
|
|
'(id, password_hash, created_at, updated_at)',
|
|
`VALUES (1, ${sqlValue(await hashPassword(password))}, ${now}, ${now});`,
|
|
].join(' ');
|
|
|
|
console.log('\nLocal database:');
|
|
console.log(`bunx wrangler d1 execute uptime --local --command "${shellDoubleQuoted(statement)}"`);
|
|
console.log('\nRemote database:');
|
|
console.log(`bunx wrangler d1 execute uptime --remote --command "${shellDoubleQuoted(statement)}"`);
|