router-login.js 2.96 KB
// eslint-disable-next-line global-require
const MODULE_NAME = `CONTROL_PANEL_${require('path').basename(__filename)}`;

const querystring = require('querystring');
const express = require('express');
const bodyParser = require('body-parser');
const logger = require('tektrans-logger');

const router = express.Router();

const config = require('../../config');

const requestToCore = require('./request-to-core');

function pageLogin(req, res) {
    if (req.session && req.session.username && req.session.terminal) {
        res.redirect('/');
        return;
    }

    res.render(
        `${req.app.locals.cp_views_dir}/login.html`,
        {
            ref: req.query.ref,
            msg: req.query.msg,
        },
    );
}

function pageLoginSubmitted(req, res) {
    const methodName = 'pageLoginSubmitted';

    if (!req || !req.body || !req.body.terminal_name || !req.body.password) {
        const qs = {
            msg: 'Nama terminal dan password harus diisi',
            ref: req.query.ref,
        };

        res.redirect(`/login?${querystring.stringify(qs)}`);
        return;
    }

    const qs = {
        terminal_name: req.body.terminal_name,
        web_password: req.body.password,
        request_by: config.handler_name || config.username || config.origin,
    };

    requestToCore.doRequestAndParse('/services/terminalAuthentication', qs, (err, coreResponse) => {
        if (err) {
            logger.warn('Error requesting authentication check to CORE', {
                module_name: MODULE_NAME,
                method_name: methodName,
                err,
            });
            res.end('SOMETHING WRONG');
            return;
        }

        const redirectQs = {
            terminal_name: req.body.terminal_name,
            ref: req.query.ref,
        };

        if (coreResponse.message) {
            redirectQs.msg = coreResponse.message;
        }

        if (coreResponse.error) {
            res.redirect(`/login?${querystring.stringify(redirectQs)}`);
            return;
        }

        if (!coreResponse.terminal) {
            redirectQs.msg = 'Terminal tidak terdefinisi';
            res.redirect(`/login?${querystring.stringify(redirectQs)}`);
            return;
        }

        if (!coreResponse.terminal.super || !coreResponse.terminal.store_is_super) {
            redirectQs.msg = 'Hanya super terminal pada super store yang dapat mengakses sistem.';
            res.redirect(`/login?${querystring.stringify(redirectQs)}`);
            return;
        }

        req.session.username = req.body.terminal_name;
        req.session.terminal = coreResponse.terminal;

        const redirectUrl = req.query.ref || '/';
        res.redirect(redirectUrl);
    });
}

function pageLogout(req, res) {
    req.session.username = null;
    req.session.terminal = null;

    res.redirect('/login');
}

router.get('/', pageLogin);
router.post('/', bodyParser.urlencoded({ extended: true }), pageLoginSubmitted);
router.get('/out', pageLogout);

module.exports = router;