const handleError = require('../utils/handleError') const response = require('../utils/responseHandler') const userModel = require('../model/user.model') const jwt = require('jsonwebtoken') const { validate } = require('../utils/validation') const axios = require('../utils/axios') const qs = require('qs') const convertRole = require('../utils/convertRole') exports.login = handleError(async (req, res) => { const isValid = validate(res, req.body, { username: 'string', password: 'string', }) if (!isValid) return const { username, password } = req.body const user = await axios.post( 'https://api.kemdikbud.go.id:8243/manakses/2.0/auth', qs.stringify({ username, password, }), { 'Content-Type': 'application/x-www-form-urlencoded', } ) if (user.code === 400) { return response.error(res, { code: 400, message: user.message, }) } let cekUser = await userModel.findOne({ user_id: user.id, }) let role = process.env.ENV === 'production' ? user.peran.filter( (e) => convertRole(e.peran.id) === 2020 || convertRole(e.peran.id) === 2021 || convertRole(e.peran.id) === 2022 || convertRole(e.peran.id) === 2023 )[0] : user.peran.filter( (e) => e.peran.id === 2020 || e.peran.id === 2021 || e.peran.id === 2022 || e.peran.id === 2023 )[0] if (!cekUser) { if (process.env.ENV === 'production') { role = { id: convertRole(role.peran.id), nama: role.peran.nama, menu: role.peran.menu, } } 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, isPublic: false, isPrivate: false, }) } else { if ( process.env.ENV === 'production' && cekUser.role.id !== convertRole(role.peran.id) ) { role = { id: convertRole(role.peran.id), nama: role.peran.nama, menu: role.peran.menu, } await userModel.updateOne({ _id: cekUser._id }, { role }) cekUser = await userModel.findById(cekUser._id) } } const accessToken = jwt.sign({ _id: cekUser._id }, process.env.SECRET, { expiresIn: '1d', }) const data = { token: `Bearer ${accessToken}`, user: cekUser, } response.success(res, { message: 'Berhasil Login', data, }) })