Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.jasig.portal.channels.webproxy
Class CWebProxy

    java.lang.Object
      org.jasig.portal.channels.webproxy.CWebProxy

All Implemented Interfaces:
  IMultithreadedCacheable, IMultithreadedChannel, IMultithreadedMimeResponse

    public class CWebProxy

extends java.lang.Object
implements IMultithreadedChannel, IMultithreadedCacheable, IMultithreadedMimeResponse

A channel which transforms and interacts with dynamic XML or HTML. See docs/website/developers/channel_docs/reference/CwebProxy.html for full documentation.

Static and Runtime Channel Parameters: These parameters can be configured both as ChannelStaticData parameters and as ChannelRuntimeData parameters. These static parameters can be updated by equivalent Runtime parameters. Caching parameters can also be changed temporarily. Cache defaults and IPerson restrictions are loaded first from properties, and overridden by static data if there.

1. "cw_xml" - a URI for the source XML document. By default, must be an http:// or https:// URI, though this requirement is configurable via ChannelStaticData parameters.
2. "cw_xslTitle" - a title representing the stylesheet (optional) If no title parameter is specified, a default stylesheet will be chosen according to the media
3. "cw_cacheDefaultMode" - Default caching mode. May be `none` (normally don't cache), or `all` (cache everything).
4. "cw_cacheDefaultTimeout" - Default timeout in seconds.
5. "cw_cacheMode" - override default for this request only. Primarily intended as a runtime parameter, but can used statically to override the first instance.
6. "cw_cacheTimeout" - override default for this request only. Primarily intended as a runtime parameter, but can be used statically to override the first instance.

Static Channel Parameters: These parameters can be configured only as ChannelStaticData parameters. They can no longer (as of uPortal 2.5.1) be changed at runtime. This closes some serious security vulnerabilities wherein the Adversary would manipulate these parameters at runtime to access resources on the local filesystem.

1. "cw_ssl" - a URI specifying the corresponding .ssl (stylesheet list) file
2. "cw_xsl" - a URI specifying the stylesheet to use If `cw_xsl` is supplied, `cw_ssl` and `cw_xslTitle` will be ignored.
3. "cw_passThrough" - indicates how RunTimeData is to be passed through. If `cw_passThrough` is supplied, and not set to "all" or "application", additional RunTimeData parameters not starting with "cw_" or "upc_" will be passed as request parameters to the XML URI. If `cw_passThrough` is set to "marked", this will happen only if there is also a RunTimeData parameter of `cw_inChannelLink`. "application" is intended to keep application-specific links in the channel, while "all" should keep all links in the channel. This distinction is handled entirely in the URL Filters.
4. "cw_tidy" - output from `xmlUri` will be passed though Jtidy
5. "cw_info" - a URI to be called for the `info` event.
6. "cw_help" - a URI to be called for the `help` event.
7. "cw_edit" - a URI to be called for the `edit` event.
8. "cw_person" - IPerson attributes to pass. A comma-separated list of IPerson attributes to pass to the back end application. The static data value will be passed on all requests except some refresh requests.
9. "cw_personAllow" - Restrict IPerson attribute passing to this list. A comma-separated list of IPerson attributes that may be passed via cw_person. An empty or non-existent value means use the default value from the corresponding property. The special value "*" means all attributes are allowed. The value "!*" means none are allowed. Static data only.
10. "upc_localConnContext" - LocalConnectionContext implementation class. The name of a class to use when data sent to the backend application needs to be modified or added to suit local needs. Static data only.
11. "cw_allow_uri_prefixes" - permitted URI prefixes. Optional static data only parameter specifying allowable prefixes for URIs accessed by this channel. This channel will only use URIs with these prefixes for obtaining XML and XSLT for use in rendering. Whitespace delimit allowed prefixes. Effectively defaults to "http:// https://"; do not allow "file:/" lightly.
12. "cw_block_uri_prefixes" - blocked URI prefixes. Optional static data only parameter further restricting which URIs this channel will use to obtain XML and XSLT. This channel will not use URIs matching prefixes specified in this whitespace- delimited parameter. Effectively defaults to "".
13. "cw_restrict_xmlUri_inStaticData" - Optional parameter specifying whether the xmlUri should be restricted according to the allow and deny prefix rules above as presented in ChannelStaticData or just as presented in ChannelRuntimeData. "true" means both ChannelStaticData and ChannelRuntimeData will be restricted. Any other value or the parameter not being present means only ChannelRuntimeData will be restricted. It is important to set this value to true when using subscribe-time channel parameter configuration of the xmlUri.

Runtime Channel Parameters:

The following parameters are runtime-only.

1. "cw_reset" - an instruction to return to reset internal variables. The value `return` resets `cw_xml` to its last value before changed by button events. The value "reset" returns all variables to the static data values.
2. "cw_download" - use download worker for this link or form any link or form that contains this parameter will be handled by the download worker, if the pass-through mode is set to rewrite the link or form. This allows downloads from the proxied site to be delivered via the portal, primarily useful if the download requires verification of a session referenced by a proxied cookie

This channel can be used for all XML formats with appropriate stylesheets. All static data parameters as well as additional runtime data parameters passed to this channel via HttpRequest will in turn be passed on to the XSLT stylesheet as stylesheet parameters. They can be read in the stylesheet as follows: `<xsl:param name="yourParamName">aDefaultValue</xsl:param>`

Version:
  $Revision: 1.40.2.6 $
Author:
  Andrew Draskoy, andrew@mun.ca, Sarah Arnott, sarnott@mun.ca

Nested Class Summary
`private class` | `CWebProxy.ChannelState` All state variables are stored in this inner class.

Field Summary
`static java.lang.String` | `ALLOW_URI_PREFIXES_PARAM` The name of the optional ChannelStaticData parameter the value of which will be a String containing a whitespace-delimited list of allowable URI prefixes for URIs from which the configured CWebProxy instance will obtain XML and XSLT.
`static java.lang.String` | `BLOCK_URI_PREFIXES_PARAM` The name of the optional ChannelStaticData parameter the value of which will be a String containing a whitespace-delimited list of explicitly blocked URI prefixes for URIs from which the configured CWebProxy instance will not obtain XML and XSLT.
`(package private) static java.io.PrintWriter` | `devNull`
`private static org.apache.commons.logging.Log` | `log`
`private static MediaManager` | `MEDIAMANAGER`
`static java.lang.String` | `RESTRICT_STATIC_XMLURI_PREFIXES_PARAM` The name of the optional ChannelStaticData parameter the value of which will be the String "true" to convey that the xmlUri should be restricted as received from both ChannelStaticData and CHannelRuntimeData and any other value to convey that it should be restricted only as received from ChannelRuntimeData.
`(package private) java.util.Map` | `stateTable`
`(package private) static java.lang.String` | `systemCacheId`

Constructor Summary
`CWebProxy()`

Method Summary
`void` | `downloadData(java.io.OutputStream out, java.lang.String uid)` Pass the OutputStream object to the download code if it needs special handling (like outputting a Zip file).
`ChannelCacheKey` | `generateKey(java.lang.String uid)` Requests the channel to generate a key uniqly describing it's current state, and a description of key usage.
`private java.net.URLConnection` | `getConnection(java.lang.String uri, CWebProxy.ChannelState state)`
`java.lang.String` | `getContentType(java.lang.String uid)` Returns the MIME type of the content.
`(package private) static java.io.PrintWriter` | `getErrout()`
`java.util.Map` | `getHeaders(java.lang.String uid)` Returns a list of header values that can be set in the HttpResponse.
`java.io.InputStream` | `getInputStream(java.lang.String uid)` Returns the MIME content in the form of an input stream.
`java.lang.String` | `getName(java.lang.String uid)` Returns the name of the MIME file.
`ChannelRuntimeProperties` | `getRuntimeProperties(java.lang.String uid)` Acquires ChannelRuntimeProperites from the channel.
`private java.lang.String` | `getTidiedXml(java.lang.String uri, CWebProxy.ChannelState state)` Get the contents of a URI as a String but send it through tidy first.
`private org.w3c.dom.Document` | `getXml(java.lang.String uri, CWebProxy.ChannelState state)` Get the contents of a URI as a Document object.
`boolean` | `isCacheValid(java.lang.Object validity, java.lang.String uid)` Requests the channel to verify validity of the retreived cache based on the validator object.
`void` | `receiveEvent(PortalEvent ev, java.lang.String uid)` Process portal events.
`void` | `renderXML(org.xml.sax.ContentHandler out, java.lang.String uid)` Ask channel to render its content.
`void` | `reportDownloadError(java.lang.Exception e)` Let the channel know that there were problems with the download
`void` | `setRuntimeData(ChannelRuntimeData rd, java.lang.String uid)` Passes ChannelRuntimeData to the channel.
`void` | `setStaticData(ChannelStaticData sd, java.lang.String uid)` Passes ChannelStaticData to the channel.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### log

    private static final org.apache.commons.logging.Log log

### ALLOW_URI_PREFIXES_PARAM

    public static final java.lang.String ALLOW_URI_PREFIXES_PARAM

  The name of the optional ChannelStaticData parameter the value of which will be a String containing a whitespace-delimited list of allowable URI prefixes for URIs from which the configured CWebProxy instance will obtain XML and XSLT. Defaults to allowing all URIs of the http:// and https:// methods.

  See Also:
    Constant Field Values

### BLOCK_URI_PREFIXES_PARAM

    public static final java.lang.String BLOCK_URI_PREFIXES_PARAM

  The name of the optional ChannelStaticData parameter the value of which will be a String containing a whitespace-delimited list of explicitly blocked URI prefixes for URIs from which the configured CWebProxy instance will not obtain XML and XSLT. URIs matching these prefixes will not be used even if they also match an allow prefix specified in ALLOW_URI_PREFIXES_PARAM.

  See Also:
    Constant Field Values

### RESTRICT_STATIC_XMLURI_PREFIXES_PARAM

    public static final java.lang.String RESTRICT_STATIC_XMLURI_PREFIXES_PARAM

  The name of the optional ChannelStaticData parameter the value of which will be the String "true" to convey that the xmlUri should be restricted as received from both ChannelStaticData and CHannelRuntimeData and any other value to convey that it should be restricted only as received from ChannelRuntimeData. CWebProxy should be configured to restrict xmlUri from ChannelStaticData in the case where the xmlUri is a subscribe-time configurable parameter.

  See Also:
    Constant Field Values

### MEDIAMANAGER

    private static final MediaManager MEDIAMANAGER

### stateTable

    java.util.Map stateTable

### systemCacheId

    static final java.lang.String systemCacheId

See Also:
  Constant Field Values

### devNull

    static java.io.PrintWriter devNull

Constructor Detail

### CWebProxy

    public CWebProxy()

Method Detail

### setStaticData

    public void setStaticData(ChannelStaticData sd,
                              java.lang.String uid)
                       throws PortalException

  Passes ChannelStaticData to the channel. This is done during channel instantiation time. see org.jasig.portal.ChannelStaticData

  Specified by:
    `setStaticData` in interface `IMultithreadedChannel`
  Parameters:
    `sd` - channel static data
    `uid` - a string uniqly identifying a channel "instance" in the system. For example, a combination of session id and channel instance id would fit the bill.
  Throws:
    `PortalException`
  See Also:
    `ChannelStaticData`

### setRuntimeData

    public void setRuntimeData(ChannelRuntimeData rd,
                               java.lang.String uid)

  Passes ChannelRuntimeData to the channel. This function is called prior to the renderXML() call.

  Specified by:
    `setRuntimeData` in interface `IMultithreadedChannel`
  Parameters:
    `rd` - channel runtime data
  See Also:
    `ChannelRuntimeData`

### receiveEvent

    public void receiveEvent(PortalEvent ev,
                             java.lang.String uid)

  Process portal events. Currently supported events are EDIT_BUTTON_EVENT, HELP_BUTTON_EVENT, ABOUT_BUTTON_EVENT, and SESSION_DONE. The button events work by changing the xmlUri. The new Uri's content should contain a link that will refer back to the old one at the end of its task.

  Specified by:
    `receiveEvent` in interface `IMultithreadedChannel`
  Parameters:
    `ev` - the event

### getRuntimeProperties

    public ChannelRuntimeProperties getRuntimeProperties(java.lang.String uid)

  Acquires ChannelRuntimeProperites from the channel. This function may be called by the portal framework throughout the session.

  Specified by:
    `getRuntimeProperties` in interface `IMultithreadedChannel`
  See Also:
    `ChannelRuntimeProperties`

### renderXML

    public void renderXML(org.xml.sax.ContentHandler out,
                          java.lang.String uid)
                   throws PortalException

  Ask channel to render its content.

  Specified by:
    `renderXML` in interface `IMultithreadedChannel`
  Parameters:
    `out` - the SAX ContentHandler to output content to
  Throws:
    `PortalException`

### getXml

    private org.w3c.dom.Document getXml(java.lang.String uri,
                                        CWebProxy.ChannelState state)
                                 throws java.lang.Exception

  Get the contents of a URI as a Document object. This is used if tidy is not set or equals 'off'. Also includes support for cookies.

  Parameters:
    `uri` - the URI
  Returns:
    the data pointed to by a URI as a Document object
  Throws:
    `java.lang.Exception`

### getTidiedXml

    private java.lang.String getTidiedXml(java.lang.String uri,
                                          CWebProxy.ChannelState state)
                                   throws java.lang.Exception

  Get the contents of a URI as a String but send it through tidy first. Also includes support for cookies.

  Parameters:
    `uri` - the URI
  Returns:
    the data pointed to by a URI as a String
  Throws:
    `java.lang.Exception`

### getConnection

    private java.net.URLConnection getConnection(java.lang.String uri,
                                                 CWebProxy.ChannelState state)
                                          throws java.lang.Exception

  Throws:
    `java.lang.Exception`

### generateKey

    public ChannelCacheKey generateKey(java.lang.String uid)

  Description copied from interface: `IMultithreadedCacheable`
  Requests the channel to generate a key uniqly describing it's current state, and a description of key usage.

  Specified by:
    `generateKey` in interface `IMultithreadedCacheable`

### getErrout

    static java.io.PrintWriter getErrout()
                                  throws java.io.FileNotFoundException

  Throws:
    `java.io.FileNotFoundException`

### isCacheValid

    public boolean isCacheValid(java.lang.Object validity,
                                java.lang.String uid)

  Description copied from interface: `IMultithreadedCacheable`
  Requests the channel to verify validity of the retreived cache based on the validator object.

  Specified by:
    `isCacheValid` in interface `IMultithreadedCacheable`

### getContentType

    public java.lang.String getContentType(java.lang.String uid)

  Description copied from interface: `IMultithreadedMimeResponse`
  Returns the MIME type of the content.

  Specified by:
    `getContentType` in interface `IMultithreadedMimeResponse`

### getInputStream

    public java.io.InputStream getInputStream(java.lang.String uid)
                                       throws java.io.IOException

  Description copied from interface: `IMultithreadedMimeResponse`
  Returns the MIME content in the form of an input stream. Returns null if the code needs the OutputStream object

  Specified by:
    `getInputStream` in interface `IMultithreadedMimeResponse`
  Throws:
    `java.io.IOException`

### downloadData

    public void downloadData(java.io.OutputStream out,
                             java.lang.String uid)
                      throws java.io.IOException

  Description copied from interface: `IMultithreadedMimeResponse`
  Pass the OutputStream object to the download code if it needs special handling (like outputting a Zip file).

  Specified by:
    `downloadData` in interface `IMultithreadedMimeResponse`
  Throws:
    `java.io.IOException`

### getName

    public java.lang.String getName(java.lang.String uid)

  Description copied from interface: `IMultithreadedMimeResponse`
  Returns the name of the MIME file.

  Specified by:
    `getName` in interface `IMultithreadedMimeResponse`

### getHeaders

    public java.util.Map getHeaders(java.lang.String uid)

  Description copied from interface: `IMultithreadedMimeResponse`
  Returns a list of header values that can be set in the HttpResponse. Returns null if no headers need to be set.

  Specified by:
    `getHeaders` in interface `IMultithreadedMimeResponse`

### reportDownloadError

    public void reportDownloadError(java.lang.Exception e)

  Description copied from interface: `IMultithreadedMimeResponse`
  Let the channel know that there were problems with the download

  Specified by:
    `reportDownloadError` in interface `IMultithreadedMimeResponse`

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD