Package glacier.github

Source Code of glacier.github.GithubConnectorController

package glacier.github;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.fluxtream.core.Configuration;
import org.fluxtream.core.connectors.Connector;
import org.fluxtream.core.domain.ApiKey;
import org.fluxtream.core.domain.Guest;
import org.fluxtream.core.auth.AuthHelper;
import org.fluxtream.core.services.GuestService;
import org.fluxtream.core.utils.HttpUtils;
import org.fluxtream.core.utils.UnexpectedHttpResponseCodeException;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller()
@RequestMapping("/singly/github")
public class GithubConnectorController {

    @Autowired
    GuestService guestService;

    @Autowired
    Configuration env;

    @RequestMapping(value = "/callback")
    public String getToken(HttpServletRequest request) throws IOException, UnexpectedHttpResponseCodeException {
        String code = request.getParameter("code");
        String error = request.getParameter("error");

        Guest guest = AuthHelper.getGuest();

        if (StringUtils.isEmpty(error)) {
            String clientId = env.get("singly.client.id");
            String clientSecret = env.get("singly.client.secret");
            Map<String, String> params = new HashMap<String, String>();
            params.put("client_id", clientId);
            params.put("client_secret", clientSecret);
            params.put("code", code);

            final String tokenJSON = HttpUtils.fetch("https://api.singly.com/oauth/access_token", params);
            JSONObject jsonToken = JSONObject.fromObject(tokenJSON);

            String accessToken = jsonToken.getString("access_token");
            String account = jsonToken.getString("account");

            final Connector connector = Connector.getConnector("github");
            final ApiKey apiKey = guestService.createApiKey(guest.getId(), connector);

            guestService.setApiKeyAttribute(apiKey, "accessToken", accessToken);
            guestService.setApiKeyAttribute(apiKey, "account", account);

            getUserLogin(apiKey, accessToken);

            return "redirect:/app/from/github";
        }

        return "redirect:/app/from/github?error=" + error;
    }

    private void getUserLogin(final ApiKey apiKey, final String accessToken) throws IOException, UnexpectedHttpResponseCodeException {
        final String profileJson = HttpUtils.fetch("https://api.singly.com/services/github/self?access_token=" + accessToken);
        JSONArray jsonProfileArray = JSONArray.fromObject(profileJson);
        JSONObject jsonProfile = jsonProfileArray.getJSONObject(0);
        final JSONObject profileData = jsonProfile.getJSONObject("data");
        final String login = profileData.getString("login");

        guestService.setApiKeyAttribute(apiKey, "login", login);
    }
}
TOP

Related Classes of glacier.github.GithubConnectorController

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.