171 lines
5.0 KiB
JavaScript
171 lines
5.0 KiB
JavaScript
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',
|
|
};
|
|
|
|
|
|
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 })
|
|
}
|
|
}) |