mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 11:51:14 -05:00
Securely handle email change cancellations and improve Supabase function error handling
Update supabase/functions/cancel-email-change/index.ts to use secure base64 decoding for JWTs and enhance error handling for Supabase functions. Replit-Commit-Author: Agent Replit-Commit-Session-Id: a46bc7a0-bbf8-43ab-97c0-a58c66c2e365 Replit-Commit-Checkpoint-Type: intermediate_checkpoint
This commit is contained in:
@@ -1,17 +1,24 @@
|
|||||||
import { createClient } from 'https://esm.sh/@supabase/supabase-js@2.57.4';
|
import { createClient } from 'https://esm.sh/@supabase/supabase-js@2.57.4';
|
||||||
|
import { decode as base64Decode } from "https://deno.land/std@0.190.0/encoding/base64.ts";
|
||||||
|
|
||||||
const corsHeaders = {
|
const corsHeaders = {
|
||||||
'Access-Control-Allow-Origin': '*',
|
'Access-Control-Allow-Origin': '*',
|
||||||
'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type',
|
'Access-Control-Allow-Headers': 'authorization, x-client-info, apikey, content-type',
|
||||||
};
|
};
|
||||||
|
|
||||||
// Helper function to decode JWT and extract user ID
|
// Helper function to decode JWT and extract user ID using secure base64 decoding
|
||||||
function decodeJWT(token: string): { sub: string } | null {
|
function decodeJWT(token: string): { sub: string } | null {
|
||||||
try {
|
try {
|
||||||
const parts = token.split('.');
|
const parts = token.split('.');
|
||||||
if (parts.length !== 3) return null;
|
if (parts.length !== 3) return null;
|
||||||
|
|
||||||
const payload = JSON.parse(atob(parts[1]));
|
// JWT uses base64url encoding, convert to standard base64
|
||||||
|
const base64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');
|
||||||
|
const padding = '='.repeat((4 - base64.length % 4) % 4);
|
||||||
|
|
||||||
|
// Decode using Deno's standard library instead of browser-specific atob
|
||||||
|
const decoded = new TextDecoder().decode(base64Decode(base64 + padding));
|
||||||
|
const payload = JSON.parse(decoded);
|
||||||
return payload;
|
return payload;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('JWT decode error:', error);
|
console.error('JWT decode error:', error);
|
||||||
|
|||||||
Reference in New Issue
Block a user