fix : bug seeder berjalan terus setiap deploy
This commit is contained in:
+8
-10
@@ -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;
|
||||
+31
-25
@@ -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();
|
||||
module.exports = buat_akun_petugas_seeder;
|
||||
Reference in New Issue
Block a user