302 lines
8.8 KiB
JavaScript
302 lines
8.8 KiB
JavaScript
|
|
|
|
require('dotenv').load()
|
|
const utils = require('./src/utils');
|
|
const mailer = require("./src/mailer.js")
|
|
const { google } = require('googleapis');
|
|
//const express = require('express')
|
|
const axios = require('axios')
|
|
const next = require('next')
|
|
const nextAuth = require('next-auth')
|
|
const nextAuthConfig = require('./next-auth.config')
|
|
const { join } = require('path');
|
|
const { parse } = require('url');
|
|
|
|
const dev = process.env.NODE_ENV !== 'production'
|
|
const app = next({ dev })
|
|
const handle = app.getRequestHandler()
|
|
|
|
// const passport = require('passport')
|
|
// const FacebookStrategy = require('passport-facebook').Strategy
|
|
|
|
const routes = {
|
|
admin: require('./routes/admin'),
|
|
account: require('./routes/account')
|
|
}
|
|
|
|
const bodyParser = require('body-parser');
|
|
|
|
function getAccessToken() {
|
|
return new Promise(function (resolve, reject) {
|
|
var key = require('./service-account.json');
|
|
var jwtClient = new google.auth.JWT(
|
|
key.client_email,
|
|
null,
|
|
key.private_key,
|
|
'https://www.googleapis.com/auth/firebase.messaging',
|
|
null
|
|
);
|
|
jwtClient.authorize(function (err, tokens) {
|
|
if (err) {
|
|
reject(err);
|
|
return;
|
|
}
|
|
|
|
resolve(tokens.access_token);
|
|
});
|
|
});
|
|
}
|
|
|
|
// passport.use(new FacebookStrategy({
|
|
// clientID: process.env.FACEBOOK_ID,
|
|
// clientSecret: process.env.FACEBOOK_SECRET,
|
|
// callbackURL: "http://localhost:3000/auth/facebook/callback",
|
|
// enableProof: true
|
|
// },
|
|
// function (accessToken, refreshToken, profile, cb) {
|
|
// User.findOrCreate({ facebookId: profile.id }, function (err, user) {
|
|
// return cb(err, user);
|
|
// });
|
|
// console.log(profile)
|
|
|
|
// console.log("accessToken : " + accessToken);
|
|
// console.log("refreshToken" + refreshToken);//****not needed because we only use accesstoken to connect to our api*/
|
|
|
|
// return cb(null, profile);
|
|
// }
|
|
// ));
|
|
|
|
app.prepare()
|
|
.then(() => {
|
|
// Load configuration and return config object
|
|
return nextAuthConfig()
|
|
})
|
|
.then(nextAuthOptions => {
|
|
// Pass Next.js App instance and NextAuth options to NextAuth
|
|
// Note We do not pass a port in nextAuthOptions, because we want to add some
|
|
// additional routes before Express starts (if you do pass a port, NextAuth
|
|
// tells NextApp to handle default routing and starts Express automatically).
|
|
return nextAuth(app, nextAuthOptions)
|
|
})
|
|
.then(nextAuthOptions => {
|
|
|
|
const express = nextAuthOptions.express
|
|
const expressApp = nextAuthOptions.expressApp
|
|
|
|
// Add admin routes
|
|
routes.admin(expressApp)
|
|
|
|
// Add account management route - reuses functions defined for NextAuth
|
|
routes.account(expressApp, nextAuthOptions.functions)
|
|
|
|
expressApp.use('/', express.static(__dirname + '/.next/'))
|
|
|
|
var jsonParser = bodyParser.json()
|
|
|
|
expressApp.post('/feedback', jsonParser, (req, res) => {
|
|
|
|
let message = req.body.message;
|
|
let nom = req.body.nom;
|
|
let prenom = req.body.prenom;
|
|
let tel = req.body.tel;
|
|
let mail = req.body.mail;
|
|
let recaptchaValue = req.body.recaptchaValue;
|
|
|
|
console.log(message);
|
|
if (message === '') {
|
|
res.status(400).json({
|
|
errors: { global: "Message is empty." }
|
|
}); return;
|
|
}
|
|
if (mail === '') {
|
|
res.status(400).json({
|
|
errors: { global: "email is empty." }
|
|
}); return;
|
|
}
|
|
utils.verifyCaptcha(recaptchaValue)
|
|
.then(
|
|
respo => {
|
|
if (respo.data.success == true) {
|
|
try {
|
|
mailer.sendEmail(message, nom, prenom, tel, mail);
|
|
res.status(200).send({})
|
|
} catch (err) {
|
|
res.status(500).send({ message: "Send mail fail." })
|
|
}
|
|
}
|
|
else
|
|
res.status(500).send({ message: "Captcha invalid." })
|
|
})
|
|
.catch(() =>
|
|
res.status(403).send({ message: "Captcha verification impossible." })
|
|
)
|
|
|
|
});
|
|
|
|
expressApp.post('/push/message', jsonParser, (req, res) => {
|
|
let message = req.body.payload;
|
|
|
|
if (message === '') {
|
|
res.status(400).json({
|
|
errors: { global: "Message is empty." }
|
|
}); return;
|
|
}
|
|
else {
|
|
getAccessToken().then((googleAccessToken) => {
|
|
utils.setAuthorizationHeader(googleAccessToken);
|
|
// console.log(message);
|
|
axios.post('https://fcm.googleapis.com/v1/projects/edeclicpwa/messages:send',
|
|
message
|
|
).then(r => {
|
|
console.log("message : "); console.log(r)
|
|
res.status(200).send({ message: "message sent to firebase" })
|
|
}
|
|
)
|
|
.catch(err => console.log("first catch" + err)
|
|
//res.status(500).send({ message: "Push error" })
|
|
)
|
|
}).catch(err => console.log("second catch" + err)
|
|
//err => res.status(500).send({ message: "Push error" + err })
|
|
)
|
|
|
|
}
|
|
})
|
|
expressApp.get('/push/info/:token', (req, res) => {
|
|
|
|
var token = req.params.token
|
|
if (token === '') {
|
|
res.status(498).json({
|
|
errors: { global: "No token specified." }
|
|
}); return;
|
|
}
|
|
|
|
var url = 'https://iid.googleapis.com/iid/info/' + token + '?details=true'
|
|
|
|
utils.setAuthorizationHeaderForIID(process.env.FIREBASE_API_KEY)
|
|
axios.get(url).then(r => {
|
|
if (!!r.data.rel && !!r.data.rel.topics) {
|
|
res.status(200).send({ topics: r.data.rel.topics })
|
|
}
|
|
else
|
|
res.status(200).send({ topics: null })
|
|
}).catch(err => {
|
|
console.log(err)
|
|
res.status(500).send({ message: "Push error" })
|
|
})
|
|
|
|
})
|
|
|
|
expressApp.post('/push/subscribe', jsonParser, (req, res) => {
|
|
let message = req.body;
|
|
|
|
if (message === '') {
|
|
res.status(400).json({
|
|
errors: { global: "Message is empty." }
|
|
}); return;
|
|
}
|
|
else {
|
|
if (message.topic === '' || message.token === '') {
|
|
res.status(400).json({
|
|
errors: { global: "Message isnot well formed." }
|
|
}); return;
|
|
}
|
|
|
|
var url = 'https://iid.googleapis.com/iid/v1/' + message.token + '/rel/topics/' + message.topic
|
|
|
|
utils.setAuthorizationHeaderForIID(process.env.FIREBASE_API_KEY)
|
|
|
|
axios.post(url)
|
|
.then(r => {
|
|
res.status(200).send({ message: "message sent to firebase" })
|
|
})
|
|
.catch(err => console.log(err))
|
|
|
|
}
|
|
})
|
|
|
|
expressApp.post('/push/unsubscribe', jsonParser, (req, res) => {
|
|
let message = req.body;
|
|
|
|
if (message === '') {
|
|
res.status(400).json({
|
|
errors: { global: "Message is empty." }
|
|
}); return;
|
|
}
|
|
else {
|
|
if (message.topic === '' || message.token === '') {
|
|
res.status(400).json({
|
|
errors: { global: "Message is not well formed." }
|
|
}); return;
|
|
}
|
|
message.topic = '/topics/' + message.topic
|
|
var payload = { to: message.topic, registration_tokens: [message.token] }
|
|
var url = 'https://iid.googleapis.com/iid/v1:batchRemove'
|
|
|
|
utils.setAuthorizationHeaderForIID(process.env.FIREBASE_API_KEY)
|
|
axios.post(url, payload
|
|
).then(r => {
|
|
res.status(200).send({ message: "message sent to firebase" })
|
|
}
|
|
)
|
|
.catch(err => console.log(err)
|
|
)
|
|
|
|
}
|
|
})
|
|
|
|
//https://us-central1-edeclicpwa.cloudfunctions.net/pushMessageToAllSubscribers
|
|
expressApp.post('/push/allsubscribers', jsonParser, (req, res) => {
|
|
let message = req.body.payload;
|
|
|
|
if (message === '') {
|
|
res.status(400).json({
|
|
errors: { global: "Message is empty." }
|
|
}); return;
|
|
}
|
|
else {
|
|
|
|
utils.setAuthorizationHeader(process.env.FIREBASE_API_KEY)
|
|
// console.log(message);
|
|
axios.post('https://us-central1-edeclicpwa.cloudfunctions.net/pushMessageToAllSubscribers',
|
|
{ payload: message }
|
|
).then(r => {
|
|
res.status(200).send({ message: "message sent to firebase" })
|
|
}
|
|
)
|
|
.catch(err => console.log(err))
|
|
|
|
}
|
|
})
|
|
|
|
|
|
expressApp.get('/static/js/*.js', (req, res) => {
|
|
|
|
const parsedUrl = parse(req.url, true);
|
|
const { pathname } = parsedUrl;
|
|
const filePath = join(__dirname, '.next', pathname);
|
|
app.serveStatic(req, res, filePath);
|
|
})
|
|
|
|
expressApp.get('/manifest.json', (req, res) => {
|
|
|
|
const parsedUrl = parse(req.url, true);
|
|
const { pathname } = parsedUrl;
|
|
const filePath = join(__dirname, '/static/', pathname);
|
|
app.serveStatic(req, res, filePath);
|
|
})
|
|
|
|
|
|
expressApp.get('*', (req, res) => {
|
|
return handle(req, res)
|
|
})
|
|
|
|
expressApp.listen(process.env.PORT, (err) => {
|
|
if (err) throw err
|
|
console.log('> Ready on http://localhost:' + process.env.PORT)
|
|
console.log('> access Token googleapi >' + getAccessToken())
|
|
})
|
|
})
|
|
.catch((ex) => {
|
|
console.error(ex.stack)
|
|
process.exit(1)
|
|
}) |