-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathserver.js
64 lines (54 loc) · 1.34 KB
/
server.js
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
const axios = require('axios');
const get = require('lodash.get')
const controller = require('./controller');
function gets(obj, keys) {
let value = ''
if (Array.isArray(keys)) {
keys.some((key) => {
const v = get(obj, key)
if (v) {
value = v;
return true
}
return false
})
} else {
value = get(obj, keys)
}
return value
}
module.exports = function (options) {
const { authServer, infoPath, userKey, emailKey, authArgs } = options;
this.bindHook('third_login', async (ctx) => {
const token = ctx.request.body.token || ctx.request.query.token;
try {
const info = await axios.request({
method: 'get',
baseURL: authServer,
url: infoPath,
params: Object.assign({
access_token: token
}, authArgs)
});
if (info.status === 200) {
return {
username: gets(info.data, userKey),
email: gets(info.data, emailKey)
};
} else {
console.error('third_login.error', info)
throw new Error(`${info.status} ${info.statusText}`)
}
} catch (error) {
throw error
}
});
this.bindHook('add_router', function (addRouter) {
addRouter({
controller: controller,
method: 'get',
path: 'oauth2/callback',
action: 'oauth2Callback'
});
});
}