From 0508bd5afed10475a241bf4768bcc176154a2bcc Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Sat, 7 Mar 2020 19:05:23 +0530 Subject: [PATCH 01/22] add dockerfile --- .gitignore | 3 ++- Dockerfile | 12 ++++++++++++ docker-compose.yml | 13 +++++++++++++ package.json | 3 +++ src/index.js | 6 ++++-- src/routes/otp/index.js | 2 +- 6 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.gitignore b/.gitignore index 8500911..8a306ea 100644 --- a/.gitignore +++ b/.gitignore @@ -105,4 +105,5 @@ dist # Stores VSCode versions used for testing VSCode extensions .vscode-test -.idea \ No newline at end of file +.idea +.docker_env \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..fd9e9ac --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM node:12-alpine + +WORKDIR /usr/src/dumbass + +COPY package.json . +RUN yarn + +COPY . . + +EXPOSE 5001 + +CMD ["yarn", "start"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..6a394b2 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +version: '3' +services: + dumbass: + image: dumbass:latest + links: + - mongo + env_file: + - .docker_env + + mongo: + image: mongo + env_file: + - .docker_env \ No newline at end of file diff --git a/package.json b/package.json index aba262a..0d8e9a3 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,9 @@ "main": "src/index.js", "author": "abhishek97", "license": "MIT", + "scripts": { + "start": "node src/index.js" + }, "dependencies": { "@hapi/joi": "^17.1.0", "@sendgrid/mail": "^6.5.2", diff --git a/src/index.js b/src/index.js index d998658..927fc03 100644 --- a/src/index.js +++ b/src/index.js @@ -1,11 +1,13 @@ -require('dotenv').config() +if (process.env.NODE_ENV !== 'production') + require('dotenv').config() + const express = require('express') const app = express() const Sentry = require('@sentry/node'); const { dbConnectionReady } = require('services/db') const routes = require('./routes') -const PORT = process.env.PORT || 5001 +const PORT = 5001 Sentry.init({ dsn: process.env.SENTRY_DSN diff --git a/src/routes/otp/index.js b/src/routes/otp/index.js index 006f287..c54d557 100644 --- a/src/routes/otp/index.js +++ b/src/routes/otp/index.js @@ -8,8 +8,8 @@ route.get('/', validators.POST, (req, res) => { }) route.get('/:id', controller.handleGetById) +route.post('/send', validators.POST, controller.handleSendOtp) route.post('/:id/verify', controller.handleVerifyOtp) -route.post('/', validators.POST, controller.handleSendOtp) route.delete('/:id', controller.handleDeleteById) module.exports = route From 19cebec1d3570fb89b5806577e77373b2e95ef91 Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Sat, 7 Mar 2020 19:30:48 +0530 Subject: [PATCH 02/22] Create main.yml --- .github/workflows/main.yml | 43 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..bc68202 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,43 @@ +# This is a basic workflow to help you get started with Actions + +name: CI + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the master branch +on: + push: + branches: [ master ] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + # Runs a single command using the runners shell + - name: Build, Tag, Publish Docker + uses: HurricanKai/Publish-Docker-Github-Action@1.12.1 + with: + name: abhishek97/dumbass + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: executing remote ssh commands using password + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.HOST }} + username: ${{ secrets.USERNAME }} + key: ${{ secrets.PRIVATE_KEY }} + script: whoami + +# # Runs a set of commands using the runners shell +# - name: Run a multi-line script +# run: | +# echo Add other actions to build, +# echo test, and deploy your project. From 0fe3f3da67e6efbab97394829b1aa4764e4b5b9c Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Sat, 7 Mar 2020 20:38:27 +0530 Subject: [PATCH 03/22] fix github actions --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index bc68202..384ecce 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,10 +21,10 @@ jobs: - uses: actions/checkout@v2 # Runs a single command using the runners shell - - name: Build, Tag, Publish Docker - uses: HurricanKai/Publish-Docker-Github-Action@1.12.1 + - name: Build and Publish Docker + uses: elgohr/Publish-Docker-Github-Action@master with: - name: abhishek97/dumbass + name: abhishek971/dumbass username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} From 76b058f67204f065e7ca114f4751600b2c2dcd46 Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Sat, 7 Mar 2020 20:52:18 +0530 Subject: [PATCH 04/22] use abhishek971/dumbass for docker-compose --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 6a394b2..15b6bca 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,7 +1,7 @@ version: '3' services: dumbass: - image: dumbass:latest + image: abhishek971/dumbass:latest links: - mongo env_file: From 6a1e7a5ee5473054116e36b1bd063301c9d0b102 Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Sat, 7 Mar 2020 20:54:58 +0530 Subject: [PATCH 05/22] Fix workflows --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 384ecce..359f9af 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -34,7 +34,7 @@ jobs: host: ${{ secrets.HOST }} username: ${{ secrets.USERNAME }} key: ${{ secrets.PRIVATE_KEY }} - script: whoami + script: docker pull abhishek971/dumbass:latest && cd ~/dumbass/ && docker-compose up -d # # Runs a set of commands using the runners shell # - name: Run a multi-line script From 7feb37eb457926805a6d84f06dae383c0e3cbb8e Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Sun, 8 Mar 2020 13:42:29 +0530 Subject: [PATCH 06/22] expose ports in docker-compose --- docker-compose.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 15b6bca..7c50f97 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,6 +2,8 @@ version: '3' services: dumbass: image: abhishek971/dumbass:latest + ports: + - "5001:5001" links: - mongo env_file: @@ -9,5 +11,7 @@ services: mongo: image: mongo + ports: + - "27017:27017" env_file: - .docker_env \ No newline at end of file From 7d0938d4c9d2803e86c2129324ff2a2947c63570 Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Sun, 8 Mar 2020 13:54:57 +0530 Subject: [PATCH 07/22] add git pull in workflow --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 359f9af..1539bfb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -34,7 +34,7 @@ jobs: host: ${{ secrets.HOST }} username: ${{ secrets.USERNAME }} key: ${{ secrets.PRIVATE_KEY }} - script: docker pull abhishek971/dumbass:latest && cd ~/dumbass/ && docker-compose up -d + script: docker pull abhishek971/dumbass:latest && cd ~/dumbass/ && git pull && docker-compose up -d # # Runs a set of commands using the runners shell # - name: Run a multi-line script From 595afc352e712aebc97c4694dac190234f3593a0 Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Sun, 8 Mar 2020 14:06:26 +0530 Subject: [PATCH 08/22] persist mongo data on disk --- docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 7c50f97..4f2acbf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,6 +11,8 @@ services: mongo: image: mongo + volumes: + - ../mongo_data:/data/db ports: - "27017:27017" env_file: From afc822a15955d7d44c244855ac12ee09e85a94ea Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Sun, 8 Mar 2020 14:22:15 +0530 Subject: [PATCH 09/22] add volume --- docker-compose.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 4f2acbf..6ba937d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,8 +12,11 @@ services: mongo: image: mongo volumes: - - ../mongo_data:/data/db + - mongo_data:/data/db ports: - "27017:27017" env_file: - - .docker_env \ No newline at end of file + - .docker_env + +volumes: + mongo_data: \ No newline at end of file From 0cafb78e4c9c1f45b297cc37a0cc6e8a777c417a Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Sun, 8 Mar 2020 14:34:26 +0530 Subject: [PATCH 10/22] Create README.md --- README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..b57fdb7 --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +# Dumbass +![CI](https://github.com/abhishek97/dumbass/workflows/CI/badge.svg) + +A Micro OTP send and verify services written in Node and Mongodb + +### Development +Make sure you have mongodb installed. +``` +node src/index.js +``` + +### Deployment +Can be run using `docker-compose`. +``` +docker-compose up +``` From 38615f06081bd5e86f91fcb71e67b7c05ae1c60e Mon Sep 17 00:00:00 2001 From: 1arp Date: Wed, 11 Mar 2020 13:09:07 +0530 Subject: [PATCH 11/22] added passport authentication --- package.json | 4 +++- src/passport/index.js | 16 ++++++++++++++++ src/routes/otp/index.js | 10 ++++++---- src/services/db.js | 6 +++++- yarn.lock | 25 +++++++++++++++++++++++++ 5 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 src/passport/index.js diff --git a/package.json b/package.json index 0d8e9a3..e028079 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,8 @@ "dotenv": "^8.2.0", "express": "^4.17.1", "mongodb": "^3.5.3", - "mustache": "^4.0.0" + "mustache": "^4.0.0", + "passport": "^0.4.1", + "passport-http-bearer": "^1.0.1" } } diff --git a/src/passport/index.js b/src/passport/index.js new file mode 100644 index 0000000..86fe2f6 --- /dev/null +++ b/src/passport/index.js @@ -0,0 +1,16 @@ +const passport = require('passport'); +const BearerStatergy = require('passport-http-bearer'); + +const {getClientByToken} = require('services/db'); + + +passport.use(new BearerStatergy( + function(token,done){ + getClientByToken(token).then((client)=>{ + if(!client){return done(null,false)} + return done(null,client) + }) + } +)); + +module.exports = passport; \ No newline at end of file diff --git a/src/routes/otp/index.js b/src/routes/otp/index.js index c54d557..953c7d0 100644 --- a/src/routes/otp/index.js +++ b/src/routes/otp/index.js @@ -1,15 +1,17 @@ const { Router } = require('express') const validators = require('./validator') const controller = require('./controller') +const passport = require('../../passport') const route = Router() route.get('/', validators.POST, (req, res) => { res.send('OK. Get this') }) -route.get('/:id', controller.handleGetById) -route.post('/send', validators.POST, controller.handleSendOtp) -route.post('/:id/verify', controller.handleVerifyOtp) -route.delete('/:id', controller.handleDeleteById) +route.use(passport.initialize()) +route.get('/:id', passport.authenticate('bearer',{session : false}), controller.handleGetById) +route.post('/send', passport.authenticate('bearer',{session : false}), validators.POST, controller.handleSendOtp) +route.post('/:id/verify',passport.authenticate('bearer',{session : false}), controller.handleVerifyOtp) +route.delete('/:id', passport.authenticate('bearer',{session : false}), controller.handleDeleteById) module.exports = route diff --git a/src/services/db.js b/src/services/db.js index dda98da..04c407b 100644 --- a/src/services/db.js +++ b/src/services/db.js @@ -25,4 +25,8 @@ module.exports.getOtpById = (id) => db.collection('otps').findOne({ module.exports.updateOtpById = (id, payload) => db.collection('otps').updateOne({ _id: new ObjectId(id) -}, { $set: payload }) \ No newline at end of file +}, { $set: payload }) + +module.exports.getClientByToken = async(clientToken) => db.collection('clients').findOne({ + token : clientToken.toString() + }) \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 784f45f..9be06b7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -779,11 +779,36 @@ parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +passport-http-bearer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/passport-http-bearer/-/passport-http-bearer-1.0.1.tgz#147469ea3669e2a84c6167ef99dbb77e1f0098a8" + integrity sha1-FHRp6jZp4qhMYWfvmdu3fh8AmKg= + dependencies: + passport-strategy "1.x.x" + +passport-strategy@1.x.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" + integrity sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ= + +passport@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/passport/-/passport-0.4.1.tgz#941446a21cb92fc688d97a0861c38ce9f738f270" + integrity sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg== + dependencies: + passport-strategy "1.x.x" + pause "0.0.1" + path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +pause@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" + integrity sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10= + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" From de8cf80470be05ce0c45220503e3c77b75373ddd Mon Sep 17 00:00:00 2001 From: 1arp Date: Wed, 11 Mar 2020 14:16:53 +0530 Subject: [PATCH 12/22] changed .then to async await --- src/passport/index.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/passport/index.js b/src/passport/index.js index 86fe2f6..6a242ab 100644 --- a/src/passport/index.js +++ b/src/passport/index.js @@ -5,11 +5,10 @@ const {getClientByToken} = require('services/db'); passport.use(new BearerStatergy( - function(token,done){ - getClientByToken(token).then((client)=>{ - if(!client){return done(null,false)} - return done(null,client) - }) + async (token,done) => { + const client = await getClientByToken(token) + if(!client){return done(null,false)} + return done(null,client) } )); From fa37f299b638fe24e82fed7cbcff5fff9c8a91e5 Mon Sep 17 00:00:00 2001 From: 1arp Date: Wed, 11 Mar 2020 20:09:46 +0530 Subject: [PATCH 13/22] made suggested changes --- src/passport/index.js | 3 ++- src/routes/otp/index.js | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/passport/index.js b/src/passport/index.js index 6a242ab..c7d4003 100644 --- a/src/passport/index.js +++ b/src/passport/index.js @@ -7,7 +7,8 @@ const {getClientByToken} = require('services/db'); passport.use(new BearerStatergy( async (token,done) => { const client = await getClientByToken(token) - if(!client){return done(null,false)} + if(!client) + return done(null,false) return done(null,client) } )); diff --git a/src/routes/otp/index.js b/src/routes/otp/index.js index 953c7d0..afc1023 100644 --- a/src/routes/otp/index.js +++ b/src/routes/otp/index.js @@ -9,9 +9,10 @@ route.get('/', validators.POST, (req, res) => { }) route.use(passport.initialize()) -route.get('/:id', passport.authenticate('bearer',{session : false}), controller.handleGetById) -route.post('/send', passport.authenticate('bearer',{session : false}), validators.POST, controller.handleSendOtp) -route.post('/:id/verify',passport.authenticate('bearer',{session : false}), controller.handleVerifyOtp) -route.delete('/:id', passport.authenticate('bearer',{session : false}), controller.handleDeleteById) +route.use(passport.authenticate('bearer',{session:false})) +route.get('/:id', controller.handleGetById) +route.post('/send', validators.POST, controller.handleSendOtp) +route.post('/:id/verify', controller.handleVerifyOtp) +route.delete('/:id', controller.handleDeleteById) module.exports = route From a430de50f632e8fcf6ad1fa885599cf6103217c4 Mon Sep 17 00:00:00 2001 From: 1arp Date: Fri, 13 Mar 2020 15:32:37 +0530 Subject: [PATCH 14/22] added validdation --- src/services/sms.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/services/sms.js b/src/services/sms.js index ca21b6a..c8b7a97 100644 --- a/src/services/sms.js +++ b/src/services/sms.js @@ -1,7 +1,7 @@ const axios = require('axios') -module.exports.sendSms = (mobile, messageText) => { - return axios.get('http://sms.smscollection.com/sendsmsv2.asp',{ +module.exports.sendSms = async(mobile, messageText) => { + const response = await axios.get('http://sms.smscollection.com/sendsmsv2.asp',{ params: { user: process.env.MOBILE_VERIFY_USERNAME, password: process.env.MOBILE_VERIFY_PASS, @@ -10,4 +10,8 @@ module.exports.sendSms = (mobile, messageText) => { PhoneNumber: mobile.replace("+", "").replace("-", "") } }) + if(response.data.includes("Message Submitted")) + return response + + throw new Error(response.data) } \ No newline at end of file From 14d73829a2787b47dcd2cae8bc99cfed903ef80b Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Tue, 17 Mar 2020 13:25:10 +0530 Subject: [PATCH 15/22] use port from env --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 927fc03..360edfd 100644 --- a/src/index.js +++ b/src/index.js @@ -7,7 +7,7 @@ const Sentry = require('@sentry/node'); const { dbConnectionReady } = require('services/db') const routes = require('./routes') -const PORT = 5001 +const PORT = process.env.PORT || 5002 Sentry.init({ dsn: process.env.SENTRY_DSN From 8db08c6f1f90f30316c9153bf6ba959367ac71d0 Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Fri, 27 Mar 2020 15:54:18 +0530 Subject: [PATCH 16/22] add morgan and some validations --- package.json | 3 +++ src/index.js | 3 +++ src/routes/otp/controller.js | 10 ++++++++-- yarn.lock | 23 +++++++++++++++++++++++ 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e028079..402ec96 100644 --- a/package.json +++ b/package.json @@ -18,5 +18,8 @@ "mustache": "^4.0.0", "passport": "^0.4.1", "passport-http-bearer": "^1.0.1" + }, + "devDependencies": { + "morgan": "^1.9.1" } } diff --git a/src/index.js b/src/index.js index 360edfd..2f08de8 100644 --- a/src/index.js +++ b/src/index.js @@ -2,6 +2,7 @@ if (process.env.NODE_ENV !== 'production') require('dotenv').config() const express = require('express') +const morgan = require('morgan') const app = express() const Sentry = require('@sentry/node'); const { dbConnectionReady } = require('services/db') @@ -13,6 +14,8 @@ Sentry.init({ dsn: process.env.SENTRY_DSN }) app.use(express.json()) +app.use(morgan('dev')) +app.use((req, res, next) => { console.log(req.body); next() }) app.use(routes) dbConnectionReady.then(() => { diff --git a/src/routes/otp/controller.js b/src/routes/otp/controller.js index 843b295..4886285 100644 --- a/src/routes/otp/controller.js +++ b/src/routes/otp/controller.js @@ -17,7 +17,8 @@ module.exports.handleSendOtp = async (req, res, next) => { // create otp in mongo const { id: createdOtpId, revert } = await createOtp({ type: 'mobile', - mobile: dialCode + mobile, + mobile, + dialCode, message: messageText, otp, payload @@ -68,6 +69,11 @@ module.exports.handleSendOtp = async (req, res, next) => { module.exports.handleVerifyOtp = async (req, res, next) => { const { code } = req.body + + if (req.params.id.length != 24) { + return res.status(404).json(new ResponseError('OTP_NOT_FOUND')) + } + const otp = await getOtpById(req.params.id) if (!otp) { @@ -87,7 +93,7 @@ module.exports.handleVerifyOtp = async (req, res, next) => { } if (otp.verifiedAt) - return res.status(400).json(new ResponseError('ALREADY_VERIFIED', 'the otp is already consumed')) + return res.status(400).json(new ResponseError('ALREADY_VERIFIED', 'the otp is already verified')) // otp is valid and we update the claim await updateOtpById(otp._id, { diff --git a/yarn.lock b/yarn.lock index 9be06b7..29218e4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -240,6 +240,13 @@ axios@^0.19.2: dependencies: follow-redirects "1.5.10" +basic-auth@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== + dependencies: + safe-buffer "5.1.2" + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -737,6 +744,17 @@ mongodb@^3.5.3: optionalDependencies: saslprep "^1.0.0" +morgan@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.1.tgz#0a8d16734a1d9afbc824b99df87e738e58e2da59" + integrity sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA== + dependencies: + basic-auth "~2.0.0" + debug "2.6.9" + depd "~1.1.2" + on-finished "~2.3.0" + on-headers "~1.0.1" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -774,6 +792,11 @@ on-finished@~2.3.0: dependencies: ee-first "1.1.1" +on-headers@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" From 80ba6db1b704389788b051360595c2f42923f3e5 Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Fri, 27 Mar 2020 16:02:57 +0530 Subject: [PATCH 17/22] errors should be sent with correct http code --- src/routes/otp/controller.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/otp/controller.js b/src/routes/otp/controller.js index 4886285..e108381 100644 --- a/src/routes/otp/controller.js +++ b/src/routes/otp/controller.js @@ -32,7 +32,7 @@ module.exports.handleSendOtp = async (req, res, next) => { } catch (err) { sentry.captureException(err) await revert() - return res.json(new ResponseError('SMS_API_ERROR', "Can't send OTP to that number")) + return res.status(400).json(new ResponseError('SMS_API_ERROR', "Can't send OTP to that number")) } } else if (req.body.email) { @@ -59,7 +59,7 @@ module.exports.handleSendOtp = async (req, res, next) => { sentry.captureException(err) // revert DB insert await revert() - return res.json(new ResponseError('EMAIL_API_ERROR', "Can't send OTP to that email")) + return res.status(400).json(new ResponseError('EMAIL_API_ERROR', "Can't send OTP to that email")) } } else { From 8360a6da0d170bde4abe9114a802a795fcd5a05a Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Tue, 31 Mar 2020 23:22:11 +0530 Subject: [PATCH 18/22] fix otp --- src/routes/otp/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/otp/index.js b/src/routes/otp/index.js index afc1023..fef0301 100644 --- a/src/routes/otp/index.js +++ b/src/routes/otp/index.js @@ -9,9 +9,9 @@ route.get('/', validators.POST, (req, res) => { }) route.use(passport.initialize()) -route.use(passport.authenticate('bearer',{session:false})) -route.get('/:id', controller.handleGetById) +route.use(passport.authenticate('bearer', { session: false })) route.post('/send', validators.POST, controller.handleSendOtp) +route.get('/:id', controller.handleGetById) route.post('/:id/verify', controller.handleVerifyOtp) route.delete('/:id', controller.handleDeleteById) From f124edb59f6681f83183db110cc33fbd62c7235e Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Sat, 6 Jun 2020 20:17:18 +0530 Subject: [PATCH 19/22] change sms creds --- src/services/sms.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/services/sms.js b/src/services/sms.js index c8b7a97..c1fcae9 100644 --- a/src/services/sms.js +++ b/src/services/sms.js @@ -1,13 +1,14 @@ const axios = require('axios') module.exports.sendSms = async(mobile, messageText) => { - const response = await axios.get('http://sms.smscollection.com/sendsmsv2.asp',{ + const response = await axios.get('http://transactional.msgadvert.com/http-api.php',{ params: { - user: process.env.MOBILE_VERIFY_USERNAME, + username: process.env.MOBILE_VERIFY_USERNAME, password: process.env.MOBILE_VERIFY_PASS, - sender: 'CDGBLK', - text: messageText, - PhoneNumber: mobile.replace("+", "").replace("-", "") + senderid: 'CDGBLK', + route: 1, + message: messageText, + number: mobile.replace("+", "").replace("-", "") } }) if(response.data.includes("Message Submitted")) From c40382188edc08d57f05fb91ebe624ce971fb30a Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Sat, 6 Jun 2020 20:25:58 +0530 Subject: [PATCH 20/22] fix sms api route --- src/services/sms.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/sms.js b/src/services/sms.js index c1fcae9..112c933 100644 --- a/src/services/sms.js +++ b/src/services/sms.js @@ -6,7 +6,7 @@ module.exports.sendSms = async(mobile, messageText) => { username: process.env.MOBILE_VERIFY_USERNAME, password: process.env.MOBILE_VERIFY_PASS, senderid: 'CDGBLK', - route: 1, + route: 4, message: messageText, number: mobile.replace("+", "").replace("-", "") } From 8ce4117e1541b7b64ae079092dca44544e3cd647 Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Sat, 6 Jun 2020 20:33:47 +0530 Subject: [PATCH 21/22] update route id to the magic number --- src/services/sms.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/sms.js b/src/services/sms.js index 112c933..cd977bf 100644 --- a/src/services/sms.js +++ b/src/services/sms.js @@ -6,7 +6,7 @@ module.exports.sendSms = async(mobile, messageText) => { username: process.env.MOBILE_VERIFY_USERNAME, password: process.env.MOBILE_VERIFY_PASS, senderid: 'CDGBLK', - route: 4, + route: 2, message: messageText, number: mobile.replace("+", "").replace("-", "") } From 553ba2b1834300e42f6e72be9d9bf9a8cb4774dc Mon Sep 17 00:00:00 2001 From: Abhishek Gupta Date: Sat, 6 Jun 2020 20:37:14 +0530 Subject: [PATCH 22/22] use new lame sms --- src/services/sms.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/services/sms.js b/src/services/sms.js index cd977bf..7e04eea 100644 --- a/src/services/sms.js +++ b/src/services/sms.js @@ -11,8 +11,8 @@ module.exports.sendSms = async(mobile, messageText) => { number: mobile.replace("+", "").replace("-", "") } }) - if(response.data.includes("Message Submitted")) - return response + // if(response.data.includes("Message Submitted")) + return response - throw new Error(response.data) + // throw new Error(response.data) } \ No newline at end of file