132 lines
2.1 KiB
JavaScript
132 lines
2.1 KiB
JavaScript
require("dotenv").config();
|
|
|
|
const express = require("express");
|
|
const cors = require("cors");
|
|
const admin = require("firebase-admin");
|
|
|
|
const app = express();
|
|
|
|
app.use(cors());
|
|
app.use(express.json());
|
|
|
|
admin.initializeApp({
|
|
credential: admin.credential.cert(
|
|
require("./serviceAccountKey.json")
|
|
),
|
|
});
|
|
|
|
const API_KEY = process.env.API_KEY;
|
|
|
|
function authMiddleware(req, res, next) {
|
|
const authHeader = req.headers.authorization;
|
|
|
|
if (!authHeader) {
|
|
return res.status(401).json({
|
|
error: "Missing Authorization Header",
|
|
});
|
|
}
|
|
|
|
const token = authHeader.replace("Bearer ", "");
|
|
|
|
if (token !== API_KEY) {
|
|
return res.status(403).json({
|
|
error: "Invalid API Key",
|
|
});
|
|
}
|
|
|
|
next();
|
|
}
|
|
|
|
app.post("/push", authMiddleware, async (req, res) => {
|
|
try {
|
|
const {
|
|
type = "none",
|
|
title,
|
|
message,
|
|
} = req.body;
|
|
|
|
if (!title || !message) {
|
|
return res.status(400).json({
|
|
error: "title and message required",
|
|
});
|
|
}
|
|
|
|
let color = "#2196f3";
|
|
|
|
switch (type) {
|
|
case "info":
|
|
color = "#2196f3";
|
|
break;
|
|
|
|
case "warning":
|
|
color = "#ff9800";
|
|
break;
|
|
|
|
case "danger":
|
|
color = "#f44336";
|
|
break;
|
|
|
|
case "none":
|
|
default:
|
|
color = "#9e9e9e";
|
|
break;
|
|
}
|
|
|
|
const payload = {
|
|
topic: "global",
|
|
|
|
notification: {
|
|
title,
|
|
body: message,
|
|
},
|
|
|
|
data: {
|
|
type,
|
|
color,
|
|
},
|
|
|
|
android: {
|
|
priority: "high",
|
|
notification: {
|
|
color,
|
|
},
|
|
},
|
|
|
|
apns: {
|
|
payload: {
|
|
aps: {
|
|
sound: "default",
|
|
},
|
|
},
|
|
},
|
|
|
|
webpush: {
|
|
notification: {
|
|
icon: "/icon-192.png",
|
|
},
|
|
},
|
|
};
|
|
|
|
const response = await admin
|
|
.messaging()
|
|
.send(payload);
|
|
|
|
res.json({
|
|
success: true,
|
|
firebaseResponse: response,
|
|
});
|
|
} catch (err) {
|
|
console.error(err);
|
|
|
|
res.status(500).json({
|
|
error: err.message,
|
|
});
|
|
}
|
|
});
|
|
|
|
const PORT = process.env.PORT || 3000;
|
|
|
|
app.listen(PORT, () => {
|
|
console.log(`Server running on ${PORT}`);
|
|
});
|