nyx_server
Version:
Node内容发布
124 lines (114 loc) • 4.71 kB
JavaScript
var log4js = require('log4js');
var express = require("express");
var authRouter = express.Router();
var http = require("https")
var Promise = require("bluebird");
var crypto = require('crypto')
var logger = log4js.getLogger('Auth');
authRouter.get("/logout" , function(req , res){
res.header("Access-Control-Allow-Origin", "*");
req.session.userinfo = null;
res.json({success:true});
});
authRouter.all("/login" , function(req , res){
res.header("Access-Control-Allow-Origin", "*");
var username = req.body.username;
var password = req.body.password;
var md5sum = crypto.createHash("md5");
var appkey = 'Wq9Rtd';
var auth2token = md5sum.update(username+"|"+password+"|"+appkey).digest('hex');
//console.log(username , password);
var options = {
hostname: "sso.staff.ifeng.com",
port : 443,
path : "/auth2.aspx?userName="+encodeURIComponent(username)+"&password="+encodeURIComponent(password)+"&from=Nyx&fmt=json&token="+encodeURIComponent(auth2token),
method: 'get'
};
var _req = http.request(options, (_res) => {
_res.setEncoding('utf8');
var ret = "";
_res.on('data', (chunk) => {
ret += chunk;
});
_res.on('end', () => {
var s = JSON.parse(ret);
var success = s.doc.ret;
var message = s.doc.msg["#cdata-section"];
if(success == 1){ //登录成功
//获取用户信息
getUserInfo(username).then(function(userInfo){
var userId = userInfo.sAMAccountName;
var userName = userInfo.cn;
var department = userInfo.department;
var mail = userInfo.mail;
var _userInfo = {
userId : userId || -1,
userName : userName || 'unknow',
department : department || 'unknow',
mail:mail || 'unknow'
}
if(username != userId){
logger.info("login error . login id :"+username+" , out id : " + userId+ " , password:"+password);
}
req.session.userinfo = _userInfo;
res.json({success:true , userInfo:_userInfo});
});
}else{
res.json({success:false , message:message})
}
});
});
_req.end();
});
authRouter.all('/**', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
res.header("X-Powered-By",' 3.2.1')
if(req.method=="OPTIONS") res.send(200);/*让options请求快速返回*/
else next();
});
function getErrorMessage(ret){
}
function getUserInfo(uid) {
var tm = Date.now();
var from = "nyxServer";
var key = "dfs90t";
var md5sum = crypto.createHash("md5");
var token4 = md5sum.update(uid + key + tm + from).digest('hex');
var path = "/getUserInfo.aspx?from=nyxServer&tm=" + tm + "&uid=" + uid + "&fmt=json&token4=" + token4;
console.log(path)
return new Promise(function (resolve, reject) {
var options = {
hostname: "sso.staff.ifeng.com",
port: 443,
path: path,
method: 'get'
};
var _req = http.request(options, (_res) => {
_res.setEncoding('utf8');
var ret = "";
_res.on('data', (chunk) => {
ret += chunk;
});
_res.on('end', () => {
var f = new Function("return " + ret); //JSON.parse(ret);
var s = f();
return resolve(s);
})
});
_req.end();
})
}
function getssourlbyDomain() {
var tm = Date.now();
var authurl = "http://172.30.23.80:9100/auth/sso";
var backurl = "http://172.30.23.80:9100/auth/sso";
var from = "nyxServer";
var key = "dfs90t";
var md5sum = crypto.createHash("md5");
var token1 = md5sum.update(from + key + tm + authurl + backurl).digest('hex');
var url = "http://sso.staff.ifeng.com/auth/?from=nyxServer&tm=" + tm + "&authurl=" + authurl + "&backurl=" + backurl + "&token1=" + token1;
return url
}
module.exports = authRouter;