transfer_encryption_key
A firebase functionfirebase functionCloud Functions for Firebase is a serverless framework that lets you automatically run backend code in response to events triggered by Firebase features and HTTPS requests. https://firebase.google.com/docs/functions that transfers the hashed encryption key for end-to-end encryptionEnd to end encryption in Fleeting NotesPrivacy and security are a big concern for many users. Especially with something as personal as note-taking this is doubly important. In a survey within my discord channel, for every person that wanted markdown support in Fleeting Notes, 7 people wanted end-to-end encryption. With such high demand for E2EE, I had no choice but to work hard to add this crucial feature into the application. end-to-end encryption discord poll Enabling E2EE in Fleeting Notes 1. Navigate to the settings in the Fle from firebase to supabase.
- The function takes
supabase_user_id
as an input - The
supabase_user
is queried based on the supabase uid - The
firebase_user_id
is extracted from thesupabase_user
encryption_key
is queried from firebase using thefirebase_user_id
- The
supabase_user_id
and theencryption_key
are upserted into supabase
exports.transfer_encryption_key = functions.https.onRequest(async (req, res) => {
const supabase = createClient(process.env.SUPABASE_URL, process.env.SUPABASE_SERVICE_ROLE_KEY);
// get firebaseUid from supabaseUid
const supabaseUid = req.body.record?.id;
const { data } = await supabase.auth.admin.getUserById(supabaseUid);
const firebaseUid = data?.user?.user_metadata?.['firebaseUid']
// get encryption key
const ref = db.collection('encryption').doc(firebaseUid);
const doc = await ref.get();
const encryption_key = doc.data()?.key;
// update supabase encryption_key
const { error } = await supabase
.from('user_data')
.upsert({
id: supabaseUid,
encryption_key
});
return res.sendStatus(200);
});