You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2004/12/03 03:06:05 UTC

cvs commit: jakarta-jetspeed-2/components/web-content/src/java/org/apache/jetspeed/portlet/webcontent WebContentResource.java

taylor      2004/12/02 18:06:05

  Modified:    components/web-content/src/java/org/apache/jetspeed/portlet
                        WebContentPortlet.java
  Added:       components/web-content/src/java/org/apache/jetspeed/portlet
                        SSOWebContentPortlet.java
               components/web-content/src/java/org/apache/jetspeed/portlet/webcontent
                        WebContentResource.java
  Log:
  SSO + WebContent
  still working on a cache
  
  Revision  Changes    Path
  1.6       +9 -3      jakarta-jetspeed-2/components/web-content/src/java/org/apache/jetspeed/portlet/WebContentPortlet.java
  
  Index: WebContentPortlet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jetspeed-2/components/web-content/src/java/org/apache/jetspeed/portlet/WebContentPortlet.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- WebContentPortlet.java	2 Dec 2004 22:57:33 -0000	1.5
  +++ WebContentPortlet.java	3 Dec 2004 02:06:05 -0000	1.6
  @@ -294,8 +294,9 @@
               String baseurl = baseURL.getProtocol() + "://" + baseURL.getHost();
   
               rewriter.setBaseUrl(baseurl);
  -
  -            rewriter.rewrite(rewriteController.createParserAdaptor("text/html"), getRemoteReader(sourceAttr), htmlWriter);
  +            String source = getURLSource(sourceAttr, request, response);
  +            System.out.println("Rewriting SOURCE: " + source);
  +            rewriter.rewrite(rewriteController.createParserAdaptor("text/html"), getRemoteReader(source), htmlWriter);
               htmlWriter.flush();
               
           }
  @@ -317,6 +318,11 @@
           return byteOutputStream.toByteArray();
       }
   
  +    public String getURLSource(String source, RenderRequest request, RenderResponse response)
  +    {
  +        return source;    
  +    }
  +    
       /*
        * Get WebContent source preference value
        */
  
  
  
  1.1                  jakarta-jetspeed-2/components/web-content/src/java/org/apache/jetspeed/portlet/SSOWebContentPortlet.java
  
  Index: SSOWebContentPortlet.java
  ===================================================================
  /*
   * Copyright 2000-2004 The Apache Software Foundation.
   * 
   * 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 org.apache.jetspeed.portlet;
  
  import java.io.IOException;
  import java.security.AccessControlContext;
  import java.security.AccessController;
  
  import javax.portlet.ActionRequest;
  import javax.portlet.ActionResponse;
  import javax.portlet.PortletConfig;
  import javax.portlet.PortletContext;
  import javax.portlet.PortletException;
  import javax.portlet.PortletMode;
  import javax.portlet.PortletPreferences;
  import javax.portlet.RenderRequest;
  import javax.portlet.RenderResponse;
  import javax.security.auth.Subject;
  
  import org.apache.jetspeed.sso.SSOContext;
  import org.apache.jetspeed.sso.SSOException;
  import org.apache.jetspeed.sso.SSOProvider;
  
  
  /**
   * SSOWebContentPortlet
   * 
   * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
   * @version $Id: SSOWebContentPortlet.java,v 1.1 2004/12/03 02:06:05 taylor Exp $
   */
  public class SSOWebContentPortlet extends WebContentPortlet
  {
      public static final String SSO_TYPE = "sso.type";
      public static final String SSO_TYPE_URL = "url";
      public static final String SSO_TYPE_URL_BASE64 = "url.base64";
      public static final String SSO_TYPE_HTTP = "http";
      public static final String SSO_TYPE_CERTIFICATE = "certificate";
      
      public static final String SSO_TYPE_URL_USERNAME = "sso.url.Principal";
      public static final String SSO_TYPE_URL_PASSWORD = "sso.url.Credential";
      
      public static final String SSO_REQUEST_ATTRIBUTE_USERNAME = "sso.ra.username";
      public static final String SSO_REQUEST_ATTRIBUTE_PASSWORD = "sso.ra.password";
  
      /*
       * The constants must be used in your HTML form for the SSO principal and credential
       */
      public static final String SSO_FORM_PRINCIPAL = "ssoPrincipal";
      public static final String SSO_FORM_CREDENTIAL = "ssoCredential";
      
      private PortletContext context;
      private SSOProvider sso;
  
      public void init(PortletConfig config) throws PortletException
      {
          super.init(config);
          context = getPortletContext();
          sso = (SSOProvider)context.getAttribute("cps:SSO");
          if (null == sso)
          {
             throw new PortletException("Failed to find SSO Provider on portlet initialization");
          }        
      }
      
      public void processAction(ActionRequest request, ActionResponse actionResponse)
      throws PortletException, IOException
      {
          // save the prefs
          super.processAction(request, actionResponse);
          
          if (request.getPortletMode() == PortletMode.EDIT)
          {
          
              // get the POST params -- requires HTML post params named
              // ssoUserName 
              String ssoPrincipal = request.getParameter(SSO_FORM_PRINCIPAL);
              String ssoCredential = request.getParameter(SSO_FORM_CREDENTIAL);        
              /*
              if (ssoPrincipal == null || ssoCredential == null)
              {
                  
                  actionResponse.setPortletMode(PortletMode.EDIT); // stay on edit
              }
              */
              String site = request.getPreferences().getValue("SRC", "");
              try
              {
                  Subject subject = getSubject();
                  if (sso.hasSSOCredentials(subject, site))
                  {
                      sso.updateCredentialsForSite(getSubject(), ssoPrincipal, site, ssoCredential);
                  }
                  else
                  {
                      sso.addCredentialsForSite(getSubject(), ssoPrincipal, site, ssoCredential);
                  }
              }
              catch (SSOException e)
              {
                  throw new PortletException(e);
              }
          }
      }
      
      public void doView(RenderRequest request, RenderResponse response)
      throws PortletException, IOException
      {
          String site = request.getPreferences().getValue("SRC", null);
          if (site == null)
          {
              // no credentials configured in SSO store
              // switch to SSO Configure View
              request.setAttribute(PARAM_VIEW_PAGE, this.getPortletConfig().getInitParameter(PARAM_EDIT_PAGE));
              setupPreferencesEdit(request, response);
              super.doView(request, response);
              return;
          }
          
          try
          {
              Subject subject = getSubject();                 
              SSOContext context = sso.getCredentials(subject, site);
              request.setAttribute(SSO_REQUEST_ATTRIBUTE_USERNAME, context.getUserName());
              request.setAttribute(SSO_REQUEST_ATTRIBUTE_PASSWORD, context.getPassword());
          }
          catch (SSOException e)
          {
              if (e.getMessage().equals(SSOException.NO_CREDENTIALS_FOR_SITE))
              {
                  // no credentials configured in SSO store
                  // switch to SSO Configure View
                  request.setAttribute(PARAM_VIEW_PAGE, this.getPortletConfig().getInitParameter(PARAM_EDIT_PAGE));
                  setupPreferencesEdit(request, response);                
              }
              else
              {
                  throw new PortletException(e);
              }
          }        
          
          super.doView(request, response);
      }
      
  
      public void doEdit(RenderRequest request, RenderResponse response)
      throws PortletException, IOException
      {
          try
          {
              Subject subject = getSubject();                 
              String site = request.getPreferences().getValue("SRC", "");
              SSOContext context = sso.getCredentials(subject, site);
              getContext(request).put(SSO_FORM_PRINCIPAL, context.getUserName());
              getContext(request).put(SSO_FORM_CREDENTIAL, context.getPassword());
          }
          catch (SSOException e)
          {
              if (e.getMessage().equals(SSOException.NO_CREDENTIALS_FOR_SITE))
              {
                  // no credentials configured in SSO store
                  // switch to SSO Configure View
                  getContext(request).put(SSO_FORM_PRINCIPAL, "");
                  getContext(request).put(SSO_FORM_CREDENTIAL, "");
              }
              else
              {
                  throw new PortletException(e);
              }
          }        
          
          super.doEdit(request, response);
      }
  
      private Subject getSubject()
      {
          AccessControlContext context = AccessController.getContext();
          return Subject.getSubject(context);         
      }
      
      public String getURLSource(String src, RenderRequest request, RenderResponse response)
      {
          PortletPreferences prefs = request.getPreferences();
          String baseSource = super.getURLSource(src, request, response);
          String type = prefs.getValue(SSO_TYPE, SSO_TYPE_URL);
          if (type.equals(SSO_TYPE_URL))
          {
              String userNameParam = prefs.getValue(SSO_TYPE_URL_USERNAME, "user");
              String passwordParam = prefs.getValue(SSO_TYPE_URL_PASSWORD, "password");
              StringBuffer source = new StringBuffer(baseSource);
              if (baseSource.indexOf("?") == -1)
              {
                  source.append("?");
              }            
              else
              {
                  source.append("&");
              }
              source.append(userNameParam);
              source.append("=");
              
              String userName = (String)request.getAttribute(SSO_REQUEST_ATTRIBUTE_USERNAME);
              if (userName == null) userName = "";
              String password = (String)request.getAttribute(SSO_REQUEST_ATTRIBUTE_PASSWORD);
              if (password == null) password = "";
              
              source.append(userName);
              source.append("&");
              source.append(passwordParam);
              source.append("=");
              source.append(password);
              
              return response.encodeURL(source.toString());
          }
          else
          {
              return baseSource;
          }
      }
      
  }
  
  
  
  1.1                  jakarta-jetspeed-2/components/web-content/src/java/org/apache/jetspeed/portlet/webcontent/WebContentResource.java
  
  Index: WebContentResource.java
  ===================================================================
  /*
   * Copyright 2000-2004 The Apache Software Foundation.
   * 
   * 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 org.apache.jetspeed.portlet.webcontent;
  
  import java.io.Serializable;
  
  import org.apache.commons.httpclient.Cookie;
  
  /**
   * A cached resource object, stored in memory to optimize access to static resources
   * such as images and style sheets.
   *
   * @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
   * @version $Id: WebContentResource.java,v 1.1 2004/12/03 02:06:05 taylor Exp $ 
   */
  
  public class WebContentResource implements Serializable
  {
      private transient byte[] content = null;
      private transient Cookie cookie = null;
      private String url = null;
      private String lastUrl = null;
  
      /**
       * Constructor for a cached resource. 
       *
       * @param contentType The HTTP content type for a cached resource as defined 
       *        in WebPageHelper, i.e. WebPageHelper.CT_HTML, WebPageHelper.CT_IMAGE....
       * @param content The byte array of content this cached. This content can be
       *         binary images, or static text such as scripts and style sheets.
       *         
       */
      public WebContentResource(String url, byte[] content)
      {
          this.url = url;
          if (content != null)
          {
              this.content = new byte[content.length];
              System.arraycopy(content, 0, this.content, 0, this.content.length);
          }
      }
  
      /**
       * Gets the content of this resource in a byte array.
       *
       * @return A byte array of the resource's content.
       */
      public byte[] getContent()
      {
          return content;
      }
  
  
      /**
       * @return Returns the lastUrl.
       */
      public String getLastUrl()
      {
          return lastUrl;
      }
      /**
       * @param lastUrl The lastUrl to set.
       */
      public void setLastUrl(String lastUrl)
      {
          this.lastUrl = lastUrl;
      }
      /**
       * @return Returns the url.
       */
      public String getUrl()
      {
          return url;
      }
      /**
       * @param url The url to set.
       */
      public void setUrl(String url)
      {
          this.url = url;
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jetspeed-dev-help@jakarta.apache.org