GraniteApi.java 3.57 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  org.scribe.builder.api.DefaultApi20
 *  org.scribe.extractors.AccessTokenExtractor
 *  org.scribe.extractors.JsonTokenExtractor
 *  org.scribe.model.OAuthConfig
 *  org.scribe.model.OAuthRequest
 *  org.scribe.model.Response
 *  org.scribe.model.Token
 *  org.scribe.model.Verb
 *  org.scribe.model.Verifier
 *  org.scribe.oauth.OAuth20ServiceImpl
 *  org.scribe.oauth.OAuthService
 *  org.scribe.utils.OAuthEncoder
 */
package com.adobe.granite.auth.oauth.impl;

import org.scribe.builder.api.DefaultApi20;
import org.scribe.extractors.AccessTokenExtractor;
import org.scribe.extractors.JsonTokenExtractor;
import org.scribe.model.OAuthConfig;
import org.scribe.model.OAuthRequest;
import org.scribe.model.Response;
import org.scribe.model.Token;
import org.scribe.model.Verb;
import org.scribe.model.Verifier;
import org.scribe.oauth.OAuth20ServiceImpl;
import org.scribe.oauth.OAuthService;
import org.scribe.utils.OAuthEncoder;

public class GraniteApi
extends DefaultApi20 {
    private String authorizationUrl;
    private String tokenUrl;
    private static final String AUTHORIZE_URL = "?client_id=%s&redirect_uri=%s&response_type=code";
    private static final String SCOPED_AUTHORIZE_URL = "?client_id=%s&redirect_uri=%s&response_type=code&scope=%s";

    public void setAccessTokenEndpoint(String tokenUrl) {
        this.tokenUrl = tokenUrl;
    }

    public String getAccessTokenEndpoint() {
        return this.tokenUrl;
    }

    public void setAuthorizationUrl(String authorizationUrl) {
        this.authorizationUrl = authorizationUrl;
    }

    public String getAuthorizationUrl(OAuthConfig config) {
        if (config.hasScope()) {
            return this.authorizationUrl + String.format("?client_id=%s&redirect_uri=%s&response_type=code&scope=%s", config.getApiKey(), OAuthEncoder.encode((String)config.getCallback()), OAuthEncoder.encode((String)config.getScope()));
        }
        return this.authorizationUrl + String.format("?client_id=%s&redirect_uri=%s&response_type=code", config.getApiKey(), OAuthEncoder.encode((String)config.getCallback()));
    }

    public OAuthService createService(final OAuthConfig config) {
        return new OAuth20ServiceImpl(this, config){

            public Token getAccessToken(Token requestToken, Verifier verifier) {
                OAuthRequest request = new OAuthRequest(GraniteApi.this.getAccessTokenVerb(), GraniteApi.this.getAccessTokenEndpoint());
                request.addHeader("Content-Type", "application/x-www-form-urlencoded");
                request.addBodyParameter("grant_type", "authorization_code");
                request.addBodyParameter("client_id", config.getApiKey());
                request.addBodyParameter("client_secret", config.getApiSecret());
                request.addBodyParameter("code", verifier.getValue());
                request.addBodyParameter("redirect_uri", config.getCallback());
                if (config.hasScope()) {
                    request.addBodyParameter("scope", config.getScope());
                }
                Response response = request.send();
                return GraniteApi.this.getAccessTokenExtractor().extract(response.getBody());
            }

            public void signRequest(Token accessToken, OAuthRequest request) {
                request.addHeader("Authorization", "Bearer " + accessToken.getToken());
            }
        };
    }

    public Verb getAccessTokenVerb() {
        return Verb.POST;
    }

    public AccessTokenExtractor getAccessTokenExtractor() {
        return new JsonTokenExtractor();
    }

}