Package de.deltatree.social.web.filter.impl

Source Code of de.deltatree.social.web.filter.impl.SocialAuthSecurityFilter

package de.deltatree.social.web.filter.impl;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.brickred.socialauth.AuthProvider;
import org.brickred.socialauth.SocialAuthManager;
import org.brickred.socialauth.util.SocialAuthUtil;

import de.deltatree.social.web.filter.api.SASFHelper;
import de.deltatree.social.web.filter.api.security.SASFSecurityException;
import de.deltatree.social.web.filter.impl.props.SASFProperties;
import de.deltatree.social.web.filter.impl.props.SASFPropertiesException;
import de.deltatree.social.web.filter.impl.security.DefaultSASFSocialAuthManager;
import de.deltatree.social.web.filter.impl.tools.InitParamUtil;

public class SocialAuthSecurityFilter implements Filter {

  private static final String VAR_PROPERTIES = "properties";
  private SASFProperties props;
  private DefaultSASFSocialAuthManager sdbSocialAuthManager;

  @Override
  public void destroy() {
  }

  @Override
  public void doFilter(final ServletRequest req, final ServletResponse res,
      final FilterChain fc) throws IOException, ServletException {
    try {
      doFilter((HttpServletRequest) req, (HttpServletResponse) res, fc);
    } catch (Exception e) {
      throw new ServletException(e);
    }
  }

  public void doFilter(final HttpServletRequest req,
      final HttpServletResponse res, final FilterChain fc)
      throws Exception {
    SASFHelper h = new DefaultSASFHelper(req, this.props,
        this.sdbSocialAuthManager, req.getSession());
    String path = lookupPath(req);
    if (path != null && path.startsWith(h.getServletMain())) {
      try {
        if (path.equals(h.getServletSuccess())) {
          SocialAuthManager manager = h.getAuthManager();
          AuthProvider provider = manager.connect(SocialAuthUtil
              .getRequestParametersMap(req));
          h.setProvider(provider);
          res.sendRedirect(h.getWebappSuccessAction());
          return;
        } else {
          String id = req.getParameter("id");
          SocialAuthManager socialAuthManager = null;
          synchronized (req.getSession()) {
            if (h.getAuthManager() != null) {
              socialAuthManager = h.getAuthManager();
            } else {
              socialAuthManager = h.getMgr()
                  .getSocialAuthManager();
              h.setAuthManager(socialAuthManager);
            }
          }

          res.sendRedirect(socialAuthManager.getAuthenticationUrl(id,
              h.getOpenidReturnUrl()));
          return;

        }
      } catch (Throwable t) {
        h.setError(t.getMessage(), t);
        res.sendRedirect(h.getErrorPage());
        return;
      }
    }
    if (!res.isCommitted()) {
      fc.doFilter(req, res);
    }
  }

  private String lookupPath(final HttpServletRequest req) {
    return req.getRequestURI();
  }

  @Override
  public void init(final FilterConfig config) throws ServletException {
    try {
      this.props = new SASFProperties(InitParamUtil.getInitParam(config,
          VAR_PROPERTIES));
      this.sdbSocialAuthManager = new DefaultSASFSocialAuthManager(props);
    } catch (SASFPropertiesException e) {
      throw new ServletException(e);
    } catch (SASFSecurityException e) {
      throw new ServletException(e);
    }
  }
}
TOP

Related Classes of de.deltatree.social.web.filter.impl.SocialAuthSecurityFilter

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.