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 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 username_admin = 'admin_dinsos';
|
||||||
const password_murni = 'password';
|
const password_murni = 'password';
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
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) => {
|
db.get("SELECT COUNT(*) as hitung FROM ADMIN WHERE username = ?", [username_admin], async (err, row) => {
|
||||||
if (err) return reject(err);
|
if (err) return reject(err);
|
||||||
|
|
||||||
// Jika akun sudah ada di file SQLite, lewati agar tidak memicu error UNIQUE constraint
|
|
||||||
if (row.hitung > 0) {
|
if (row.hitung > 0) {
|
||||||
console.log('Seeder Admin: Akun sudah terdaftar.');
|
console.log(`Seeder Admin: Akun '${username_admin}' sudah aman tersedia.`);
|
||||||
return resolve();
|
return resolve();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -26,7 +25,7 @@ async function buat_akun_admin_seeder() {
|
|||||||
|
|
||||||
db.run(kueri_insert, [username_admin, password_terhash], function(error_sql) {
|
db.run(kueri_insert, [username_admin, password_terhash], function(error_sql) {
|
||||||
if (error_sql) return reject(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();
|
resolve();
|
||||||
});
|
});
|
||||||
} catch (error_sistem) {
|
} 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;
|
module.exports = buat_akun_admin_seeder;
|
||||||
+30
-24
@@ -1,32 +1,38 @@
|
|||||||
const bcrypt = require('bcrypt');
|
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() {
|
* Menyuntikkan akun petugas lapangan secara aman dengan pencegahan duplikasi data
|
||||||
const username_petugas = 'petugas_pontianak';
|
* @param {object} db - Instansi koneksi SQLite
|
||||||
const password_murni = 'rahasia123';
|
*/
|
||||||
|
async function buat_akun_petugas_seeder(db) {
|
||||||
|
const username_petugas = 'petugas_lapangan';
|
||||||
|
const password_murni = 'password';
|
||||||
|
|
||||||
try {
|
return new Promise((resolve, reject) => {
|
||||||
// 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.
|
// Praktik Keamanan: Memeriksa eksistensi username guna menghindari kegagalan SQLITE_CONSTRAINT
|
||||||
const salt_rounds = 10;
|
db.get("SELECT COUNT(*) as hitung FROM PETUGAS WHERE username = ?", [username_petugas], async (err, row) => {
|
||||||
const password_terhash = await bcrypt.hash(password_murni, salt_rounds);
|
if (err) return reject(err);
|
||||||
|
|
||||||
const kueri_insert = `INSERT INTO PETUGAS (username, password) VALUES (?, ?)`;
|
if (row.hitung > 0) {
|
||||||
|
console.log(`Seeder Petugas: Akun '${username_petugas}' sudah aman tersedia.`);
|
||||||
db.run(kueri_insert, [username_petugas, password_terhash], function(error_sql) {
|
return resolve();
|
||||||
if (error_sql) {
|
|
||||||
console.error('Gagal menyisipkan akun petugas:', error_sql.message);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
}
|
||||||
console.log(`Akun petugas berhasil dibuat! Username: ${username_petugas}`);
|
|
||||||
process.exit(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
} catch (error_sistem) {
|
try {
|
||||||
console.error('Terjadi kegagalan enkripsi internal:', error_sistem.message);
|
const salt_rounds = 10;
|
||||||
process.exit(1);
|
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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Menjalankan fungsi seeder otomatis saat berkas dieksekusi di terminal
|
module.exports = buat_akun_petugas_seeder;
|
||||||
buat_akun_petugas_seeder();
|
|
||||||
Reference in New Issue
Block a user