package com.crealytics.google.adwords import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow import com.google.api.client.googleapis.auth.oauth2.GoogleCredential import com.google.api.client.http.javanet.NetHttpTransport import com.google.api.client.json.jackson2.JacksonFactory import com.google.common.collect.Lists class AdWordsAuthHelper(clientId: String, clientSecret: String) { val ADWORDS_API_SCOPE = "https://www.googleapis.com/auth/adwords" private val SCOPES = Lists.newArrayList(ADWORDS_API_SCOPE) private val CALLBACK_URL = "urn:ietf:wg:oauth:2.0:oob" val authorizationFlow: GoogleAuthorizationCodeFlow = new GoogleAuthorizationCodeFlow.Builder( new NetHttpTransport(), new JacksonFactory(), clientId, clientSecret, SCOPES ).setAccessType("offline") .build() val authorizationUrl: String = authorizationFlow.newAuthorizationUrl().setRedirectUri(CALLBACK_URL).build() def getRefreshToken(authorizationCode: String): String = { val tokenRequest = authorizationFlow.newTokenRequest(authorizationCode) tokenRequest.setRedirectUri(CALLBACK_URL) val tokenResponse = tokenRequest.execute() val credential = new GoogleCredential.Builder() .setTransport(new NetHttpTransport()) .setJsonFactory(new JacksonFactory()) .setClientSecrets(clientId, clientSecret) .build() credential.setFromTokenResponse(tokenResponse) credential.getRefreshToken } }