const express = require('express'); const cors = require('cors'); const { initializeApp, applicationDefault, cert } = require('firebase-admin/app'); const { getFirestore, Timestamp, FieldValue } = require('firebase-admin/firestore'); const { getMessaging } = require('firebase-admin/messaging') const { getAuth } = require('firebase-admin/auth') const serviceAccount = require('./firebase.json'); initializeApp({ credential: cert(serviceAccount) }); const db = getFirestore(); const app = express(); app.use(express.json()); app.use(cors({ origin: '*', })); app.listen(7289, () => console.log('API is online!')); app.get('/', (req, res) => { res.status(200).send({ status: 'success', }); }); app.post('/checkrelatiecode', async (req, res) => { const { relatiecode, email } = req.body; if (!relatiecode) return res.status(400).send({ code: 'no-relatiecode'}) if (!email) return res.status(400).send({ code: 'no-email'}) try { const docRef = db.collection('ledenlijst').doc(relatiecode); const doc = await docRef.get(); if (!doc.exists) return res.status(400).send({ code: 'incorrect'}) const data = doc.data() if (data.email[0] === email || data.email[1] === email) { return res.status(200).send({ code: 'correct'}) } else { return res.status(400).send({ code: 'incorrect'}) } } catch (e) { return res.status(500).send({ code: 'error', error: e }) } }) app.post('/getrelatiecodes', async (req, res) => { const { email } = req.body; if (!email) return res.status(400).send({ code: 'no-email'}) try { const ledenlijstRef = db.collection('ledenlijst') const snapshot = await ledenlijstRef.where("email", "array-contains", email).get() if (snapshot.empty) { res.status(400).send({ code: 'no-relatiecodes'}) return; } let relatiecodes = []; let persons = []; snapshot.forEach(doc => { relatiecodes.push(doc.id) const data = doc.data() persons.push({ fullName: data.fullName, relatiecode: doc.id }) }); res.status(200).send({ code: 'success', relatiecodes: relatiecodes, persons: persons }) } catch (e) { return res.status(500).send({ code: 'error', error: e }) } }) app.post('/subscribetotopic', async (req, res) => { const { topic, registrationToken } = req.body; if (!topic) return res.status(400).send({ code: 'no-topic'}) if (!registrationToken) return res.status(400).send({ code: 'no-registrationToken'}) try { getMessaging().subscribeToTopic([registrationToken], topic) .then((response) => { console.log('Successfully subscribed to topic:', response); res.status(200).send({ code: 'success' }) }) .catch((error) => { console.log('Error subscribing to topic:', error); return res.status(500).send({ code: 'error', error: error }) }); } catch (e) { return res.status(500).send({ code: 'error', error: e }) } }) app.post('/sendmessage', async (req, res) => { const { title, body, token } = req.body; if (!title) return res.status(400).send({ code: 'no-topic'}) if (!body) return res.status(400).send({ code: 'no-registrationToken'}) if (!token) return res.status(400).send({ code: 'no-token'}) try { getAuth() .verifyIdToken(token) .then(async (decodedToken) => { const uid = decodedToken.uid; const docRef = db.collection('users').doc(uid); const doc = await docRef.get(); if (!doc.exists) return res.status(400).send({ code: 'not-found'}) const data = doc.data() if (!data.sendNews) return res.status(400).send({ code: 'no-permissions'}) const message = { notification: { title: title, body: body }, topic: 'all', apns: { headers: { 'apns-push-type': 'alert' } } }; getMessaging().send(message) .then((response) => { // Response is a message ID string. console.log('Successfully sent message:', response); res.status(200).send({ code: 'success', response: response }) }) .catch((error) => { console.log('Error sending message:', error); return res.status(500).send({ code: 'error', error: error }) }); }) .catch((error) => { console.log(error) return res.status(500).send({ code: 'error', error: error }) }); } catch (e) { return res.status(500).send({ code: 'error', error: e }) } })