-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathunderarmour_server.js
116 lines (96 loc) · 3.41 KB
/
underarmour_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
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
108
109
110
111
112
113
114
115
116
var Future = Npm.require('fibers/future');
var request = Npm.require('request')
UnderArmour = {};
OAuth.registerService('underArmour', 2, null, function(query, callback) {
var accessToken= getTokenResponse(query)
var userData = getUserData(accessToken.access_token)
var serviceData = {
accessToken: accessToken.access_token,
refresgToken: accessToken.refresh_token,
expiresAt: accessToken.expires_in,
id: userData.id
};
// include fields from underarmour
// https://developer.underarmour.com/io-docs
var whitelisted = ['username', 'location.country', 'gender', 'birthday', 'email', 'display_name'];
var fields = _.pick(userData, whitelisted);
_.extend(serviceData, fields);
return {
serviceData: serviceData,
options: {profile: {name: userData.first_name, email: userData.email, fullName: userData.display_name, gender: userData.gender, location: userData.location.country}}
};
});
var userAgent = "Meteor";
if (Meteor.release)
userAgent += "/" + Meteor.release;
// returns an object containing:
// - accessToken
// - expiresIn: lifetime of token in seconds
var getTokenResponse = function (query) {
var config = ServiceConfiguration.configurations.findOne({service: 'underArmour'});
if (!config)
throw new ServiceConfiguration.ConfigError();
var request_params = {
grant_type: "authorization_code",
code: query.code,
client_id: config.client_id,
client_secret: OAuth.openSecret(config.secret),
redirect_uri: OAuth._redirectUri('underArmour', config)
//redirect_uri: OAuth._redirectUri('underarmour', config, null, {replaceLocalhost: true})
};
var paramlist = [];
for (var pk in request_params) {
paramlist.push(pk + "=" + request_params[pk]);
};
var body_string = paramlist.join("&");
var request_details = {
method: "POST",
headers: {'content-type' : 'application/x-www-form-urlencoded', 'Api-Key' : config.client_id},
uri: 'https://api.ua.com/v7.0/oauth2/uacf/access_token/',
body: body_string
};
var fut = new Future();
request(request_details, function(error, response, body) {
var responseContent;
try {
responseContent = JSON.parse(body);
} catch(e) {
error = new Meteor.Error(204, 'Response is not a valid JSON string.');
fut.throw(error);
} finally {
fut.return(responseContent);
}
});
var res = fut.wait();
return res;
};
////////////////////////////////////////////////
// We need to first fetch the UserID
////////////////////////////////////////////////
var getUserData = function (accessToken) {
var config = ServiceConfiguration.configurations.findOne({service: 'underArmour'});
if (!config)
throw new ServiceConfiguration.ConfigError();
var fut = new Future();
var request_user = {
method: 'GET',
headers: {'Authorization' : 'Bearer ' + accessToken, 'Api-Key' : config.client_id},
uri: "https://oauth2-api.mapmyapi.com/v7.0/user/self/"
};
request(request_user, function(error, response, body) {
var responseContent;
try {
responseContent = JSON.parse(body);
} catch(e) {
error = new Meteor.Error(204, 'Response is not a valid JSON string.');
fut.throw(error);
} finally {
fut.return(responseContent);
}
});
var userRes = fut.wait();
return userRes;
};
UnderArmour.retrieveCredential = function(credentialToken, credentialSecret) {
return OAuth.retrieveCredential(credentialToken, credentialSecret);
};