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 axios = require('../../utils/axios') const qs = require('qs') const convertRole = require('../../utils/convertRole') const { roleData, roleDataProduction } = require('../../utils/constanta') const logModel = require('../../model/log.model') const ip = require('ip') const osValue = require('../../utils/osValue') 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 axios.post( 'https://api.kemdikbud.go.id:8243/manakses/2.0/auth', qs.stringify({ username, password, }), { 'Content-Type': 'application/x-www-form-urlencoded', } ) 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: role.peran.id, nama: role.peran.nama, menu: role.peran.menu, } }) } } else { role = { peran: { id: cekUser.role.id, nama: cekUser.role.nama, menu: cekUser.role.menu, } } } //if (process.env.ENV === 'production') { /*} else { role = user.peran.filter((e) => roleData.includes(e.peran.id))[0] }*/ 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 (process.env.ENV === 'production') { // if (cekUser.role.id !== role.peran.id) { // await userModel.updateOne({ _id: cekUser._id }, { role: dataRole }) // } 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 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 (cekUser && cekUser.code === 400) return response.error(res, { code: 400, message: 'password salah', }) const dataLembaga = await axios.get(`https://api.kemdikbud.go.id:8243/pddikti/1.2/pt/${lembaga_id}`) // const dataUser = await userModel.findOne({ // 'lembaga.id': lembaga_id // }) // // if (!dataUser) return response.error(res, { // code: 400, // message: 'lembaga tidak ditemukan', // }) // const lembaga = dataUser.lembaga // const role = dataUser.role 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, }) })