const { validation } = require('../../middleware/validation') const axios = require('../../utils/axios') const qs = require('qs') const response = require('../../utils/responseHandler') const userModel = require('../../model/user.model') const { roleDataProduction } = require('../../utils/constanta') const convertRole = require('../../utils/convertRole') const jwt = require('jsonwebtoken') const moment = require('moment') const logModel = require('../../model/log.model') const auth = require('../../middleware/verifyToken') exports.login = [ validation((req) => req.body, { username: { type: 'string', empty: false }, password: { type: 'string', empty: false } }), async (req, res) => { const { username, password } = req.body let userResponse try { userResponse = 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 (userResponse.code === 400) { return response.error(res, { code: 401, message: userResponse.message }) } } catch (e) { return response.error(res, { code: 500, message: e.message }) } let role = userResponse.peran.filter((e) => roleDataProduction.includes(e.peran.id))[0] role.peran.id = convertRole(role.peran.id) let user = await userModel.findOne({ user_id: userResponse.id }) if (!user) { await userModel.create({ user_id: userResponse.id, nama: userResponse.nama, lembaga: role.organisasi, email: userResponse.username, no_hp: userResponse.no_hp, alamat: userResponse.alamat, role: role.peran, isPublic: false, isPrivate: false }) } else { await userModel.findOneAndUpdate({ user_id: userResponse.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 } }) } user = await userModel.findOne({ user_id: userResponse.id }) const accessToken = jwt.sign({ _id: user._id }, process.env.SRU51, { expiresIn: '1d' }) res.cookie('sidali-cookie', accessToken, { httpOnly: true, expires: moment().add(1, 'day').toDate() }) return response.success(res, { message: 'Berhasil Login', data: { token: `Bearer ${accessToken}`, user } }) } ] exports.loginToPT = [ auth, validation((req) => req.body, { lembaga_id: 'string', password: 'string' }), async (req, res) => { let user = req.user const { lembaga_id, password } = req.body try { const userResponse = await axios.post( 'https://api.kemdikbud.go.id:8243/manakses/2.0/auth', qs.stringify({ username: user.email, password }), { 'Content-Type': 'application/x-www-form-urlencoded' } ) if (userResponse.code === 400) { return response.error(res, { code: 401, message: userResponse.message }) } } catch (e) { return response.error(res, { code: 500, message: e.message }) } let dataLembaga try { dataLembaga = await axios.get(`https://api.kemdikbud.go.id:8243/pddikti/1.2/pt/${lembaga_id}`) } catch (e) { return response.error(res, { code: e.response.status, message: e.message }) } 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 } res.cookie('sidali-cookie', accessToken, { httpOnly: true, expires: moment().add(1, 'day').toDate() }) response.success(res, { message: 'Berhasil Login', data }) } ] exports.logout = (req, res) => { res.clearCookie('sidali-cookie') response.success(res, { message: 'Berhasil Logout' }) }