最近打工的地方要求写一个插件给Etherpad-Lite 提供 Radius 的认证方式, 经过筛选后选择了node js 的一个Radius 库, 代码的实现中也有用到node js 的一个async的库作为数据库处理同步的方法。我自己的系统环境是Linux Mint 17, 希望能够为有这方面需求的朋友提供一些方便, 自己以前没有接触过JavaScript也希望大家能够不吝指教。
关于Etherpad-Lite的介绍在 http://etherpad.org/
关于Etherpad-Lite的安装在 https://help.ubuntu.com/community/Etherpad-liteInstallation
关于使用的node js 的两个库分别在 https://github.com/retailnext/node-radius 和 https://github.com/caolan/async
我的Radius认证方式实在Etherpad-Lite的插件user_pad和user_pad_frontend上实现的。其实我只是做了以下的修改:
I. Radius 库函数, 主要是为了让返回值为数字, 不知道是我自己处理错误还是怎样,返回字符时候总是出错.
Original:
//var ret = {};
//ret.code = code_map[packet.readUInt8(0)];
Changed:
var ret = {};
ret.code = packet.readUInt8(0);
II. 插件user_pad_frontend中的hooks.js 和 register.js
hooks.js 中主要是改了registerUser, login, 和 userAthentication方法。
1. registerUser,
由于我们没有register的需求,所以我把这一部分邮件注册的功能删除了。由于我们的Radius数据库在LDAP中,我们Etherpad-Lite只是来保存用户名,密码没有要求,只要Radius认证成功,就在数据库中创建用户,让后默认其他属性。更改后的代码如下:
//register user who are not in database
var registerUser = function (user, cb) {
var existUser = "SELECT * from User where User.name = ?";
var retValue = existValueInDatabase(existUser, [user.email], function (exists) {
if (exists) {
//cb(false, USER_EXISTS);
cb(tru