-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapi.js
executable file
·107 lines (91 loc) · 2.33 KB
/
api.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
var passport = require('passport')
, BearerStrategy = require('passport-http-bearer').Strategy
var User = require('./models/user');
var Token = require('./models/token');
var Client = require('./models/clients');
var scopes = {
'user.me.netID': 'Know your netID',
'user.me.name': 'Know your name',
'user.me.groups': 'Manage groups you are in',
'groups.manage': 'Manage group memberships',
'github': 'See your public GitHub information'
}
passport.use(new BearerStrategy(
function(accessToken, done) {
Token.findOne({token: accessToken}, function(err, token) {
if (err) { return done(err); }
if (!token) { return done(null, false); }
// console.log( token.clientID );
Client.findOne( {id: token.clientID}, function( err, client ) {
User.fetch({netID: token.netID}, function( err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
var info = { client: client.id, scopes: client.scopes };
done(null, user, info);
});
} );
});
}
));
exports.passport = passport;
exports.auth = function(req, res, next) {
passport.authenticate('bearer', { session: false }, function(err, user, info) {
if (err) { return next(err); }
if (!user) { // auth fallback
Client.findOne({ clientID: req.query.client, clientSecret: req.query.secret }, function( err, client ) {
if (err || client == null) {
res.send('Unauthorized')
}
else
{
req.authInfo ={
scopes: client.scopes
};
next();
}
});
}
else
{
next();
}
})(req, res, next);
};
// exports.auth = function( req, res, next ) {
// passport.authenticate('bearer', { session: false }, function( req, res, next ) {
//
// } ), // check with bearer
// }
// function( req, res, next ) {
//
// // console.log( req.query.access_token );
//
// // console.log( req.query.client );
//
// // res.send( 'error' );
//
// // api.passport.authenticate('bearer', { session: false })
// }
// ]
exports.respond = function( res, output ) {
res.json( output );
}
exports.error = function( res, type, message ) {
res.json( {
error: type,
message: message
} );
}
exports.scope_name= function( scope ) {
return scopes[scope];
}
exports.can= function( scope, scopes ) {
if( scopes.indexOf( scope ) == -1 )
{
return false
}
else
{
return true;
}
}