{"info":{"_postman_id":"3b309b81-f0f0-4e84-87e4-b6192d35cd61","name":"2FA App","description":"<html><head></head><body><p><strong>Project Description:</strong></p>\n<p>This Postman collection provides a set of API endpoints for user authentication and management using MongoDB as the database and OTPAuth for generating and validating One-Time Passwords (OTP). The collection includes routes for user registration, login, OTP generation, verification, validation, and disabling.</p>\n<p>The collection utilizes the Express.js framework for building the API endpoints and the OTPAuth library for handling the generation and validation of OTPs. The backend is built to work with a MongoDB database to store user information and OTP-related data.  </p>\n<p>NOTE: Authentication(Login and Registration Not fully implemented, emphasis is on the 2FA)</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"22824646","collectionId":"3b309b81-f0f0-4e84-87e4-b6192d35cd61","publishedId":"2s9Xy2QsPE","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2023-08-10T03:17:13.000Z"},"item":[{"name":"Register User","id":"7b28d38f-7c76-4261-9965-a4c1b77b25d5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n     \"name\": \"Testman\",\r\n      \"email\" :\"testman@gmail.com\",\r\n      \"password\": \"hashedPassword\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://twofa-with-authenticator.onrender.com/api/auth/register","description":"<p><code>POST /register</code>: Register a new user by providing the user's name, email, and password. If successful, the user is added to the database.</p>\n","urlObject":{"protocol":"https","path":["api","auth","register"],"host":["twofa-with-authenticator","onrender","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"7b28d38f-7c76-4261-9965-a4c1b77b25d5"},{"name":"login User","id":"0c385ade-1d92-4a24-9e69-07c8c739213f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n      \"email\" :\"testman@gmail.com\",\r\n      \"password\": \"hashedPassword\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://twofa-with-authenticator.onrender.com/api/auth/login","description":"<p><code>POST /login</code>: Log in a user by providing their email and password. If the login is successful, user details are returned, including OTP status.</p>\n","urlObject":{"protocol":"https","path":["api","auth","login"],"host":["twofa-with-authenticator","onrender","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"0c385ade-1d92-4a24-9e69-07c8c739213f"},{"name":"Generate Otp","id":"9eef6bb7-0f5d-41e6-97b4-3179397ef1de","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://twofa-with-authenticator.onrender.com/api/auth/otp/generate?user_id=64d45c9fa479a13a55ac3937","description":"<p><code>POST /otp/generate</code>: Generate an OTP for a user. The generated OTP is associated with the user and a QR code is generated for adding the OTP to an authenticator app.</p>\n","urlObject":{"protocol":"https","path":["api","auth","otp","generate"],"host":["twofa-with-authenticator","onrender","com"],"query":[{"key":"user_id","value":"64d45c9fa479a13a55ac3937"}],"variable":[]}},"response":[{"id":"13e8171b-dcdd-4398-855d-cef49ad43047","name":"200","originalRequest":{"method":"GET","header":[],"url":{"raw":"localhost:3000/api/auth/otp/generate?user_id=64d3d87b0a9aa1a5e724c9cd","host":["localhost"],"port":"3000","path":["api","auth","otp","generate"],"query":[{"key":"user_id","value":"64d3d87b0a9aa1a5e724c9cd"}]}},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"text/html; charset=utf-8"},{"key":"Content-Length","value":"4897"},{"key":"ETag","value":"W/\"1321-aEwTF0sWNFSMvje8/RT90qFJCwY\""},{"key":"Date","value":"Thu, 10 Aug 2023 02:36:45 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"<!DOCTYPE html>\n<html lang=\"en\">\n    <head>\n        <meta charset=\"UTF-8\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n        <title>Generate OTP</title>\n    </head>\n    <body>\n        <div id=\"qr-container\">\n            <img id=\"qr-code\" src=\"data:image/png;base64,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\" alt=\"QR Code\">\r\n  \n        </div>\n        <p>Base32 Secret: \n            <span>AHMG4NBEQMXOVU2GSEFYGIUK</span>\n        </p>\n        <p>OTP Auth URL: \n            <span>otpauth://totp/Ravebooking:Ravebooking%20splashray?issuer=Ravebooking&amp;secret=AHMG4NBEQMXOVU2GSEFYGIUK&amp;algorithm=SHA1&amp;digits=6&amp;period=15</span>\n        </p>\n    </body>\n</html>"}],"_postman_id":"9eef6bb7-0f5d-41e6-97b4-3179397ef1de"},{"name":"Verify Otp","id":"16b8b7df-d941-4b2a-897f-4d658d0b730c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"user_id\": \"64d45c9fa479a13a55ac3937\",\r\n    \"token\": \"520823\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://twofa-with-authenticator.onrender.com/api/auth/otp/verify","description":"<p><code>POST /otp/verify</code>: Verify an OTP provided by the user. If the OTP is valid, the user's OTP status is updated.</p>\n","urlObject":{"protocol":"https","path":["api","auth","otp","verify"],"host":["twofa-with-authenticator","onrender","com"],"query":[],"variable":[]}},"response":[{"id":"5321f919-b324-4e69-9260-a9460cd1a610","name":"200","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"user_id\": \"64d3d87b0a9aa1a5e724c9cd\",\r\n    \"token\": \"643774\"\r\n}","options":{"raw":{"language":"json"}}},"url":"localhost:3000/api/auth/otp/verify"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"139"},{"key":"ETag","value":"W/\"8b-gAeXycDjFX+3XrRQx3WkVt4RaXs\""},{"key":"Date","value":"Wed, 09 Aug 2023 20:02:56 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"otp_verified\": true,\n    \"user\": {\n        \"id\": \"64d3d87b0a9aa1a5e724c9cd\",\n        \"name\": \"splashray\",\n        \"email\": \"Splashraycreations@gmail.com\",\n        \"otp_enabled\": true\n    }\n}"}],"_postman_id":"16b8b7df-d941-4b2a-897f-4d658d0b730c"},{"name":"Validate Otp","id":"18ba9a60-86ad-4fd5-ae2e-dab981c3364c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"user_id\": \"64d45c9fa479a13a55ac3937\",\r\n    \"token\": \"482702\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://twofa-with-authenticator.onrender.com/api/auth/otp/validate","description":"<p><code>POST /otp/validate</code>: Validate an OTP provided by the user. The validation window is extended to allow for minor time discrepancies.</p>\n","urlObject":{"protocol":"https","path":["api","auth","otp","validate"],"host":["twofa-with-authenticator","onrender","com"],"query":[],"variable":[]}},"response":[{"id":"76b96fa0-1a52-4aa1-9548-e95405ca6579","name":"200","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"user_id\": \"64d3d87b0a9aa1a5e724c9cd\",\r\n    \"token\": \"013603\"\r\n}","options":{"raw":{"language":"json"}}},"url":"localhost:3000/api/auth/otp/validate"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"X-Powered-By","value":"Express"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Content-Length","value":"56"},{"key":"ETag","value":"W/\"38-4S5Y8ESvcF71Bpn9dAG4Z0cRdj8\""},{"key":"Date","value":"Wed, 09 Aug 2023 20:08:38 GMT"},{"key":"Connection","value":"keep-alive"},{"key":"Keep-Alive","value":"timeout=5"}],"cookie":[],"responseTime":null,"body":"{\n    \"otp_valid\": true,\n    \"message\": \"Otp verified successfully\"\n}"}],"_postman_id":"18ba9a60-86ad-4fd5-ae2e-dab981c3364c"},{"name":"Disable Otp","id":"4081e3cb-f1f4-4880-bf87-329d24a2c89b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"user_id\": \"64d45c9fa479a13a55ac3937\",\r\n    \"token\": \"345979\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://twofa-with-authenticator.onrender.com/api/auth/otp/disable","description":"<p><code>POST /otp/disable</code>: Disable OTP for a user.</p>\n","urlObject":{"protocol":"https","path":["api","auth","otp","disable"],"host":["twofa-with-authenticator","onrender","com"],"query":[],"variable":[]}},"response":[{"id":"23af1466-aadd-412e-886c-b36b89edab88","name":"200","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"user_id\": \"64d45c9fa479a13a55ac3937\",\r\n    \"token\": \"345979\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://twofa-with-authenticator.onrender.com/api/auth/otp/disable"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 10 Aug 2023 03:47:04 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"CF-Ray","value":"7f45415dedfb0b5c-AMS"},{"key":"CF-Cache-Status","value":"DYNAMIC"},{"key":"ETag","value":"W/\"9f-ohVutAJK+caSol9mTpEFmGwr61E\""},{"key":"Vary","value":"Accept-Encoding"},{"key":"x-powered-by","value":"Express"},{"key":"x-render-origin-server","value":"Render"},{"key":"Server","value":"cloudflare"},{"key":"Content-Encoding","value":"br"},{"key":"alt-svc","value":"h3=\":443\"; ma=86400"}],"cookie":[],"responseTime":null,"body":"{\n    \"otp_disabled\": true,\n    \"message\": \"Otp disabled successfully\",\n    \"user\": {\n        \"id\": \"64d45c9fa479a13a55ac3937\",\n        \"name\": \"Seyi\",\n        \"email\": \"seyi@gmail.com\",\n        \"otp_enabled\": false\n    }\n}"}],"_postman_id":"4081e3cb-f1f4-4880-bf87-329d24a2c89b"}]}