let express = require('express') let logger = require('morgan') let bodyParser = require('body-parser') let admin = require("firebase-admin"); let serviceAccount = require("./secrets/de-iot-firebase-adminsdk-puz9e-be74faaf8c.json"); let firebaseadmin = admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "https://de-iot.firebaseio.com" }) const axios = require('axios') let db = admin.firestore(); let FieldValue = require('firebase-admin').firestore.FieldValue; let auth = admin.auth(); let app = express() app.use(bodyParser.json()) app.use(bodyParser.urlencoded({extended: true})) app.use(logger('dev')) app.use(express.static('views')) app.set('view engine', 'ejs') app.set('views', __dirname + '/views') app.get('/', function(request, responce){ responce.render('index.ejs') }) app.post('/submit', function(request, responce){ if (dataValidation(request)) { let uid = authCheck(request) if (uid) { let data = { timestamp: FieldValue.serverTimestamp(), value1: request.body.var1, value2: Number(request.body.var2), uploader: uid } db.collection('logs').doc().set(data) .then(function(){ responce.send({success:true, error:null}) }) .catch(e => (console.log(e))) } else { responce.send({success:false, error:"Auth Error"}) } } else { responce.send({success:false, error:"Data Validation"}) } }) app.post('/light', async function(request, responce){ if (dataVal5(request)) { let uid = await authCheck(request) if (uid) { let data = { isOn: s2b(request.body.state), brightness: Number(request.body.brightness), color: String(request.body.color), lastChangedBy: uid } .then(function(){ responce.send({success:true, error:null}) }) .catch(e => { console.log(e) responce.send({success:false, error:"Internal, " + e}) }) } else { responce.send({success:false, error:"Auth Error"}) } } else { responce.send({success:false, error:"Data Validation"}) console.log(request.body) } }) app.post('/zlight', async function(request, responce){ let isOn = s2b(request.body.state) let brightness = Number(request.body.brightness) let color = Number(request.body.color) let sendD = { brightness: brightness, temperature: color, transition_period: 250, power: isOn } console.log(sendD) axios.post('http://192.168.1.175:8080/api/v1/devices/local/led/brightness', sendD) .then((res) => { console.log(`statusCode: ${res.statusCode}`) responce.send({success:true}) }) .catch((error) => { console.error(error) }) }) app.post('/gst-debug', async function(request, responce){ db.collection('apiData').doc('light').get() .then(doc => { let data = doc.data() responce.send({success:true, state:data.isOn}) }) }) app.post('/get-api', async function(request, responce){ if (dataVal6(request)) { let uid = await authCheck(request) if (uid) { var targetService = String(request.body.service) db.collection('apiData').doc(targetService).get() .then(doc => { if (!doc.exists) { responce.send({success:false, error:"Service does not exist"}) } else { responce.send({success:true, data:doc.data()}) } }) .catch(e => { responce.send({success:false, error:"Internal, " + e}) }); } else { responce.send({success:false, error:"Auth Error"}) } } else { responce.send({success:false, error:"Data Validation"}) } }) function dataValidation(data){ if (data.body.var1) { if (data.body.var2) { if (Number(data.body.var2)) { return true } } } return false } function dataVal6(data){ if (String(data.body.service) && String(data.body.authToken)) { return true } return false } function dataVal5(data){ if ((data.body.state == 'true' || data.body.state == 'false') && Number(data.body.brightness) && String(data.body.color) && String(data.body.authToken)) { return true } return false } function s2b(string){ switch(string.toLowerCase().trim()){ case "true": case "yes": case 'on': case "1": return true case "false": case "no": case 'off': case "0": case null: return false default: return false } } async function authCheck(data) { let uid = false console.log(data.body.authToken) decodedToken = await admin.auth().verifyIdToken(data.body.authToken).catch(e=>{console.log(e)}) uid = decodedToken.uid return uid } app.get('*', function(request, responce){ responce.render('404.ejs') }) app.post('*', function(request, responce){ responce.status(404).send({success:false, error:"404"}) }) var port = 5050 app.listen(port, function() { console.log('Server running on port ' + port) })