Package org.nutz.socialauth

Source Code of org.nutz.socialauth.AbstractOAuthProvider

package org.nutz.socialauth;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.brickred.socialauth.AbstractProvider;
import org.brickred.socialauth.AuthProvider;
import org.brickred.socialauth.Contact;
import org.brickred.socialauth.Permission;
import org.brickred.socialauth.Profile;
import org.brickred.socialauth.exception.SocialAuthException;
import org.brickred.socialauth.exception.UserDeniedPermissionException;
import org.brickred.socialauth.oauthstrategy.OAuthStrategyBase;
import org.brickred.socialauth.util.AccessGrant;
import org.brickred.socialauth.util.OAuthConfig;
import org.brickred.socialauth.util.Response;
import org.brickred.socialauth.util.SocialAuthUtil;
import org.nutz.log.Log;
import org.nutz.log.Logs;

@SuppressWarnings("serial")
public abstract class AbstractOAuthProvider extends AbstractProvider implements AuthProvider  {
 
  private static final Log log = Logs.get();

  protected Permission scope;
  protected OAuthConfig config;
  protected Profile userProfile;
  protected AccessGrant accessGrant;
  protected OAuthStrategyBase authenticationStrategy;

  protected String[] AllPerms;
  protected String[] AuthPerms;
  protected String PROFILE_URL;

  protected Map<String, String> ENDPOINTS = new HashMap<String, String>();

  public AbstractOAuthProvider(final OAuthConfig providerConfig) {
    this.config = providerConfig;
    //下面几个参数都是必须初始化的
    //ENDPOINTS.put(Constants.OAUTH_AUTHORIZATION_URL,"https://graph.qq.com/oauth2.0/authorize");
    //ENDPOINTS.put(Constants.OAUTH_ACCESS_TOKEN_URL,"https://graph.qq.com/oauth2.0/token");
    //authenticationStrategy = new OAuth2(config, ENDPOINTS);
    //authenticationStrategy.setPermission(scope);
    //authenticationStrategy.setScope(getScope());
    //AllPerms = new String[] { "get_user_info","get_info" };
    //AuthPerms = new String[] { "get_user_info", "get_info" };
   
    //这个可选
    //PROFILE_URL = "https://graph.qq.com/user/get_info";
  }

  public String getLoginRedirectURL(final String successUrl) throws Exception {
    return authenticationStrategy.getLoginRedirectURL(successUrl);
  }

  public Profile verifyResponse(HttpServletRequest httpReq) throws Exception {
    Map<String, String> params = SocialAuthUtil
        .getRequestParametersMap(httpReq);
    return doVerifyResponse(params);
  }

  public Profile verifyResponse(Map<String, String> params) throws Exception {
    return doVerifyResponse(params);
  }

  protected Profile doVerifyResponse(final Map<String, String> requestParams)
      throws Exception {
        log.info("Retrieving Access Token in verify response function");
        if (requestParams.get("error_reason") != null
                        && "user_denied".equals(requestParams.get("error_reason"))) {
                throw new UserDeniedPermissionException();
        }
        accessGrant = authenticationStrategy.verifyResponse(requestParams, verifyResponseMethod());

        if (accessGrant != null) {
                log.debug("Obtaining user profile");
                return authLogin();
        } else {
                throw new SocialAuthException("Access token not found");
        }
  }

    protected abstract Profile authLogin() throws Exception ;
 
  public Response api(String arg0, String arg1, Map<String, String> arg2,
      Map<String, String> arg3, String arg4) throws Exception {
    return null;
  }

  public List<Contact> getContactList() throws Exception {
    return null;
  }

  public void logout() {
  }

  @Override
  public void setAccessGrant(AccessGrant accessGrant) throws Exception {
    this.accessGrant = accessGrant;
  }

  @Override
  public void setPermission(Permission permission) {
    this.scope = permission;
    authenticationStrategy.setPermission(this.scope);
    authenticationStrategy.setScope(getScope());
  }

  public void updateStatus(String status) throws Exception {
  }

  public Profile getUserProfile() throws Exception {
    return userProfile;
  }

  public AccessGrant getAccessGrant() {
    return accessGrant;
  }

  public String getProviderId() {
    return config.getId();
  }

  protected String getScope() {
    StringBuffer result = new StringBuffer();
    String arr[] = null;
    if (Permission.AUTHENTICATE_ONLY.equals(scope)) {
      arr = AuthPerms;
    } else if (Permission.CUSTOM.equals(scope)
        && config.getCustomPermissions() != null) {
      arr = config.getCustomPermissions().split(",");
    } else {
      arr = AllPerms;
    }
    if (arr.length > 0)
      result.append(arr[0]);
    for (int i = 1; i < arr.length; i++) {
      result.append(",").append(arr[i]);
    }
    return result.toString();
  }
 
  protected String verifyResponseMethod() {
    return "GET";
  }
}
TOP

Related Classes of org.nutz.socialauth.AbstractOAuthProvider

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.