Package org.agorava.oauth

Source Code of org.agorava.oauth.OAuthServiceBase

/*
* Copyright 2013 Agorava
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.agorava.oauth;

import org.agorava.api.atinject.BeanResolver;
import org.agorava.api.atinject.InjectWithQualifier;
import org.agorava.api.oauth.OAuthRequest;
import org.agorava.api.oauth.OAuthService;
import org.agorava.api.oauth.OAuthSession;
import org.agorava.api.oauth.Token;
import org.agorava.api.oauth.Verifier;
import org.agorava.api.oauth.application.OAuthAppSettings;
import org.agorava.api.rest.RequestTuner;
import org.agorava.api.rest.Response;
import org.agorava.api.rest.Verb;
import org.agorava.api.service.JsonMapperService;
import org.agorava.api.service.OAuthLifeCycleService;
import org.agorava.rest.OAuthRequestImpl;
import org.agorava.spi.AppSettingsTuner;

import javax.inject.Inject;
import javax.inject.Provider;
import java.text.MessageFormat;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;

import static org.agorava.api.rest.Verb.GET;
import static org.agorava.api.rest.Verb.POST;
import static org.agorava.api.rest.Verb.PUT;

/**
* @author Antoine Sabot-Durand
*/
public abstract class OAuthServiceBase implements OAuthService {

    private static final Logger LOGGER = Logger.getLogger(OAuthServiceBase.class.getName());

    @Inject
    OAuthLifeCycleService OAuthLifeCycleService;

    @Inject
    JsonMapperService mapperService;

    @InjectWithQualifier
    OAuthAppSettings config;

    @InjectWithQualifier
    Provider<RequestTuner> tunerProvider;

    private Map<String, String> requestHeader;

    @Override
    public OAuthRequest requestFactory(Verb verb, String uri) {
        OAuthRequest res = new OAuthRequestImpl(verb, uri);
        return res;
    }

    @Override
    public JsonMapperService getJsonMapper() {
        return mapperService;
    }

    @Override
    public Response sendSignedRequest(OAuthRequest request) {
        RequestTuner tuner;
        try {
            tuner = tunerProvider.get();
            tuner.tune(request);
        } catch (RuntimeException e) {
            LOGGER.log(Level.FINE, "No Tuner found for " + getSocialMediaName());
        } finally {
            signRequest(getAccessToken(), request);
            return request.send(); //todo:should check return code and launch ResponseException if it's not 200
        }
    }

    @Override
    public Response sendSignedRequest(Verb verb, String uri) {
        OAuthRequest request = requestFactory(verb, uri);
        return sendSignedRequest(request);

    }

    @Override
    public Response sendSignedRequest(Verb verb, String uri, String key, Object value) {
        OAuthRequest request = requestFactory(verb, uri);

        request.addBodyParameter(key, value.toString());

        return sendSignedRequest(request);

    }

    @Override
    public Response sendSignedXmlRequest(Verb verb, String uri, String payload) {
        OAuthRequest request = requestFactory(verb, uri);
        request.addPayload(payload);
        return sendSignedRequest(request);

    }

    @Override
    public OAuthSession getSession() {
        return OAuthLifeCycleService.resolveSessionForQualifier(config.getQualifier());

    }

    @Override
    public Response sendSignedRequest(Verb verb, String uri, Map<String, ? extends Object> params) {
        OAuthRequest request = requestFactory(verb, uri);
        for (Map.Entry<String, ? extends Object> ent : params.entrySet()) {
            request.addBodyParameter(ent.getKey(), ent.getValue().toString());
        }
        return sendSignedRequest(request);

    }

    @Override
    public String getVerifier() {
        OAuthSession session = getSession();
        return session.getVerifier();
    }

    @Override
    public void setVerifier(String verifierStr) {
        OAuthSession session = getSession();
        session.setVerifier(verifierStr);
    }

    @Override
    public Token getAccessToken() {
        OAuthSession session = getSession();
        return session.getAccessToken();
    }

    @Override
    public void setAccessToken(Token token) {
        OAuthSession session = getSession();
        session.setAccessToken(token);

    }

    @Override
    public boolean isConnected() {
        return getSession().isConnected();
    }

    @Override
    public String getSocialMediaName() {
        return config.getSocialMediaName();
    }

    @Override
    public void setAccessToken(String token, String secret) {
        OAuthSession session = getSession();
        session.setAccessToken(new Token(token, secret));

    }

    @Override
    public <T> T get(String uri, Class<T> clazz) {
        return getJsonMapper().mapToObject(sendSignedRequest(GET, uri), clazz);
    }

    @Override
    public <T> T get(String uri, Class<T> clazz, boolean signed) {
        Response resp;
        if (signed) resp = sendSignedRequest(GET, uri);
        else
            resp = requestFactory(GET, uri).send(); //todo:should check return code and launch
        // ResponseException if it's not 200
        return getJsonMapper().mapToObject(resp, clazz);
    }

    @Override
    public <T> T get(String uri, Class<T> clazz, Object... urlParams) {
        String url = MessageFormat.format(uri, urlParams);
        return getJsonMapper().mapToObject(sendSignedRequest(GET, url), clazz);
    }

    @Override
    public <T> T post(String uri, Map<String, ? extends Object> params, Class<T> clazz) {
        OAuthRequest request = requestFactory(POST, uri);
        request.addBodyParameters(params);
        return getJsonMapper().mapToObject(sendSignedRequest(request), clazz);
    }

    @Override
    public String post(String uri, Object toPost, Object... urlParams) {

        uri = MessageFormat.format(uri, urlParams);
        OAuthRequest request = requestFactory(POST, uri);

        request.addPayload(getJsonMapper().objectToJsonString(toPost));
        Response response = sendSignedRequest(request);
        return response.getHeader("Location");
    }

    @Override
    public void put(String uri, Object toPut, Object... urlParams) {
        uri = MessageFormat.format(uri, urlParams);
        OAuthRequest request = requestFactory(PUT, uri);

        request.addPayload(getJsonMapper().objectToJsonString(toPut));
        sendSignedRequest(request);

    }

    @Override
    public void delete(String uri) {
        sendSignedRequest(Verb.DELETE, uri);
    }


    @Override
    public Token getAccessToken(Token requestToken, String verifier) {
        return getAccessToken(requestToken, new Verifier(verifier));
    }

    protected OAuthAppSettings getTunedOAuthAppSettings() {
        AppSettingsTuner tuner = BeanResolver.getInstance().resolve(AppSettingsTuner.class, true);
        return tuner == null ? config : tuner.tune(config);
    }

}
TOP

Related Classes of org.agorava.oauth.OAuthServiceBase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.