const express = require('express'); const bodyParser = require('body-parser'); const crypto = require('crypto'); const app = express(); // Middleware để xử lý JSON body app.use(bodyParser.json({ type: 'application/json' })); // Mock database const users = { "user123": { userId: "user123", password: "password123", // Giả sử người dùng có mật khẩu này publicKey: "" // Khóa công khai sẽ được lưu ở đây } }; // Hàm giả để lấy thông tin user từ database const getUserFromDatabaseByUserId = async (userId) => { return users[userId]; }; // Endpoint để xác thực người dùng app.post('/verify-user', async (req, res) => { const { userId, password } = req.body; const user = await getUserFromDatabaseByUserId(userId); if (!user || user.password !== password) { return res.status(400).json({ status: 'failed', message: 'Invalid credentials', }); } return res.status(200).json({ status: 'success', userId: user.userId, }); }); // Endpoint để lưu trữ khóa công khai của người dùng app.post('/save-public-key', async (req, res) => { const { userId, publicKey } = req.body; const user = await getUserFromDatabaseByUserId(userId); if (!user) { return res.status(400).json({ status: 'failed', message: 'User not found', }); } user.publicKey = publicKey; return res.status(200).json({ status: 'success', }); }); // Endpoint để xác thực chữ ký app.post('/verify-signature', async (req, res) => { const { signature, payload } = req.body; const userId = payload.split('__')[0]; const user = await getUserFromDatabaseByUserId(userId); if (!user) { return res.status(400).json({ status: 'failed', message: 'Something went wrong during your Face ID authentication.', }); } const { publicKey } = user; const verifier = crypto.createVerify('RSA-SHA256'); verifier.update(payload); const isVerified = verifier.verify( `-----BEGIN PUBLIC KEY-----\n${publicKey}\n-----END PUBLIC KEY-----`, signature, 'base64', ); if (!isVerified) { return res.status(400).json({ status: 'failed', message: 'Unfortunately, we could not verify your Face ID authentication', }); } return res.status(200).json({ status: 'success', }); }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`); });