1 Star 0 Fork 0

flameleo11 / nodebb-plugin-code-autologin

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
library.js 2.75 KB
一键复制 编辑 原始数据 按行查看 历史
Martín M 提交于 2021-03-22 12:03 . catch endpoint exceptions
'use strict';
const axios = require('axios');
const winston = require.main.require('winston');
const user = require.main.require('./src/user');
const meta = require.main.require('./src/meta');
const controllers = require('./lib/controllers');
const authentication = require.main.require('./src/controllers/authentication.js');
const plugin = {};
let settings;
plugin.init = async (params) => {
const { router, middleware } = params;
const routeHelpers = require.main.require('./src/routes/helpers');
/** GET PLUGIN SETTINGS */
settings = await meta.settings.get('code-autologin')
/** IF ENABLED, INITIALIZE AUTOLOGIN ROUTE */
if (settings['autologin-enabled'] === 'on') {
routeHelpers.setupPageRoute(router, '/autologin/:code', middleware, [autologinRoute], (req, res) => {
// res.sendStatus(200);
});
}
/** ADMIN PAGE FOR PLUGIN SETUP */
routeHelpers.setupAdminPageRoute(router, '/admin/plugins/code-autologin', middleware, [], controllers.renderAdminPage);
};
/*****************************************************************************
* AUTOLOGIN ROUTE
* Converts a CODE to a EMAIL by calling a custom endpoint
*************************************************************************** */
const autologinRoute = async (req, res, next) => {
const { code } = req.params;
const endpoint = settings['endpoint'];
let status;
let email;
/** CALL ENDPOINT WITH CODE AND EXPECT AN EXISTING EMAIL ADDRESS */
try {
const { data } = await axios.get(`${endpoint}?code=${code}`);
({ status, email } = data);
} catch (error) {
winston.info(`Autologin: request failed using code ${code}`);
return res.sendStatus(404);
}
/** CHECK FOR A VALID RESPONSE */
if (status !== 'ok' || email === '') {
return res.sendStatus(404);
}
/** TRIES TO AUTHENTICATE RETURNED EMAIL */
user.getUidByEmail(email, function (err, uid) {
if (!uid) {
return res.sendStatus(404);
}
authentication.doLogin(req, uid, function (err) {
if (err) {
res.statusCode = 500;
res.end('Error: ' + err);
return winston.error(`Autologin: Could not log in: ${err}`);
}
winston.info(`Autologin: successfully logged uid ${uid}, redirect to home`);
res.setHeader('Location', '/');
res.statusCode = 302;
res.end();
});
});
setImmediate(next);
}
/*****************************************************************************
* ADDS PLUGIN SETTINGS IN ADMIN DASHBOARD
*************************************************************************** */
plugin.addAdminNavigation = function (header, callback) {
header.plugins.push({
route: '/plugins/code-autologin',
icon: 'fa-unlock',
name: 'Code Autologin',
});
callback(null, header);
};
module.exports = plugin;
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/flameleo11/nodebb-plugin-code-autologin.git
git@gitee.com:flameleo11/nodebb-plugin-code-autologin.git
flameleo11
nodebb-plugin-code-autologin
nodebb-plugin-code-autologin
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891