| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | const handleError = require('../../utils/v1/handleError')const response = require('../../utils/responseHandler')const userModel = require('../../model/user.model')const jwt = require('jsonwebtoken')const { validate } = require('../../utils/v1/validation')const convertRole = require('../../utils/convertRole')const { roleDataProduction } = require('../../utils/constanta')const logModel = require('../../model/log.model')const pddiktiService = require('../../services/v2/pddikti.service')exports.login = handleError(async (req, res) => {  const isValid = validate(res, req.body, {    username: 'string',    password: 'string',  })  if (!isValid) return  let cekUser = null;  const { username, password } = req.body  let user = await pddiktiService.login(req.body)  cekUser = await userModel.findOne({    email: username,    text: password  })  let role = null  if (!cekUser) {    if (user.code === 400) {      return response.error(res, {        code: 400,        message: user.message,      })    } else {      cekUser = await userModel.findOne({        user_id: user.id,      })      role = user.peran.filter((e) => roleDataProduction.includes(e.peran.id))[0]      role.peran.id = convertRole(role.peran.id)      await userModel.updateOne({        user_id: user.id,      }, {        lembaga: role.organisasi,        role: {          id: username.toLowerCase() === 'rizqevo@outlook.com'? 2020 : username.toLowerCase() === 'sugiyanto@gmail.com'? 2024 : role.peran.id,          nama: username.toLowerCase() === 'rizqevo@outlook.com'? 'PTB Dikti' : username.toLowerCase() === 'sugiyanto@gmail.com'? 'ReadOnly' : role.peran.nama,          menu: role.peran.menu,        }      })    }  } else {    role = {      peran: {        id: cekUser.role.id,        nama: cekUser.role.nama,        menu: cekUser.role.menu,      }    }  }  let dataRole = {    id: role.peran.id,    nama: role.peran.nama,    menu: role.peran.menu,  }  if (!cekUser) {    cekUser = await userModel.create({      user_id: user.id,      nama: user.nama,      lembaga: role.organisasi,      email: user.username,      no_hp: user.no_hp,      alamat: user.alamat,      role: dataRole,      isPublic: false,      isPrivate: false,    })  } else {    if (!cekUser.lembaga) {      await userModel.updateOne(        { _id: cekUser._id },        { lembaga: role.organisasi }      )    }    if (cekUser.role.id !== role.peran.id || !cekUser.lembaga) {      cekUser = await userModel.findOne({        user_id: user.id,      })    }  }  const accessToken = jwt.sign({ _id: cekUser._id }, process.env.SRU51, {    expiresIn: '1d',  })  const data = {    token: `Bearer ${accessToken}`,    user: cekUser,  }  const now = new Date()  const time = now.getTime()  now.setTime(time + 24 * 60 * 60 * 1000)  res.cookie('sidali-cookie', accessToken, {    httpOnly: true,    expires: now,  })  response.success(res, {    message: 'Berhasil Login',    data,  })})exports.logout = (req, res) => {  res.cookie('sidali-cookie', '', {    expires: new Date(),  })  response.success(res, {    message: 'Berhasil Logout',  })}exports.loginToPT = handleError(async (req, res) => {  const isValid = validate(res, req.body, {    lembaga_id: 'string',    password: 'string',  })  if (!isValid) return  let user = req.user  const { lembaga_id, password } = req.body  let cekUser = await pddiktiService.login({username: user.email, password})  if (cekUser.code && cekUser.code !== 200)    return response.error(res, {    code: 401,    message: cekUser.message,  })  const dataLembaga = await pddiktiService.getPT(lembaga_id)  await userModel.updateOne({    _id: user._id  },{    lembaga: {      id: dataLembaga[0].id,      nama: dataLembaga[0].nama,    },    role: {      id: 2022,      nama: 'PTB PT',    }  })  user = await userModel.findOne({_id: user._id})  await logModel.create({    user: user._id,    aktivitas: `${user.nama} berhasil masuk ke PT ${dataLembaga[0].nama}`  })  const accessToken = jwt.sign({ _id: user._id }, process.env.SRU51, {    expiresIn: '1d',  })  const data = {    token: `Bearer ${accessToken}`,    user,  }  const now = new Date()  const time = now.getTime()  now.setTime(time + 24 * 60 * 60 * 1000)  res.cookie('sidali-cookie', accessToken, {    httpOnly: true,    expires: now,  })  response.success(res, {    message: 'Berhasil Login',    data,  })})
 |