PageRenderTime 25ms CodeModel.GetById 29ms RepoModel.GetById 1ms app.codeStats 0ms

/src/fireedge/src/server/routes/api/auth/functions.js

https://github.com/OpenNebula/one
JavaScript | 132 lines | 78 code | 12 blank | 42 comment | 12 complexity | 7966341a1a710bee57c0e50bbfd1b37b MD5 | raw file
  1. /* ------------------------------------------------------------------------- *
  2. * Copyright 2002-2022, OpenNebula Project, OpenNebula Systems *
  3. * *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may *
  5. * not use this file except in compliance with the License. You may obtain *
  6. * a copy of the License at *
  7. * *
  8. * http://www.apache.org/licenses/LICENSE-2.0 *
  9. * *
  10. * Unless required by applicable law or agreed to in writing, software *
  11. * distributed under the License is distributed on an "AS IS" BASIS, *
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
  13. * See the License for the specific language governing permissions and *
  14. * limitations under the License. *
  15. * ------------------------------------------------------------------------- */
  16. const { Map } = require('immutable')
  17. const {
  18. login,
  19. setUser,
  20. setPass,
  21. setType,
  22. setTfaToken,
  23. setRemember,
  24. setNext,
  25. setRes,
  26. setNodeConnect,
  27. connectOpennebula,
  28. updaterResponse,
  29. } = require('server/routes/api/auth/utils')
  30. const { defaults, httpCodes } = require('server/utils/constants')
  31. const { Actions } = require('server/utils/constants/commands/user')
  32. const {
  33. getDefaultParamsOfOpennebulaCommand,
  34. } = require('server/utils/opennebula')
  35. const { writeInLogger } = require('server/utils/logger')
  36. const { internalServerError, unauthorized } = httpCodes
  37. const { httpMethod, defaultEmptyFunction } = defaults
  38. const { GET } = httpMethod
  39. /**
  40. * Login user.
  41. *
  42. * @param {error} err - run if no have user data
  43. * @param {string} value - opennebula information
  44. * @param {Function} success - success
  45. * @param {Function} error - error
  46. */
  47. const loginUser = (
  48. err = '',
  49. value = '',
  50. success = defaultEmptyFunction,
  51. error = defaultEmptyFunction
  52. ) => {
  53. if (value && value.USER && !err) {
  54. success(value)
  55. } else {
  56. error(err)
  57. }
  58. }
  59. /**
  60. * Fireedge user auth.
  61. *
  62. * @param {object} res - http response
  63. * @param {Function} next - express stepper
  64. * @param {object} params - params of http request
  65. * @param {object} userData - user of http request
  66. * @param {Function} oneConnection - function of xmlrpc
  67. */
  68. const auth = (
  69. res = {},
  70. next = defaultEmptyFunction,
  71. params = {},
  72. userData = {},
  73. oneConnection = defaultEmptyFunction
  74. ) => {
  75. const { user, token, type, token2fa, remember } = params
  76. setRes(res)
  77. setNext(next)
  78. setNodeConnect(oneConnection)
  79. updaterResponse(new Map(internalServerError).toObject())
  80. if (user && token) {
  81. const oneConnect = connectOpennebula(user, token)
  82. /**
  83. * Run if have information.
  84. *
  85. * @param {object} oneValue - opennebula value
  86. */
  87. const success = (oneValue) => {
  88. setUser(user || '')
  89. setPass(token || '')
  90. setType(type || '')
  91. setTfaToken(token2fa || '')
  92. setRemember(remember || false)
  93. login(oneValue)
  94. }
  95. /**
  96. * Catch error login.
  97. *
  98. * @param {string} err - error.
  99. */
  100. const error = (err) => {
  101. const httpCodeError = err ? internalServerError : unauthorized
  102. updaterResponse(new Map(httpCodeError).toObject())
  103. writeInLogger(httpCodeError)
  104. next()
  105. }
  106. oneConnect({
  107. action: Actions.USER_INFO,
  108. parameters: getDefaultParamsOfOpennebulaCommand(Actions.USER_INFO, GET),
  109. callback: (err, value) => {
  110. loginUser(err, value, success, error)
  111. },
  112. fillHookResource: false,
  113. })
  114. } else {
  115. next()
  116. }
  117. }
  118. module.exports = {
  119. auth,
  120. }