diff --git a/seeders/seed_admin.js b/seeders/seed_admin.js index 565c425..ca39b51 100644 --- a/seeders/seed_admin.js +++ b/seeders/seed_admin.js @@ -1,21 +1,20 @@ -// ========================================== -// BAGIAN DIUBAH: Bungkus dengan module.exports dan hapus process.exit() -// ========================================== const bcrypt = require('bcrypt'); -const db = require('../config/database'); -// Mengubah kata sandi murni menjadi 'password' sesuai instruksi nomor 8 dari dosen -async function buat_akun_admin_seeder() { +/** + * 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); - // Jika akun sudah ada di file SQLite, lewati agar tidak memicu error UNIQUE constraint if (row.hitung > 0) { - console.log('Seeder Admin: Akun sudah terdaftar.'); + console.log(`Seeder Admin: Akun '${username_admin}' sudah aman tersedia.`); return resolve(); } @@ -26,7 +25,7 @@ async function buat_akun_admin_seeder() { db.run(kueri_insert, [username_admin, password_terhash], function(error_sql) { if (error_sql) return reject(error_sql); - console.log(`Akun admin berhasil dibuat! Username: ${username_admin}`); + console.log(`Seeder: Akun admin '${username_admin}' berhasil diinisialisasi.`); resolve(); }); } catch (error_sistem) { @@ -36,5 +35,4 @@ async function buat_akun_admin_seeder() { }); } -// Ekspor fungsi agar bisa dipanggil oleh seed_manajer.js secara rapi module.exports = buat_akun_admin_seeder; \ No newline at end of file diff --git a/seeders/seed_petugas.js b/seeders/seed_petugas.js index 32dc005..5ac9b4e 100644 --- a/seeders/seed_petugas.js +++ b/seeders/seed_petugas.js @@ -1,32 +1,38 @@ const bcrypt = require('bcrypt'); -const db = require('../config/database'); -// Menggenerasikan data akun petugas baru dengan pengacakan kata sandi aman -async function buat_akun_petugas_seeder() { - const username_petugas = 'petugas_pontianak'; - const password_murni = 'rahasia123'; +/** + * Menyuntikkan akun petugas lapangan secara aman dengan pencegahan duplikasi data + * @param {object} db - Instansi koneksi SQLite + */ +async function buat_akun_petugas_seeder(db) { + const username_petugas = 'petugas_lapangan'; + const password_murni = 'password'; - try { - // Baris kompleks: Kita menerapkan algoritma KDF Bcrypt dengan salt rounds 10 untuk menyamarkan kata sandi murni menjadi hash acak sebelum disimpan ke SQLite guna memenuhi standar kepatuhan keamanan data industri tanpa membebani memori server secara berlebihan. - const salt_rounds = 10; - const password_terhash = await bcrypt.hash(password_murni, salt_rounds); - - const kueri_insert = `INSERT INTO PETUGAS (username, password) VALUES (?, ?)`; - - db.run(kueri_insert, [username_petugas, password_terhash], function(error_sql) { - if (error_sql) { - console.error('Gagal menyisipkan akun petugas:', error_sql.message); - process.exit(1); + return new Promise((resolve, reject) => { + // Praktik Keamanan: Memeriksa eksistensi username guna menghindari kegagalan SQLITE_CONSTRAINT + db.get("SELECT COUNT(*) as hitung FROM PETUGAS WHERE username = ?", [username_petugas], async (err, row) => { + if (err) return reject(err); + + if (row.hitung > 0) { + console.log(`Seeder Petugas: Akun '${username_petugas}' 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 PETUGAS (username, password) VALUES (?, ?)`; + + db.run(kueri_insert, [username_petugas, password_terhash], function(error_sql) { + if (error_sql) return reject(error_sql); + console.log(`Seeder: Akun petugas '${username_petugas}' berhasil diinisialisasi.`); + resolve(); + }); + } catch (error_sistem) { + reject(error_sistem); } - console.log(`Akun petugas berhasil dibuat! Username: ${username_petugas}`); - process.exit(0); }); - - } catch (error_sistem) { - console.error('Terjadi kegagalan enkripsi internal:', error_sistem.message); - process.exit(1); - } + }); } -// Menjalankan fungsi seeder otomatis saat berkas dieksekusi di terminal -buat_akun_petugas_seeder(); \ No newline at end of file +module.exports = buat_akun_petugas_seeder; \ No newline at end of file