Spaces:
Sleeping
Sleeping
File size: 3,119 Bytes
4bea261 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | import { txasupabase } from '../../../lib/txasupabase.js';
export const POST = async ({ request }) => {
try {
const body = await request.json();
const { browser_token, zalo_nickname } = body;
if (!browser_token || !zalo_nickname) {
return new Response(JSON.stringify({ error: 'Thiếu thông tin yêu cầu!' }), {
status: 400,
headers: { 'Content-Type': 'application/json' }
});
}
// 1. Tạo hoặc cập nhật request vào database
const accessRequest = await txasupabase.createZaloAccessRequest(browser_token, zalo_nickname);
// 2. Ghi lại log hoạt động hệ thống
await txasupabase.createLog(
'zalo_access_request',
'info',
`Thành viên Zalo "${zalo_nickname}" gửi yêu cầu truy cập từ trình duyệt ${browser_token}`,
{ browser_token, zalo_nickname }
);
// 3. Gửi email thông báo cho Admin
try {
const settings = await txasupabase.getSettings();
// Tìm email Admin nhận thông báo
let adminEmail = settings.admin_email || settings.smtp_user;
if (!adminEmail) {
// Tìm user admin đầu tiên từ DB làm dự phòng
const { data: adminUsers } = await txasupabase.supabase
.from('users')
.select('email')
.eq('role', 'admin')
.limit(1);
if (adminUsers && adminUsers.length > 0) {
adminEmail = adminUsers[0].email;
}
}
if (adminEmail && settings.smtp_user && settings.smtp_pass) {
const siteUrl = settings.site_url || 'http://localhost:4321';
const approveUrl = `${siteUrl}/admin/duyet-zalo`; // Trang duyệt chuyên dụng riêng biệt
await txasupabase.sendMail({
to: adminEmail,
subject: `[TPHIMX] Yêu cầu duyệt quyền truy cập mới từ Zalo: ${zalo_nickname}`,
templateName: 'zalo_access_request',
placeholders: {
zalo_nickname,
browser_token,
request_time: new Date().toLocaleString('vi-VN'),
approve_url: approveUrl
}
});
} else {
console.log('[Access Request API]: SMTP not configured or Admin email missing, skipped email notification.');
}
} catch (mailErr) {
console.error('[Access Request Mail Error]:', mailErr);
await txasupabase.createLog(
'zalo_access_request_mail_failed',
'warn',
`Lỗi gửi mail thông báo Zalo access cho "${zalo_nickname}": ${mailErr.message}`
);
}
return new Response(JSON.stringify({
success: true,
message: 'Gửi yêu cầu thành công! Vui lòng chờ Admin duyệt nick Zalo của bạn.',
data: accessRequest
}), {
status: 200,
headers: { 'Content-Type': 'application/json' }
});
} catch (err) {
console.error('Error handling access request API:', err);
return new Response(JSON.stringify({ error: 'Có lỗi xảy ra trên hệ thống!' }), {
status: 500,
headers: { 'Content-Type': 'application/json' }
});
}
};
|