Package org.fluxtream.connectors.runkeeper

Source Code of org.fluxtream.connectors.runkeeper.RunKeeperController

package org.fluxtream.connectors.runkeeper;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import org.fluxtream.core.Configuration;
import org.fluxtream.core.auth.AuthHelper;
import org.fluxtream.core.connectors.Connector;
import org.fluxtream.connectors.controllers.ControllerSupport;
import org.fluxtream.core.domain.ApiKey;
import org.fluxtream.core.domain.Guest;
import org.fluxtream.core.services.GuestService;
import org.scribe.builder.ServiceBuilder;
import org.scribe.builder.api.RunKeeperApi;
import org.scribe.model.Token;
import org.scribe.model.Verifier;
import org.scribe.oauth.OAuthService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
*
* @author Candide Kemmler (candide@fluxtream.com)
*/
@Controller
@RequestMapping(value = "/runkeeper")
public class RunKeeperController {

    private static final String RUNKEEPER_SERVICE = "runkeeperService";

    @Autowired
    Configuration env;

    @Autowired
    GuestService guestService;

    private static final Token EMPTY_TOKEN = null;

    @RequestMapping(value = "/token")
    public String getRunkeeperToken(HttpServletRequest request) throws IOException, ServletException {

        OAuthService service = getOAuthService(request);
        request.getSession().setAttribute(RUNKEEPER_SERVICE, service);

        // Obtain the Authorization URL
        String authorizationUrl = service.getAuthorizationUrl(EMPTY_TOKEN);
        if (request.getParameter("apiKeyId") != null)
            authorizationUrl += authorizationUrl.indexOf("?")!=-1
                             ? "&state=" + request.getParameter("apiKeyId")
                             : "?state=" + request.getParameter("apiKeyId");

        return "redirect:" + authorizationUrl;
    }

    public OAuthService getOAuthService(HttpServletRequest request) {
        return new ServiceBuilder()
                .provider(RunKeeperApi.class)
                .apiKey(getConsumerKey())
                .apiSecret(getConsumerSecret())
                .callback(ControllerSupport.getLocationBase(request, env) + "runkeeper/upgradeToken")
                .build();
    }

    public OAuthService getOAuthService() {
        return new ServiceBuilder()
                    .provider(RunKeeperApi.class)
                    .apiKey(getConsumerKey())
                    .apiSecret(getConsumerSecret())
                    .callback(env.get("homeBaseUrl") + "runkeeper/upgradeToken")
                    .build();
    }

    @RequestMapping(value = "/upgradeToken")
    public String upgradeToken(HttpServletRequest request) throws IOException {
        final String code = request.getParameter("code");
        Verifier verifier = new Verifier(code);
        OAuthService service = (OAuthService)request.getSession().getAttribute(RUNKEEPER_SERVICE);

        Token accessToken = service.getAccessToken(EMPTY_TOKEN, verifier);
        final String token = accessToken.getToken();

        Guest guest = AuthHelper.getGuest();
        final Connector connector = Connector.getConnector("runkeeper");
        ApiKey apiKey;
        if (request.getParameter("state")!=null) {
            long apiKeyId = Long.valueOf(request.getParameter("state"));
            apiKey = guestService.getApiKey(apiKeyId);
        } else
            apiKey = guestService.createApiKey(guest.getId(), connector);

        guestService.populateApiKey(apiKey.getId());
        guestService.setApiKeyAttribute(apiKey, "accessToken", token);
        request.getSession().removeAttribute(RUNKEEPER_SERVICE);
        if (request.getParameter("state")!=null)
            return "redirect:/app/tokenRenewed/runkeeper";
        return "redirect:/app/from/runkeeper";
    }

    String getConsumerKey() {
        return env.get("runkeeperConsumerKey");
    }

    String getConsumerSecret() {
        return env.get("runkeeperConsumerSecret");
    }


}
TOP

Related Classes of org.fluxtream.connectors.runkeeper.RunKeeperController

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.