feat: add secure announcement reactions with session token validation

- Add announcement-reaction Edge Function for secure like/dislike
- Update telegram-auth to sync users to tg_users table
- Update useAnnouncementReaction hook to use Edge Function
- Add bridge announcement script and migration
This commit is contained in:
2026-02-07 03:19:15 +03:00
parent 321081f620
commit cd5ef71505
8 changed files with 365 additions and 92 deletions
+39 -2
View File
@@ -163,8 +163,13 @@ serve(async (req) => {
});
}
// Create Supabase admin client
const supabase = createClient(supabaseUrl, supabaseServiceKey);
// Create Supabase admin client with auth admin capabilities
const supabase = createClient(supabaseUrl, supabaseServiceKey, {
auth: {
autoRefreshToken: false,
persistSession: false,
},
});
// ========================================
// Method 1: Session token verification
@@ -285,6 +290,38 @@ serve(async (req) => {
// Get the full user data
const { data: userData } = await supabase.from('users').select('*').eq('id', userId).single();
// Also sync to tg_users table for forum/announcements
const { data: existingTgUser } = await supabase
.from('tg_users')
.select('id')
.eq('telegram_id', telegramUser.id)
.single();
if (!existingTgUser) {
// Create tg_user record with same ID as users table for consistency
await supabase.from('tg_users').insert({
id: userId,
telegram_id: telegramUser.id,
username: telegramUser.username || null,
first_name: telegramUser.first_name,
last_name: telegramUser.last_name || null,
photo_url: telegramUser.photo_url || null,
is_admin: false,
});
console.log('[telegram-auth] Created tg_user record for:', userId);
} else {
// Update tg_user record
await supabase
.from('tg_users')
.update({
username: telegramUser.username || null,
first_name: telegramUser.first_name,
last_name: telegramUser.last_name || null,
photo_url: telegramUser.photo_url || null,
})
.eq('id', existingTgUser.id);
}
return new Response(
JSON.stringify({
user: userData,