-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathgithub-auth.js
78 lines (65 loc) · 2.04 KB
/
github-auth.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
var GitHubStrategy = require('passport-github').Strategy
var _ = require('lodash')
module.exports = function (options) {
var seneca = this
var service = 'github'
var params = {
clientID: options.clientID,
clientSecret: options.clientSecret,
callbackURL: options.urlhost + (options.callbackUrl || '/auth/github/callback')
}
params = _.extend(params, options.serviceParams || {})
var authPlugin = new GitHubStrategy(params,
function (accessToken, refreshToken, profile, done) {
seneca.act(
{
role: 'auth',
prepare: 'github_login_data',
accessToken: accessToken,
refreshToken: refreshToken,
profile: profile
}, done)
}
)
var prepareLoginData = function (args, cb) {
var accessToken = args.accessToken
var refreshToken = args.refreshToken
var profile = args.profile
var data = {
identifier: '' + profile.id,
nick: profile.username,
username: profile.username,
credentials: {
access: accessToken,
refresh: refreshToken
},
userdata: profile,
when: new Date().toISOString()
}
data = _.extend({}, data, profile)
if (data.emails && data.emails.length > 0 && data.emails[0].value) {
data.email = data.emails[0].value
data.nick = data.email
}
if (data.name && _.isObject(data.name)) {
data.firstName = data.name.givenName
data.lastName = data.name.familyName
data.name = data.name || (data.firstName + ' ' + data.lastName)
delete data.name
}
data.name = data.name || data.displayName
data[ service + '_id' ] = data.identifier
data.service = data.service || {}
data.service[ service ] = {
credentials: data.credentials,
userdata: data.userdata,
when: data.when
}
cb(null, data)
}
seneca.add({role: 'auth', prepare: 'github_login_data'}, prepareLoginData)
seneca.act({role: 'auth', cmd: 'register_service', service: service, plugin: authPlugin, conf: options})
return {
name: 'github-auth'
}
}