Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

optimized query code #10

Open
wants to merge 4 commits into
base: query
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions functions/config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@


const config = {
key: 'abab',

};

module.exports = config;
218 changes: 51 additions & 167 deletions functions/index.js
Original file line number Diff line number Diff line change
@@ -1,191 +1,75 @@
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const jwt = require('jsonwebtoken');
const express = require('express');
const bodyParser = require('body-parser');
const isAuthenticated = require('./middlewares/auth');

admin.initializeApp();
let database = admin.database();

//login start
exports.googleLogin = functions.https.onRequest(function(req,response){
let accToken = req.query.accessToken;
const request = require('request');
request('https://www.googleapis.com/plus/v1/people/me?access_token='+accToken, { json: true }, (err, res, body) => {
let data;
if(err)
{
return console.log(err);
}
console.log(body);
if(body.error != null)
{
console.log('error in accessToken');
data={
authenticatedRequest:false,
};
return response.json(data);
}

let email1 = body.emails[0].value;
let email = email1.replace(/\./g,',');
console.log(email);
let email_child = "users/"+email;
let ref = database.ref();

ref.once('value',function(snapshot){
if(snapshot.hasChild(email_child))
{
console.log('present');
let reff = database.ref(email_child);
let onB;
reff.once('value',function(snap)
{
console.log(snap.val().onBoard);
onB=snap.val().onBoard;
console.log(onB);
data={
onBoard:onB,
authenticatedRequest:true,
isRegistered:true,
body:body
};
const token = jwt.sign( data ,"abab", { expiresIn: "12h"});
response.json(token);
});
console.log('onboard is'+onB);
}
else
{
database.ref(email_child).set({
onBoard:false,
email: body.emails[0].value,
name: body.name.givenName+" "+body.name.familyName,
});
console.log('not present');
data={
onBoard:false,
authenticatedRequest:true,
isRegistered:false,
body:body
};
response.json(data);
}
});
});
});
//login end


let express = require('express');
let bodyParser = require('body-parser');

let app = express();
app.use(bodyParser.urlencoded({extended:false}));


// middleware start
function isAuthenticated(req , res , next) {
if(req.body.accessToken === undefined || req.body.accessToken === '') res.json({error: true});
else {
jwt.verify(req.body.accessToken, "abab", (err, data) => {
if (err) {
res.json({error: true});
}
else
{
if (data.error != null) {
return res.json({
authenticatedRequest: false,
});
}
else {
let email = data.body.emails[0].value;
let name = data.body.name.givenName+" "+data.body.name.familyName;
console.log(email);
req.body.email1 = email;
req.body.name = name;
next();
}
}
});
}
}
// middleware end


app.post('/', isAuthenticated ,function(req,response)
{
if (req.body.phone === undefined || req.body.college === undefined || req.body.year === undefined) {
return response.send('please pass valid/complete url parameters');
}
else
{
//console.log(req.body.email1);
//console.log(req.body.name);
let email1 = req.body.email1;
let email = email1.replace(/\./g, ',');
let ref = database.ref('users/');
let email_child = "users/"+email;
ref.once('value', function (snapshot) {
console.log(snapshot.val());
if (snapshot.hasChild(email))
{
console.log('present');
database.ref(email_child).update({
onBoard: true,
phone: req.body.phone,
college: req.body.college,
year: req.body.year,
});
response.send('database updated');
}
});
}
});

exports.signUp = functions.https.onRequest(app);

app.use(bodyParser.urlencoded({extended: false}));


//<--------Random Fact Generation---------->
//Generates random fact about techspardha.
exports.randomFact = functions.https.onRequest((request , response) => {
const numberOfLines = 8;
const randomIndex = Math.floor(Math.random() * numberOfLines);
database.ref('/facts/' + randomIndex).on('value',function(snapshot){
console.log(snapshot.val());
response.status(401).json({
message : snapshot.val()
app.get('/randomFact', (request, response) => {
const numberOfLines = 8;
const randomIndex = Math.floor(Math.random() * numberOfLines);
database.ref('/facts/' + randomIndex).on('value', (snapshot) => {
response.status(200).json({
success: true,
message: snapshot.val()
});
});
});
});


//<------Returning the array of all the videos------>
//Returns the array of videos containing title and url of a video.
exports.getVideo = functions.https.onRequest((request , response) => {
let items = [];
database.ref('/videos').on('value', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
items.push(childSnapshot.key,{
title : childSnapshot.val().title,
url : childSnapshot.val().url
});
app.get('/video', (request, response) => {
let items = [];
database.ref('/videos').on('value', (snapshot) => {
snapshot.forEach((childSnapshot) => {
items.push(childSnapshot.key, {
title: childSnapshot.val().title,
url: childSnapshot.val().url
});
});
});
});
response.status(401).json(items);
});
response.status(200).json({
success: true,
items: items
});
});


//<-----Adding query to database------->
//only add newly asked query to the database.
exports.addQuery = functions.https.onRequest((request,response)=>{
const query = request.query.text;
var newPostKey = admin.database().ref().child('queries').push().key;
var updates = {};
updates['/queries/' + newPostKey] = query;
database.ref().update(updates);
response.status(401).json({
message : "query successfully added"
});
app.post('/query', isAuthenticated, (request, response) => {
const query = request.body.text;
if (query) {
let newPostKey = admin.database().ref().child('queries').push().key;
let updates = {};

let email = request.body.email;
email = email.replace(/,/g, '.');

updates['/queries/' + newPostKey] = {email: email, query: query};
database.ref().update(updates);
response.status(200).json({
success: true,
message: "query successfully added"
});
}
else {
response.status(400).json({
success: false,
message: "query text not defined"
})
}
});


exports.api = functions.https.onRequest(app);

40 changes: 40 additions & 0 deletions functions/middlewares/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
const jwt = require('jsonwebtoken');
const config = require('../config');

const isAuthenticated = (req, res, next) => {
const token = req.headers.authorization;

if (token) {
jwt.verify(token, config.key, (err, data) => {
if (err) {
res.status(401).json({
success: false, err: 'unauthenticated request'
});
}
else {
if (data.error != null) {
return res.status(401).json({
success: false, err: 'unauthenticated request'
});
}
else {
let email = data.body.emails[0].value;
email = email.replace(/\./g, ',');
const name = data.body.name.givenName + " " + data.body.name.familyName;

req.body.email = email;
req.body.name = name;

next();
}
}
});
}
else {
res.status(401).json({
success: false, err: 'unauthenticated request'
});
}
};

module.exports = isAuthenticated;
Loading