├── .gitignore ├── configration └── config.json ├── routes ├── controllers │ ├── data.json │ ├── credentials.json │ └── team.js └── index.js ├── server.js ├── package.json └── util └── verifyToken.js /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /.idea -------------------------------------------------------------------------------- /configration/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "jwt": { 3 | "secret": "123456789012345678901234567890" 4 | } 5 | } -------------------------------------------------------------------------------- /routes/controllers/data.json: -------------------------------------------------------------------------------- 1 | [{"firstName":"Ken","lastName":"Vazquez","phone":"+1 (910) 539-3628","email":"kennedyvazquez@verton.com","postBody":"xyyxxx","id":"d1a2b81b-c2c6-4e61-9b29-f63084b64deb"}] 2 | -------------------------------------------------------------------------------- /routes/controllers/credentials.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "email" : "engr.akashahmad@gmail.com", 4 | "password" : "12345678" 5 | }, 6 | { 7 | "email" : "sadiaayub095@gmail.com", 8 | "password" : "abcdefgh" 9 | } 10 | ] -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const endpoints = require('./routes'); 3 | 4 | let port = process.env.PORT || 2000 ; 5 | 6 | const app = express(); 7 | 8 | endpoints(app); 9 | 10 | app.listen(port, () => { 11 | console.log('app started at port 2000'); 12 | }); -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | const bodyParser = require('body-parser'); 2 | const cors = require('cors'); 3 | const team = require('./controllers/team'); 4 | const verifyToken = require("../util/verifyToken"); 5 | 6 | exports = module.exports = function (app) { 7 | 8 | app.use(bodyParser.urlencoded({ extended: true })); 9 | app.use(bodyParser.json()); 10 | app.use(cors()); 11 | 12 | 13 | app.get('/api/team', verifyToken, team.get); 14 | app.get('/api/team/:id', team.getOne); 15 | app.post('/api/team', team.post); 16 | app.put('/api/team/:id', team.put); 17 | app.delete('/api/team/:id', team.delete); 18 | app.post('/api/phoneVerification', team.numberValidation); 19 | app.post('/api/login', team.login); 20 | app.post('/api/signUp', team.signUp); 21 | }; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "team-apicrud0", 3 | "version": "1.0.0", 4 | "main": "server.js", 5 | "dependencies": { 6 | "axios": "^0.21.2", 7 | "body-parser": "^1.19.0", 8 | "cors": "^2.8.5", 9 | "express": "^4.17.1", 10 | "file-system": "^2.2.2", 11 | "jsonfile": "^5.0.0", 12 | "jsonwebtoken": "^8.5.1", 13 | "nodemon": "^1.19.4", 14 | "uuid": "^3.3.3" 15 | }, 16 | "devDependencies": {}, 17 | "scripts": { 18 | "test": "echo \"Error: no test specified\" && exit 1", 19 | "start": "node server.js" 20 | }, 21 | "author": "sadi", 22 | "license": "ISC", 23 | "repository": { 24 | "type": "git", 25 | "url": "git+https://github.com/akashahmad/json-crud.git" 26 | }, 27 | "bugs": { 28 | "url": "https://github.com/akashahmad/json-crud/issues" 29 | }, 30 | "homepage": "https://github.com/akashahmad/json-crud#readme", 31 | "description": "" 32 | } 33 | -------------------------------------------------------------------------------- /util/verifyToken.js: -------------------------------------------------------------------------------- 1 | let jwt = require('jsonwebtoken'); 2 | const config = require('../configration/config.json'); 3 | 4 | let verifyToken = (req, res, next) => { 5 | const response = {}; 6 | try{ 7 | let token = req.headers['x-access-token'] || req.headers['authorization']; // Express headers are auto converted to lowercase 8 | if (token) { 9 | if (token.startsWith('Bearer ')) { 10 | // Remove Bearer from string 11 | token = token.slice(7, token.length); 12 | } 13 | jwt.verify(token, config.jwt.secret, (err, decoded) => { 14 | console.log(err,decoded); 15 | if (err) { 16 | response.statusCode =401; 17 | response.body = JSON.stringify({ 18 | message: 'Token is not valid', 19 | data: "" 20 | }); 21 | res.status(response.statusCode).send(response.body); 22 | } else { 23 | req.decoded = decoded; 24 | next(); 25 | } 26 | }); 27 | } else { 28 | return res.status(401).json({ 29 | success: false, 30 | message: 'Auth token is not supplied' 31 | }); 32 | } 33 | } 34 | catch(err) { 35 | response.statusCode = 505; 36 | response.body = JSON.stringify({err}); 37 | res.status(response.statusCode).send(response.body); 38 | } 39 | 40 | }; 41 | 42 | module.exports = verifyToken; -------------------------------------------------------------------------------- /routes/controllers/team.js: -------------------------------------------------------------------------------- 1 | //var fs = require('fs'); 2 | const express = require('express'); 3 | const app = express(); 4 | app.use(express.json()); 5 | const jsonfile = require('jsonfile'); 6 | const uuid = require('uuid'); 7 | const jsonwebtoken = require('jsonwebtoken'); 8 | const axios = require('axios'); 9 | const config = require('../../configration/config.json'); 10 | 11 | 12 | const Controllerteam = { 13 | get: (req, res) => { 14 | 15 | const file = './routes/controllers/data.json' 16 | jsonfile.readFile(file, function (err, obj) { 17 | if (err) { 18 | console.error(err) 19 | } 20 | else { 21 | res.send(obj); 22 | console.dir(obj) 23 | } 24 | }) 25 | }, 26 | 27 | 28 | post: async (req, res) => { 29 | const file = './routes/controllers/data.json' 30 | 31 | 32 | let data = await jsonfile.readFile(file, async (err, data) => { 33 | if (err) { 34 | console.error(err) 35 | } 36 | else { 37 | const obj = {...req.body} 38 | obj.id = uuid() 39 | await data.push(obj); 40 | jsonfile.writeFile(file, data, function (err) { 41 | if (err) console.error(err) 42 | 43 | }) 44 | //console.log('sad', req.body); 45 | } 46 | }) 47 | res.send('new-member successfully added'); 48 | }, 49 | 50 | 51 | put: async (req, res) => { 52 | const file = './routes/controllers/data.json' 53 | 54 | 55 | let data = await jsonfile.readFile(file, async (err, data) => { 56 | if (err) { 57 | console.error(err) 58 | } 59 | else { 60 | await data.forEach(sin =>{ 61 | if(sin.id === req.params.id){ 62 | Object.keys(req.body).forEach(single=>{ 63 | sin[single]= req.body[single] 64 | } 65 | ) 66 | // sin.name = req.body.name; 67 | // sin.company = req.body.company; 68 | // sin.email = req.body.email; 69 | // sin.sinphone = req.body.phone; 70 | // sin.address =req.body.address; 71 | // sin.id = req.body.id; 72 | } 73 | 74 | }) 75 | 76 | jsonfile.writeFile(file, data, function (err) { 77 | if (err) console.error(err) 78 | }) 79 | //console.log('sad', req.body); 80 | } 81 | }) 82 | res.send('member successfully updated'); 83 | }, 84 | 85 | 86 | 87 | 88 | delete: async (req, res) => { 89 | console.log("params", req.params.id) 90 | const file = './routes/controllers/data.json' 91 | 92 | 93 | let data = await jsonfile.readFile(file, async (err, data) => { 94 | if (err) { 95 | console.error(err) 96 | } 97 | else { 98 | jsonfile.writeFile(file, data.filter(item=>item.id !== req.params.id ), function (err) { 99 | if (err) console.error(err) 100 | }) 101 | //console.log('sad', req.body); 102 | } 103 | }) 104 | res.status(200).send('member successfully deleted'); 105 | }, 106 | 107 | 108 | getOne: async (req, res) => { 109 | let response = {}; 110 | const file = './routes/controllers/data.json' 111 | let data = await jsonfile.readFile(file, async (err, data) => { 112 | if (err) { 113 | console.error(err) 114 | } 115 | else { 116 | response.status = 200; 117 | response.body = { 118 | message: "single", 119 | data: data.find(item=>item.id === req.params.id) 120 | }; 121 | res.status(response.status).send(JSON.stringify(response.body)); 122 | } 123 | }) 124 | }, 125 | 126 | 127 | login: async (req, res) => { 128 | const response = {}; 129 | try { 130 | let {email, password} = req.body; 131 | if (!email) { 132 | response.statusCode = 404; 133 | response.body = JSON.stringify({ 134 | message: 'Email is required' 135 | }); 136 | res.status(response.statusCode).send(response.body); 137 | } 138 | if (!password) { 139 | response.statusCode = 404; 140 | response.body = JSON.stringify({ 141 | message: 'Password is required' 142 | }); 143 | res.status(response.statusCode).send(response.body); 144 | } 145 | if (password && email) { 146 | const file = './routes/controllers/credentials.json'; 147 | await jsonfile.readFile(file, async (err, data) => { 148 | if (err) { 149 | console.error(err) 150 | response.statusCode = 500; 151 | response.body = JSON.stringify({err}); 152 | res.status(response.statusCode).send(response.body); 153 | } 154 | else { 155 | let user = data.find(sin => sin.email === email); 156 | if (!user) { 157 | //throw new Error('No user with that email') 158 | response.statusCode = 500; 159 | response.body = JSON.stringify({ 160 | message: 'Incorrect email', 161 | data: "" 162 | }); 163 | res.status(response.statusCode).send(response.body); 164 | } 165 | else if (req.body.password !== user.password) { 166 | // throw new Error('No user with that email') 167 | response.statusCode = 404; 168 | response.body = JSON.stringify({ 169 | message: 'Incorrect password', 170 | data: "" 171 | }); 172 | res.status(response.statusCode).send(response.body); 173 | } 174 | else { 175 | // signin user and generate a jwt 176 | const token = jsonwebtoken.sign({ 177 | email: user.email, 178 | }, config.jwt.secret, {expiresIn: '1y'}) 179 | 180 | // return json web token 181 | response.statusCode = 200; 182 | response.body = JSON.stringify({ 183 | message: 'User LoggedIN', 184 | data: "", 185 | token: token 186 | }); 187 | res.status(response.statusCode).send(response.body); 188 | } 189 | } 190 | }) 191 | } 192 | } 193 | catch (err) { 194 | console.log("errr". err); 195 | response.statusCode = 500; 196 | response.body = JSON.stringify({err}); 197 | res.status(response.statusCode).send(response.body); 198 | } 199 | }, 200 | 201 | signUp: async (req, res) => { 202 | const response = {}; 203 | try { 204 | let {email, password} = req.body; 205 | if (!email) { 206 | response.statusCode = 404; 207 | response.body = JSON.stringify({ 208 | message: 'Email is required' 209 | }); 210 | res.status(response.statusCode).send(response.body); 211 | } 212 | if (!password) { 213 | response.statusCode = 404; 214 | response.body = JSON.stringify({ 215 | message: 'Password is required' 216 | }); 217 | res.status(response.statusCode).send(response.body); 218 | } 219 | if (email && password) { 220 | const file = './routes/controllers/credentials.json'; 221 | await jsonfile.readFile(file, async (err, data) => { 222 | if (err) { 223 | console.error(err) 224 | response.statusCode = 500; 225 | response.body = JSON.stringify({err}); 226 | res.status(response.statusCode).send(response.body); 227 | } 228 | else { 229 | let user = await data.find(item => item.email === email); 230 | 231 | if (user) { 232 | //throw new Error('user with that email already exist') 233 | response.statusCode = 500; 234 | response.body = JSON.stringify({ 235 | message: 'email is already existing', 236 | data: "" 237 | }); 238 | await res.status(response.statusCode).send(response.body); 239 | } 240 | else { 241 | const obj = {...req.body} 242 | obj.id = await uuid() 243 | await data.push(obj); 244 | await jsonfile.writeFile(file, data, function (err) { 245 | if (err) console.error(err) 246 | 247 | }) 248 | // signin user and generate a jwt 249 | const token = await jsonwebtoken.sign({ 250 | email: email, 251 | }, config.jwt.secret, {expiresIn: '1y'}) 252 | 253 | // // return json web token 254 | response.statusCode = 200; 255 | response.body = JSON.stringify({ 256 | message: 'User LoggedIN', 257 | data: "", 258 | token: token 259 | }); 260 | await res.status(response.statusCode).send(response.body); 261 | } 262 | } 263 | }) 264 | 265 | } 266 | } 267 | catch (err) { 268 | console.log("errr".err); 269 | response.statusCode = 500; 270 | response.body = JSON.stringify({err}); 271 | res.status(response.statusCode).send(response.body); 272 | } 273 | }, 274 | numberValidation: (req, res) => { 275 | const telephone1 = req.body.phone; 276 | const response = {}; 277 | axios.post('https://www.national-debt-help.org.uk/HomeLocRegValidationCheck.php?telephone1=' + telephone1) 278 | .then(ress => { 279 | if (ress.data.status === 1) { 280 | response.statusCode = 200; 281 | response.body = JSON.stringify({ 282 | message: 'mobile number valid', 283 | }); 284 | res.status(response.statusCode).send(response.body); 285 | 286 | } 287 | 288 | else { 289 | response.statusCode = 509; 290 | response.body = JSON.stringify({ 291 | message: 'mobile number invalid', 292 | }); 293 | res.status(response.statusCode).send(response.body); 294 | } 295 | }) 296 | .catch(err => { 297 | response.statusCode = 509; 298 | response.body = JSON.stringify({ 299 | message: err, 300 | }); 301 | res.status(response.statusCode).send(response.body); 302 | }); 303 | 304 | }, 305 | 306 | }; 307 | 308 | module.exports = Controllerteam; --------------------------------------------------------------------------------