-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathserver.js
More file actions
36 lines (35 loc) · 1.32 KB
/
server.js
File metadata and controls
36 lines (35 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const request = require('request');
const parseString = require('xml2js').parseString;
module.exports = function (options) {
const { AUTH_SERVER, emailPostfix } = options
this.bindHook('third_login', (ctx) => {
let ticket = ctx.request.body.ticket || ctx.request.query.ticket;
let requestUrl = ctx.request.protocol + '://' + ctx.request.host + ctx.request.path;
let validateUrl = AUTH_SERVER + '?service=' + encodeURIComponent(requestUrl) + '&ticket=' + ticket;
return new Promise((resolve, reject) => {
request.get(validateUrl, function(error, response, body) {
if (!error && response.statusCode == 200) {
parseString(body, function(error, result) {
if (error) {
reject(error);
} else {
result = result['cas:serviceResponse'];
if(result['cas:authenticationFailure']) {
reject(result['cas:authenticationFailure'][0]);
} else {
result = result['cas:authenticationSuccess'][0];
let username = result['cas:user'][0]
resolve({
email: username + emailPostfix,
username: username
})
}
}
})
} else {
reject(error);
}
})
})
});
}