@@ -31,21 +31,17 @@ function run() {
3131 */
3232function reset ( ) {
3333 getService_ ( ) . reset ( ) ;
34- PropertiesService . getUserProperties ( ) . deleteProperty ( 'code_challenge' ) ;
35- PropertiesService . getUserProperties ( ) . deleteProperty ( 'code_verifier' ) ;
3634}
3735
3836/**
3937 * Configures the service.
4038 */
4139function 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) {
9185function 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