generated from MuhammadIqbalMaulana/UAS-SIG
Initial commit
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
const bcrypt = require('bcrypt');
|
||||
const db = require('../config/database');
|
||||
|
||||
// Memvalidasi kredensial login petugas lapangan menggunakan pencarian SQLite
|
||||
const proses_autentikasi_petugas = (req, res) => {
|
||||
const { username, password } = req.body;
|
||||
|
||||
// Praktik keamanan: Memblokir eksekusi lebih lanjut jika muatan data kosong untuk menghindari error sistem
|
||||
if (!username || !password) {
|
||||
return res.status(400).json({ error: 'Username dan kata sandi petugas wajib diisi.' });
|
||||
}
|
||||
|
||||
const kueri_petugas = `SELECT * FROM PETUGAS WHERE username = ?`;
|
||||
|
||||
db.get(kueri_petugas, [username], async (error_sql, baris_petugas) => {
|
||||
if (error_sql) {
|
||||
console.error('Gagal query tabel PETUGAS:', error_sql.message);
|
||||
return res.status(500).json({ error: 'Terjadi kegagalan sistem internal server.' });
|
||||
}
|
||||
|
||||
// Praktik keamanan: Memberikan pesan error generik agar peretas tidak mengetahui apakah username tersebut ada di database atau tidak
|
||||
if (!baris_petugas) {
|
||||
return res.status(401).json({ error: 'Kredensial login tidak valid.' });
|
||||
}
|
||||
|
||||
try {
|
||||
/* Baris kompleks: Melakukan verifikasi asinkron untuk mencocokkan kata sandi teks murni dari klien
|
||||
dengan nilai hash terenkripsi di database menggunakan bcrypt.compare, yang secara inheren kebal
|
||||
terhadap serangan timing-attack. */
|
||||
const validasi_password = await bcrypt.compare(password, baris_petugas.password);
|
||||
|
||||
if (!validasi_password) {
|
||||
return res.status(401).json({ error: 'Kredensial login tidak valid.' });
|
||||
}
|
||||
|
||||
res.status(200).json({
|
||||
message: 'Autentikasi petugas berhasil',
|
||||
token: `simulasi_jwt_token_untuk_petugas_${baris_petugas.username}`
|
||||
});
|
||||
|
||||
} catch (error_kripto) {
|
||||
console.error('Error komputasi hash:', error_kripto.message);
|
||||
res.status(500).json({ error: 'Gagal memproses verifikasi keamanan.' });
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Memvalidasi kredensial login administrator utama menggunakan pencarian SQLite
|
||||
const proses_autentikasi_admin = (req, res) => {
|
||||
const { username, password } = req.body;
|
||||
|
||||
// Praktik keamanan: Memblokir eksekusi lebih lanjut jika muatan data kosong
|
||||
if (!username || !password) {
|
||||
return res.status(400).json({ error: 'Username dan kata sandi admin wajib diisi.' });
|
||||
}
|
||||
|
||||
const kueri_admin = `SELECT * FROM ADMIN WHERE username = ?`;
|
||||
|
||||
// Baris kompleks: Eksekusi pencarian data dengan parameterized query (?) memastikan nilai input diperlakukan murni sebagai string data, menutup celah eksploitasi SQL Injection secara absolut.
|
||||
db.get(kueri_admin, [username], async (error_sql, baris_admin) => {
|
||||
if (error_sql) {
|
||||
console.error('Gagal query tabel ADMIN:', error_sql.message);
|
||||
return res.status(500).json({ error: 'Terjadi kegagalan sistem internal server.' });
|
||||
}
|
||||
|
||||
if (!baris_admin) {
|
||||
return res.status(401).json({ error: 'Kredensial login admin tidak valid.' });
|
||||
}
|
||||
|
||||
try {
|
||||
const validasi_password = await bcrypt.compare(password, baris_admin.password);
|
||||
|
||||
if (!validasi_password) {
|
||||
return res.status(401).json({ error: 'Kredensial login admin tidak valid.' });
|
||||
}
|
||||
|
||||
res.status(200).json({
|
||||
message: 'Autentikasi admin berhasil',
|
||||
token: `simulasi_jwt_token_untuk_admin_${baris_admin.username}`
|
||||
});
|
||||
|
||||
} catch (error_kripto) {
|
||||
console.error('Error komputasi hash admin:', error_kripto.message);
|
||||
res.status(500).json({ error: 'Gagal memproses verifikasi keamanan admin.' });
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// Mengekspor semua fungsi agar dapat diakses oleh file router
|
||||
module.exports = {
|
||||
proses_autentikasi_petugas,
|
||||
proses_autentikasi_admin
|
||||
};
|
||||
Reference in New Issue
Block a user