forked from meteor/meteor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoauth1_tests.js
125 lines (112 loc) · 4.18 KB
/
oauth1_tests.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
117
118
119
120
121
122
123
124
125
var testPendingCredential = function (test) {
var http = Npm.require('http');
var twitterfooId = Random.id();
var twitterfooName = 'nickname' + Random.id();
var twitterfooAccessToken = Random.id();
var twitterfooAccessTokenSecret = Random.id();
var twitterOption1 = Random.id();
var credentialToken = Random.id();
var serviceName = Random.id();
var urls = {
requestToken: "https://example.com/oauth/request_token",
authorize: "https://example.com/oauth/authorize",
accessToken: "https://example.com/oauth/access_token",
authenticate: "https://example.com/oauth/authenticate"
};
OAuth1Binding.prototype.prepareRequestToken = function() {};
OAuth1Binding.prototype.prepareAccessToken = function() {
this.accessToken = twitterfooAccessToken;
this.accessTokenSecret = twitterfooAccessTokenSecret;
};
ServiceConfiguration.configurations.insert({service: serviceName});
try {
// register a fake login service
OAuth.registerService(serviceName, 1, urls, function (query) {
return {
serviceData: {
id: twitterfooId,
screenName: twitterfooName,
accessToken: OAuth.sealSecret(twitterfooAccessToken),
accessTokenSecret: OAuth.sealSecret(twitterfooAccessTokenSecret)
},
options: {
option1: twitterOption1
}
};
});
// simulate logging in using twitterfoo
Oauth._storeRequestToken(credentialToken, twitterfooAccessToken);
var req = {
method: "POST",
url: "/_oauth/" + serviceName,
query: {
state: OAuth._generateState('popup', credentialToken),
oauth_token: twitterfooAccessToken,
only_credential_secret_for_test: 1
}
};
var res = new http.ServerResponse(req);
var write = res.write;
var end = res.write;
var respData = "";
res.write = function (data, encoding, callback) {
respData += data;
return write.apply(this, arguments);
};
res.end = function (data) {
respData += data;
return end.apply(this, arguments);
};
OAuthTest.middleware(req, res);
var credentialSecret = respData;
// Test that the result for the token is available
var result = OAuth._retrievePendingCredential(credentialToken,
credentialSecret);
var serviceData = OAuth.openSecrets(result.serviceData);
test.equal(result.serviceName, serviceName);
test.equal(serviceData.id, twitterfooId);
test.equal(serviceData.screenName, twitterfooName);
test.equal(serviceData.accessToken, twitterfooAccessToken);
test.equal(serviceData.accessTokenSecret, twitterfooAccessTokenSecret);
test.equal(result.options.option1, twitterOption1);
// Test that pending credential is removed after being retrieved
result = OAuth._retrievePendingCredential(credentialToken);
test.isUndefined(result);
} finally {
OAuthTest.unregisterService(serviceName);
}
};
Tinytest.add("oauth1 - pendingCredential is stored and can be retrieved (without oauth encryption)", function (test) {
OAuthEncryption.loadKey(null);
testPendingCredential(test);
});
Tinytest.add("oauth1 - pendingCredential is stored and can be retrieved (with oauth encryption)", function (test) {
try {
OAuthEncryption.loadKey(new Buffer([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]).toString("base64"));
testPendingCredential(test);
} finally {
OAuthEncryption.loadKey(null);
}
});
Tinytest.add("oauth1 - duplicate key for request token", function (test) {
var key = Random.id();
var token = Random.id();
var secret = Random.id();
OAuth._storeRequestToken(key, token, secret);
var newToken = Random.id();
var newSecret = Random.id();
OAuth._storeRequestToken(key, newToken, newSecret);
var result = OAuth._retrieveRequestToken(key);
test.equal(result.requestToken, newToken);
test.equal(result.requestTokenSecret, newSecret);
});
Tinytest.add("oauth1 - null, undefined key for request token", function (test) {
var token = Random.id();
var secret = Random.id();
test.throws(function () {
OAuth._storeRequestToken(null, token, secret);
});
test.throws(function () {
OAuth._storeRequestToken(undefined, token, secret);
});
});