Files
2026-06-11 02:31:09 +00:00

38 lines
1.5 KiB
JavaScript

const bcrypt = require('bcrypt');
/**
* Menyuntikkan akun administrator secara aman dengan pencegahan duplikasi data
* @param {object} db - Instansi koneksi SQLite
*/
async function buat_akun_admin_seeder(db) {
const username_admin = 'admin_dinsos';
const password_murni = 'password';
return new Promise((resolve, reject) => {
// Praktik Keamanan: Memeriksa eksistensi username sebelum melakukan eksekusi penulisan biner
db.get("SELECT COUNT(*) as hitung FROM ADMIN WHERE username = ?", [username_admin], async (err, row) => {
if (err) return reject(err);
if (row.hitung > 0) {
console.log(`Seeder Admin: Akun '${username_admin}' sudah aman tersedia.`);
return resolve();
}
try {
const salt_rounds = 10;
const password_terhash = await bcrypt.hash(password_murni, salt_rounds);
const kueri_insert = `INSERT INTO ADMIN (username, password) VALUES (?, ?)`;
db.run(kueri_insert, [username_admin, password_terhash], function(error_sql) {
if (error_sql) return reject(error_sql);
console.log(`Seeder: Akun admin '${username_admin}' berhasil diinisialisasi.`);
resolve();
});
} catch (error_sistem) {
reject(error_sistem);
}
});
});
}
module.exports = buat_akun_admin_seeder;