202 lines
4.6 KiB
JavaScript
202 lines
4.6 KiB
JavaScript
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)
|
|
})
|