auth.controller.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. const handleError = require('../utils/handleError')
  2. const response = require('../utils/responseHandler')
  3. const userModel = require('../model/user.model')
  4. const jwt = require('jsonwebtoken')
  5. const { validate } = require('../utils/validation')
  6. const axios = require('axios')
  7. const qs = require('qs')
  8. const https = require('https')
  9. exports.login = handleError(async (req, res) => {
  10. const httpsAgent = new https.Agent({
  11. rejectUnauthorized: false,
  12. })
  13. const isValid = validate(res, req.body, {
  14. username: 'string',
  15. password: 'string',
  16. })
  17. if (!isValid) return
  18. const { username, password } = req.body
  19. const data = qs.stringify({
  20. username,
  21. password,
  22. })
  23. const user = await axios.post(
  24. 'https://api.kemdikbud.go.id:8243/manakses/2.0/auth',
  25. data,
  26. {
  27. headers: {
  28. Authorization: `Bearer ${process.env.TOKEN}`,
  29. 'Content-Type': 'application/x-www-form-urlencoded',
  30. Accept: 'application/json',
  31. },
  32. httpsAgent,
  33. }
  34. )
  35. if (user.data.code === 400) {
  36. return response.error(res, {
  37. code: 400,
  38. message: user.data.message,
  39. })
  40. }
  41. const cekUser = await userModel.findOne({
  42. user_id: user.data.id,
  43. })
  44. if (!cekUser) {
  45. await userModel.create({
  46. user_id: user.data.id,
  47. nama: user.data.nama,
  48. lembaga: user.data.peran[0].organisasi.nama,
  49. email: user.data.username,
  50. no_hp: user.data.no_hp,
  51. alamat: user.data.alamat,
  52. isPublic: false,
  53. isPrivate: false,
  54. })
  55. }
  56. const accessToken = jwt.sign({ user_id: user.data.id }, process.env.SECRET, {
  57. expiresIn: '1d',
  58. })
  59. response.success(res, {
  60. message: 'Berhasil Login',
  61. data: {
  62. token: `Bearer ${accessToken}`,
  63. user: user.data,
  64. },
  65. })
  66. })