From 50cf644a3ddb072f8e8b927aac4c895cb40cfd91 Mon Sep 17 00:00:00 2001 From: shay Date: Fri, 24 Nov 2017 15:47:35 +0200 Subject: [PATCH] chore(spark) - create mocks --- .env | 2 +- server/routes/spark.js | 85 ++++------------------- server/server.js | 6 +- server/spark/spark.js | 136 +++++++------------------------------ server/spark/sparkMock.js | 137 +++++++++----------------------------- 5 files changed, 75 insertions(+), 291 deletions(-) diff --git a/.env b/.env index be4011f6..13805c73 100644 --- a/.env +++ b/.env @@ -2,6 +2,6 @@ ENVIRONMENT=debug PORT=8080 DB_URL=mongodb://localhost/volunteers -SPARK_HOST=http://sparkstaging.midburn.org +SPARK_HOST=http://spark.midburn.org SECRET=secret JWT_KEY=authToken \ No newline at end of file diff --git a/server/routes/spark.js b/server/routes/spark.js index 7399bf33..362ed3f5 100644 --- a/server/routes/spark.js +++ b/server/routes/spark.js @@ -1,85 +1,28 @@ const express = require('express'); const router = express.Router(); -const co = require('co'); -const _ = require('lodash'); const SparkFacade = require('../spark/spark'); const devMode = (process.env.ENVIRONMENT === 'debug'); -const SPARK_HOST = (process.env.LOCAL_SPARK != 'true') ? process.env.SPARK_HOST : 'http://localhost:3000'; +const SPARK_HOST = (process.env.LOCAL_SPARK !== 'true') ? process.env.SPARK_HOST : 'http://localhost:3000'; const sparkFacade = new SparkFacade(SPARK_HOST); const handleSparkProxy = handler => (req, res) => { - console.log(`${req.method.toUpperCase()} ${req.path}`); - return handler(req, res).then(data => res.status(200).send(data)).catch(e => { - console.log(e); - res.status(500).send(devMode ? e.toString() : 'Internal server error'); - }) + console.log(`${req.method.toUpperCase()} ${req.path}`); + return handler(req, res) + .then(data => res.status(200).send(data)) + .catch(e => { + console.log(e); + res.status(500).send(devMode ? e.toString() : 'Internal server error'); + }) }; -// READ VOLUNTEER ROLES -router.get('/volunteers/roles/me', handleSparkProxy(req => - sparkFacade.rolesByUser(req.token, req.userDetails.email))); - -//READ DEPARTMENTS -router.get('/departments', co.wrap(function*(req, res) { - - const departmentsToExclude = [16, 10]; - let departments; - - try { - const roles = yield sparkFacade.rolesByUser(req.token, req.userDetails.email); - departments = yield sparkFacade.departments(req.token); - - const isAdmin = roles.find(role => role.permission === 1); - - if (isAdmin) { - return res.json(departments.filter(department => departmentsToExclude.indexOf(department.id) === -1)); - } - - res.json(departments.filter(department => roles.find(role => role.department_id === department.id))); - } - catch (e) { - console.log(e); - return res.status(500).json({error: "Internal server error"}); - } -})); - -//READ ROLES -router.get('/roles', - handleSparkProxy(req => - sparkFacade.allRoles(req.token))); - -//READ ALL VOLUNTEERINGS - READ -router.get('/volunteers', handleSparkProxy(req => sparkFacade.volunteers(req.token))); - -//READ ALL VOLUNTEERS IN SPECIFIC DEPARTMENT -router.get('/departments/:dId/volunteers', - handleSparkProxy(req => - sparkFacade.volunteersByDepartment(req.token, req.params.dId))); - -//POST MULTIPLE VOLUNTEERINGS - CREATE -router.post('/departments/:dId/volunteers/', handleSparkProxy(req => - sparkFacade.addVolunteers(req.token, req.params.dId, req.body.emails.map(email => ({ - email, - role_id: req.body.role, - is_production: req.body.is_production - }))))); - -//PUT SINGLE VOLUNTEERING - UPDATE -router.put('/departments/:dId/volunteers/:uid', - handleSparkProxy(req => - sparkFacade.updateVolunteer(req.token, req.params.dId, req.params.uid, _.pick(req.body, ['role_id', 'is_production'])))); - -//DELETE SINGLUE VOLUNTEERING - REMOVE -router.delete('/departments/:dId/volunteers/:uid', - handleSparkProxy(req => - sparkFacade.deleteVolunteer(req.token, req.params.dId, req.params.uid))); - -//DELETE VOLUNTEERS CACHE -router.delete('/cache/volunteers', - handleSparkProxy(req => - sparkFacade.deleteVolunteersCache())); +// GET VOLUNTEER +router.get('/users', handleSparkProxy(req => + sparkFacade.getUserDetailByMails(req.token, req.body.emails))); +// GET ALL EVENTS +router.get('/events', handleSparkProxy(req => + sparkFacade.getAllEvents(req.token))); module.exports = router; diff --git a/server/server.js b/server/server.js index 0487b30f..087fb1f9 100644 --- a/server/server.js +++ b/server/server.js @@ -5,8 +5,6 @@ const React = require('react'); const webpack = require('webpack'); const webpackDevServer = require('webpack-dev-server'); const webpackConfig = require("../webpack.config.js"); -const http = require('http'); -const axios = require('axios'); const mongoose = require('mongoose'); const cookieParser = require('cookie-parser'); const jwt = require('jsonwebtoken'); @@ -68,7 +66,6 @@ app.use('/api/v1', require('./routes/spark')); app.use('/api/v1', require('./routes/shifts')); app.use('/login', (req, res) => { - let token = req.query.token; if (!token && devMode && process.env.LOCAL_SPARK === 'true') { token = jwt.sign({ @@ -144,5 +141,6 @@ mongoose.Promise = Promise; const server = app.listen(process.env.PORT, function () { const host = server.address().address; const port = server.address().port; - console.log("Listening at http://%s:%s", host, port) + console.log("Listening at http://%s:%s", host, port); + console.log(`Go to http://${host}:${port}/login`); }); diff --git a/server/spark/spark.js b/server/spark/spark.js index 863b74d5..185617b9 100644 --- a/server/spark/spark.js +++ b/server/spark/spark.js @@ -1,125 +1,39 @@ -const path = require('path'); -const fs = require('fs'); -const http = require('http'); const axios = require('axios'); -const NodeCache = require('node-cache'); -const _ = require('lodash'); +// const NodeCache = require('node-cache'); const SessionCookieName = process.env.JWT_KEY; -const sparkCache = new NodeCache(); +// const sparkCache = new NodeCache(); class SparkFacade { - - constructor(baseUrl = 'http://localhost:3000') { - this.baseUrl = baseUrl; - } - - departments(token) { - return this.fetchSpark('/volunteers/departments', {headers: this.authHeader(token)}) - .then(depts => depts.map(n => _.assign({name: n.name_en}, n))); - } - - allRoles(token) { - return this.fetchSpark('/volunteers/roles', {headers: this.authHeader(token)}); - } - - rolesByUser(token, userEmail) { - return this.fetchSpark(`/volunteers/user_roles?email=${userEmail}`, this.authHeader(token)); - } - - // rolesByUser(token, userId) { - // return this.fetchSpark(`/volunteers/${userId}/roles`, this.authHeader(token)); - // } - - volunteers(token) { - let volunteers; - - volunteers = sparkCache.get('volunteers'); - - if (volunteers) { - return new Promise((resolve, reject) => { - resolve(volunteers); - }); + static authHeader(token) { + return {'Authorization': `${SessionCookieName}=${token}`}; } - return this.fetchSpark('/volunteers/volunteers', {headers: this.authHeader(token)}).then(data => { - volunteers = data.map(item => _.assign({profile_id: item.user_id, phone: item.phone_number}, - _.pick(item, ['department_id', 'email', 'first_name', 'last_name', 'got_ticket', 'is_production', 'role_id']))); - - sparkCache.set('volunteers', volunteers); - - return volunteers; - } - ); - } - - volunteersByDepartment(token, departmentId) { - - let volunteers; - - volunteers = sparkCache.get(`volunteers-${departmentId}`); - - if (volunteers) { - return new Promise((resolve, reject) => { - resolve(volunteers); - }); + constructor(baseUrl = 'http://localhost:3000') { + this.baseUrl = baseUrl; } - return this.fetchSpark(`/volunteers/departments/${departmentId}/volunteers/`, - {headers: this.authHeader(token)}).then(data => { - volunteers = data.map(item => _.assign({profile_id: item.user_id, phone: item.phone_number}, - _.pick(item, ['department_id', 'email', 'first_name', 'last_name', 'got_ticket', 'is_production', 'role_id'])) - ); - - sparkCache.set(`volunteers-${departmentId}`, volunteers); - - return volunteers; - }); - } - - addVolunteers(token, departmentId, volunteers) { - sparkCache.del('volunteers'); - sparkCache.del(`volunteers-${departmentId}`); - - return this.fetchSpark(`/volunteers/departments/${departmentId}/volunteers`, - {headers: this.authHeader(token), method: 'post', data: volunteers}); - } - - updateVolunteer(token, departmentId, volunteerId, volunteer) { - sparkCache.del('volunteers'); - sparkCache.del(`volunteers-${departmentId}`); - - return this.fetchSpark(`/volunteers/departments/${departmentId}/volunteers/${volunteerId}`, - { - headers: this.authHeader(token), - method: 'put', - data: volunteer - }).then(data => _.pick(data, ['status'])) - } - - deleteVolunteer(token, departmentId, volunteerId) { - sparkCache.del('volunteers'); - sparkCache.del(`volunteers-${departmentId}`); - - return this.fetchSpark(`/volunteers/departments/${departmentId}/volunteers/${volunteerId}/`, { - headers: this.authHeader(token), method: 'delete' - }).then(data => _.pick(data, ['status'])) - } - - deleteVolunteersCache() { - sparkCache.flushAll(); - - return new Promise((resolve, reject) => resolve({result: true})); - } + getUserDetailByMails(token, emails) { + return this.fetchSpark( + '/users', + token, + {emails: emails}); + } - // private - fetchSpark(path, options) { - return axios(`${this.baseUrl}${path}`, options).then(r => r.data); - } + getAllEvents(token) { + return this.fetchSpark('/events', token); + } - authHeader(token) { - return {'Cookie': `${SessionCookieName}=${token}`}; - } + // private + fetchSpark(path, token, options) { + return axios( + `${this.baseUrl}${path}`, + { + headers: SparkFacade.authHeader(token), + ...options + }) + .then(response => response.data); + } } module.exports = SparkFacade; \ No newline at end of file diff --git a/server/spark/sparkMock.js b/server/spark/sparkMock.js index 6c258790..96671671 100644 --- a/server/spark/sparkMock.js +++ b/server/spark/sparkMock.js @@ -1,133 +1,62 @@ -const express = require('express'); -const path = require('path'); -const jwt = require('jsonwebtoken'); -const cookieParser = require('cookie-parser'); +const express = require("express"); +const jwt = require("jsonwebtoken"); +require("dotenv"); -require('dotenv'); +const SECRET = process.env.SECRET; + +const events = [ + { + event_id: "1", + name: "2017" + } +]; + +const users = [ + { + user_id: 17, + first_name: "May", + last_name: "Ben Arie", + email: "may@gmail.com", + phone_number: "0541234567", + got_ticket: true, + comment: "from Volunteers table" + } +]; const app = express(); -app.use(cookieParser()); app.use((req, res, next) => { - - if (req.path === '/volunteers') { - return next(); - } - const authHeader = req.get('Authorization'); if (!authHeader) { - return res.status(401).json({error: 'unauthorized'}); + return res.status(401).json({error: 'unauthorized - no authorization header mentioned'}); } - const token = authHeader.split(' ')[1]; + const token = authHeader.split('=')[1]; if (!token) { - return res.status(401).json({error: 'unauthorized'}); + return res.status(401).json({error: "unauthorized - no authorization mentioned"}); } try { - - jwt.verify(token, 'secret'); + jwt.verify(token, SECRET); next(); } catch (err) { - console.log(err); - next(err); + return res.status(401).json({error: "unauthorized - illegal token"}); } }); -app.get('/volunteers', function (req, res) { - const token = jwt.sign({email: 'shaytidhar@gmail.com', id: 1}, - 'secret', - {expiresIn: '3h'}); - - res.redirect(`http://127.0.0.1:8080?token=${token}`); +app.get("/users", function (req, res) { + res.json(users); }); -app.get('/volunteers/:userId/roles', function (req, res) { - res.json( - [ - { - "permission": 4, - "department_id": 2 - }, - { - "permission": 1, - "department_id": 0 - } - ] - ); -}); - - -app.get('/volunteers/departments', function (req, res) { - res.json([{"id": 1, "name_en": "Tech", "name_he": "טכנולוגיה"}, { - "id": 2, - "name_en": "Gate", - "name_he": "שער" - }, {"id": 3, "name_en": "Volunteers", "name_he": "מתנדבים"}]); -}); - -app.get('/volunteers/volunteers', function (req, res) { - res.json([{ - "role_id": 0, - "department_id": 1, - "user_id": 1, - "first_name": "superuser", - "last_name": "superuser", - "email": "spark.superuser@midburn.org", - "phone_number": "054112233555", - "got_ticket": true, - "comment": null, - "is_production": "Yes" - }, { - "role_id": 2, - "department_id": 1, - "user_id": 333, - "first_name": "Jane", - "last_name": "Doe", - "email": "jane.doe@gmail.com", - "phone_number": "054112233551", - "got_ticket": true, - "comment": null, - "is_production": 0 - }]); -}); - -app.get('/volunteers/departments/:departmentId/volunteers', function (req, res) { - - const volunteers = req.params.departmentId === '1' ? - [{ - "role_id": 0, - "department_id": 1, - "user_id": 1, - "first_name": "superuser", - "last_name": "superuser", - "email": "spark.superuser@midburn.org", - "phone_number": "054112233555", - "got_ticket": true, - "comment": null, - "is_production": "Yes" - }, { - "role_id": 2, - "department_id": 1, - "user_id": 333, - "first_name": "Jane", - "last_name": "Doe", - "email": "jane.doe@gmail.com", - "phone_number": "054112233551", - "got_ticket": true, - "comment": null, - "is_production": 0 - }] - : []; - - res.json(volunteers); +app.get("/events", function (req, res) { + res.json(events); }); const server = app.listen(3000, function () { const host = server.address().address; const port = server.address().port; - console.log("Spark mock listening at http://%s:%s", host, port) + console.log("Spark mock listening at http://%s:%s", host, port); });