Skip to content

Commit f57c727

Browse files
authored
fix(Twitter): Use builtin code verifier capability (#457)
1 parent 9499dba commit f57c727

File tree

1 file changed

+3
-33
lines changed

1 file changed

+3
-33
lines changed

Diff for: samples/Twitter.gs

+3-33
Original file line numberDiff line numberDiff line change
@@ -31,21 +31,17 @@ function run() {
3131
*/
3232
function reset() {
3333
getService_().reset();
34-
PropertiesService.getUserProperties().deleteProperty('code_challenge');
35-
PropertiesService.getUserProperties().deleteProperty('code_verifier');
3634
}
3735

3836
/**
3937
* Configures the service.
4038
*/
4139
function getService_() {
42-
pkceChallengeVerifier();
4340
var userProps = PropertiesService.getUserProperties();
4441
return OAuth2.createService('Twitter')
4542
// Set the endpoint URLs.
4643
.setAuthorizationBaseUrl('https://twitter.com/i/oauth2/authorize')
47-
.setTokenUrl(
48-
'https://api.twitter.com/2/oauth2/token?code_verifier=' + userProps.getProperty('code_verifier'))
44+
.setTokenUrl('https://api.twitter.com/2/oauth2/token')
4945

5046
// Set the client ID and secret.
5147
.setClientId(CLIENT_ID)
@@ -61,10 +57,8 @@ function getService_() {
6157
// Set the scopes to request (space-separated for Twitter services).
6258
.setScope('users.read tweet.read offline.access')
6359

64-
// Add parameters in the authorization url
65-
.setParam('response_type', 'code')
66-
.setParam('code_challenge_method', 'S256')
67-
.setParam('code_challenge', userProps.getProperty('code_challenge'))
60+
// Generate code verifier parameter
61+
.generateCodeVerifier()
6862

6963
.setTokenHeaders({
7064
'Authorization': 'Basic ' + Utilities.base64Encode(CLIENT_ID + ':' + CLIENT_SECRET),
@@ -91,27 +85,3 @@ function authCallback(request) {
9185
function logRedirectUri() {
9286
Logger.log(OAuth2.getRedirectUri());
9387
}
94-
95-
/**
96-
* Generates code_verifier & code_challenge for PKCE
97-
*/
98-
function pkceChallengeVerifier() {
99-
var userProps = PropertiesService.getUserProperties();
100-
if (!userProps.getProperty('code_verifier')) {
101-
var verifier = '';
102-
var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';
103-
104-
for (var i = 0; i < 128; i++) {
105-
verifier += possible.charAt(Math.floor(Math.random() * possible.length));
106-
}
107-
108-
var sha256Hash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256, verifier);
109-
110-
var challenge = Utilities.base64Encode(sha256Hash)
111-
.replace(/\+/g, '-')
112-
.replace(/\//g, '_')
113-
.replace(/=+$/, '');
114-
userProps.setProperty('code_verifier', verifier);
115-
userProps.setProperty('code_challenge', challenge);
116-
}
117-
}

0 commit comments

Comments
 (0)