Package com.ibm.sbt.security.authentication.oauth.consumer.servlet

Source Code of com.ibm.sbt.security.authentication.oauth.consumer.servlet.OAClientAuthentication

/*
* © Copyright IBM Corp. 2012
*
* 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 com.ibm.sbt.security.authentication.oauth.consumer.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.ibm.commons.runtime.Context;
import com.ibm.commons.util.StringUtil;
import com.ibm.sbt.core.configuration.Configuration;
import com.ibm.sbt.security.authentication.oauth.consumer.OAuthHandler;
import com.ibm.sbt.service.core.handlers.AbstractServiceHandler;
import com.ibm.sbt.service.core.servlet.ServiceServlet;
import com.ibm.sbt.services.client.ClientServicesException;
import com.ibm.sbt.services.endpoints.Endpoint;
import com.ibm.sbt.services.endpoints.EndpointFactory;

/**
* OAuth client authentication.
* <p>
* This servlet gets is used to trigger the authentication from a Javascript client, generally in a pop-up
* window.
* </p>
*
* @author Philippe Riand
*/
public class OAClientAuthentication extends AbstractServiceHandler {

  public static final String  URL_PATH      = "oauth_jsauth";

  public static final String  MODE_MAINWINDOW    = "main";
  public static final String  MODE_POPUP      = "popup";
  public static final String  MODE_DIALOG      = "dialog";

  @SuppressWarnings("unused")
  private static final long  serialVersionUID  = 1L;

  @Override
  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // The URL to call the service should be of the form:
    // .../oauth_jsauth/[endpoint]
    int len = URL_PATH.length() + 2;
    String pathInfo = req.getPathInfo();
    if (pathInfo.length() <= len) {
      ServiceServlet.service500(req, resp, "Empty endpoint name");
      return;
    }
    String epName = pathInfo.substring(len);
    Endpoint ep = EndpointFactory.getEndpoint(epName);
    if (ep == null) {
      ServiceServlet.service500(req, resp, "Cannot find endpoint {0}", epName);
      return;
    }

    try {
      // If the endpoint is not authenticated, then authenticate
      // else redirect the main page
      if (!ep.isAuthenticationValid()) {
        ep.authenticate(true);
      } else {
        generateCloseScript(req, resp);
      }
    } catch (ClientServicesException ex) {
      throw new ServletException(ex);
    }
  }

  protected void generateCloseScript(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    String mode = req.getParameter("loginUi");

    PrintWriter pw = resp.getWriter();
    /*
     * Fix : Adding content type in response. Not setting this, results in
     * the html being rendered as text/plain.
     */
    resp.setContentType("text/html");
    try {
      pw.println("<html>");
      pw.println("<head>");
      pw.println("</head>");
      pw.println("<body>");
      pw.println("<script>");
      if (StringUtil.isEmpty(mode) || mode.equalsIgnoreCase(MODE_MAINWINDOW)) {
        String redirect = req.getParameter("oaredirect");
        pw.println("  window.location.href = '" + redirect + "';");
      } else if (mode.equalsIgnoreCase(MODE_POPUP)) {
        pw.println("  if (window.opener && !window.opener.closed) {");
        pw.println("window.opener.require(['sbt/config'], function(config){");
        pw.println("    window.opener.location.reload();");
          pw.println("  if (config.callback) {");
            pw.println("config.callback();");
            pw.println("delete config.callback;");
          pw.println("  }");
        pw.println("});");
        pw.println("  }");
        pw.println("  window.close();");
      } else if (mode.equalsIgnoreCase(MODE_DIALOG)) {
        //
        // pw.println("  if (window.opener && !window.opener.closed) {");
        // pw.println("    window.opener.location.reload();");
        // pw.println("  }");
        // pw.println("  window.close();");
      } else {
        throw new ServletException(StringUtil.format("Invalid mode {0}", mode));
      }
      pw.println("</script>");
      pw.println("</body>");
      pw.println("</html>");
    } finally {
      pw.flush();
    }
  }
}
TOP

Related Classes of com.ibm.sbt.security.authentication.oauth.consumer.servlet.OAClientAuthentication

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.