admin/index.js

  1. /* ============================================================================ *\
  2. || ########################################################################## ||
  3. || # Auction Software Marketplace Release: 0.6 Build 0.7 # ||
  4. || # ---------------------------------------------------------------------- # ||
  5. || # License # 35YAHCNR9344X6O666C123AB # ||
  6. || # ---------------------------------------------------------------------- # ||
  7. || # Copyright ©2014–2021 Develop Scripts LLC. All Rights Reserved # ||
  8. || # This file may not be redistributed in whole or significant part. # ||
  9. || # ------------- AUCTION SOFTWARE IS NOT FREE SOFTWARE ------------------ # ||
  10. || # http://www.auctionsoftwaremarketplace.com|support@auctionsoftware.com # ||
  11. || # ---------------------------------------------------------------------- # ||
  12. || ########################################################################## ||
  13. \* ============================================================================ */
  14. const express = require('express')
  15. const config = require('config').get('JwtToken')
  16. const fs = require('fs')
  17. const morgan = require('morgan')
  18. const path = require('path')
  19. const jwt = require('jsonwebtoken')
  20. const communication = require('./routes/communication')
  21. const product = require('./routes/product')
  22. const userProduct = require('../front/routes/product')
  23. const user = require('./routes/user')
  24. const admin = require('./routes/admin')
  25. const auction = require('./routes/auction')
  26. const invoice = require('./routes/invoice')
  27. const returnAPI = require('./routes/return')
  28. const report = require('./routes/report')
  29. const employee = require('./routes/employee')
  30. const refund = require('./routes/refund')
  31. const transaction = require('./routes/transaction')
  32. const setting = require('./routes/setting')
  33. const adminModule = require('./modules/admin').default
  34. // const { CustomStatusError } = require('../../middleware/custom_error')
  35. // const checkIPValidation = require('../../middleware/ip_whitelist');
  36. const { accessLogStream, jsonResponse } = require('./controllers/logger')
  37. // const checkip = new checkIPValidation();
  38. const app = express.Router()
  39. app.use(
  40. morgan(':remote-addr - :remote-user [:date[web]] ":method :url HTTP/:http-version" :reqbody', {
  41. immediate: true,
  42. stream: accessLogStream,
  43. }),
  44. )
  45. app.use(
  46. morgan(':status :res[content-length] - :response-time ms"', {
  47. immediate: false,
  48. stream: accessLogStream,
  49. }),
  50. )
  51. app.use(
  52. morgan(
  53. ':remote-addr - :remote-user [:date[web]] ":method :url HTTP/:http-version" :status :res[header] :req[header] - :response-time ms ":referrer" ":user-agent" :reqbody',
  54. {
  55. stream: fs.createWriteStream(
  56. path.join(__dirname, '../../../../public/logs/api/error/access.log'),
  57. { flags: 'a' },
  58. ),
  59. skip(req, res) {
  60. return res.statusCode < 400
  61. },
  62. },
  63. ),
  64. )
  65. const NotAuthenticated = async (req, res, next) => {
  66. const bearerHeader = req.headers.authorization
  67. if (typeof bearerHeader !== 'undefined') {
  68. const bearer = bearerHeader.split(' ')
  69. const bearerToken = bearer[1]
  70. try {
  71. const decoded = await jwt.verify(bearerToken, config.get('secret'))
  72. req.token = bearerToken
  73. const [results] = await Promise.all([adminModule.userDetails(decoded.id)])
  74. const [userValue] = results
  75. req.user = userValue
  76. return next()
  77. } catch (err) {
  78. jsonResponse(res, 'error', {
  79. responseType: 403,
  80. message: 'Session timed out!',
  81. })
  82. return false
  83. }
  84. // finally {
  85. // let ipvalidated = checkip.checkIpValidation(req);
  86. // if(ipvalidated[0]){
  87. // next();
  88. // } else {
  89. // throw new CustomStatusError('IP '+ipvalidated[1]+' is not whitelisted', 403);
  90. // }
  91. // }
  92. } else {
  93. return next()
  94. }
  95. }
  96. const Authenticated = async (req, res, next) => {
  97. if (
  98. req.originalUrl === '/api/admin/checkValidation' ||
  99. req.originalUrl === '/api/admin/login' ||
  100. req.originalUrl === '/api/admin/forgotPassword' ||
  101. req.originalUrl === '/api/admin/resetPassword' ||
  102. req.originalUrl === '/api/common/getDefault'
  103. ) {
  104. return next()
  105. }
  106. const bearerHeader = req.headers.authorization
  107. if (typeof bearerHeader !== 'undefined') {
  108. const bearer = bearerHeader.split(' ')
  109. const bearerToken = bearer[1]
  110. try {
  111. const decoded = await jwt.verify(bearerToken, config.get('secret'))
  112. req.token = bearerToken
  113. const [results] = await Promise.all([adminModule.userDetails(decoded.admin_id)])
  114. const [userValue] = results
  115. userValue.admin_id = userValue.id
  116. delete userValue.id
  117. req.user = userValue
  118. return next()
  119. } catch (err) {
  120. jsonResponse(res, 'error', {
  121. responseType: 403,
  122. message: 'Session timed out!',
  123. })
  124. return false
  125. }
  126. // finally {
  127. // let ipvalidated = checkip.checkIpValidation(req);
  128. // if(ipvalidated[0]){
  129. // next();
  130. // } else {
  131. // throw new CustomStatusError('IP '+ipvalidated[1]+' is not whitelisted', 403);
  132. // }
  133. // }
  134. } else {
  135. jsonResponse(res, 'error', {
  136. responseType: 403,
  137. message: 'No Bearer Token Available!',
  138. })
  139. return false
  140. }
  141. }
  142. const AuthenticatedWithUser = async (req, res, next) => {
  143. const bearerHeader = req.headers.authorization
  144. if (typeof bearerHeader !== 'undefined' && req.body.user_id) {
  145. const bearer = bearerHeader.split(' ')
  146. const bearerToken = bearer[1]
  147. try {
  148. const decoded = await jwt.verify(bearerToken, config.get('secret'))
  149. req.token = bearerToken
  150. const [results] = await Promise.all([adminModule.userDetails(decoded.admin_id)])
  151. const [userValue] = results
  152. userValue.admin_id = userValue.id
  153. userValue.id = req.body.user_id
  154. req.user = userValue
  155. return next()
  156. } catch (err) {
  157. jsonResponse(res, 'error', {
  158. responseType: 403,
  159. message: 'Session timed out!',
  160. })
  161. return false
  162. }
  163. // finally {
  164. // let ipvalidated = checkip.checkIpValidation(req);
  165. // if(ipvalidated[0]){
  166. // next();
  167. // } else {
  168. // throw new CustomStatusError('IP '+ipvalidated[1]+' is not whitelisted', 403);
  169. // }
  170. // }
  171. } else if (req.body.user_id) {
  172. jsonResponse(res, 'error', {
  173. responseType: 403,
  174. message: 'No Bearer Token Available!',
  175. })
  176. return false
  177. } else {
  178. jsonResponse(res, 'error', {
  179. responseType: 403,
  180. message: 'No User ID Available!',
  181. })
  182. return false
  183. }
  184. }
  185. /**
  186. * Operations for Admin side.
  187. *
  188. * @namespace adminside
  189. */
  190. app.use('/', Authenticated, admin)
  191. app.use('/communication', Authenticated, communication)
  192. app.use('/product', Authenticated, product)
  193. app.use('/user/product', AuthenticatedWithUser, userProduct)
  194. app.use('/user', Authenticated, user)
  195. app.use('/auction', Authenticated, auction)
  196. app.use('/invoice', Authenticated, invoice)
  197. app.use('/return', Authenticated, returnAPI)
  198. app.use('/report', Authenticated, report)
  199. app.use('/refund', Authenticated, refund)
  200. app.use('/employee', Authenticated, employee)
  201. app.use('/transaction', Authenticated, transaction)
  202. app.use('/setting', Authenticated, setting)
  203. module.exports = app