http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-small_25_c5ddfc_40x40.png ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-small_25_c5ddfc_40x40.png b/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-small_25_c5ddfc_40x40.png new file mode 100644 index 0000000..c664c51 Binary files /dev/null and b/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-small_25_c5ddfc_40x40.png differ
http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-thick_20_e69700_40x40.png ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-thick_20_e69700_40x40.png b/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-thick_20_e69700_40x40.png new file mode 100644 index 0000000..6aed97a Binary files /dev/null and b/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-thick_20_e69700_40x40.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-thick_22_1484e6_40x40.png ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-thick_22_1484e6_40x40.png b/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-thick_22_1484e6_40x40.png new file mode 100644 index 0000000..43ba34e Binary files /dev/null and b/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-thick_22_1484e6_40x40.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-thick_26_2293f7_40x40.png ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-thick_26_2293f7_40x40.png b/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-thick_26_2293f7_40x40.png new file mode 100644 index 0000000..68306d1 Binary files /dev/null and b/taverna-server-webapp/src/main/resources/static/ui-bg_diagonals-thick_26_2293f7_40x40.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/static/ui-bg_flat_0_e69700_40x100.png ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/static/ui-bg_flat_0_e69700_40x100.png b/taverna-server-webapp/src/main/resources/static/ui-bg_flat_0_e69700_40x100.png new file mode 100644 index 0000000..f567c28 Binary files /dev/null and b/taverna-server-webapp/src/main/resources/static/ui-bg_flat_0_e69700_40x100.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/static/ui-bg_flat_0_e6b900_40x100.png ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/static/ui-bg_flat_0_e6b900_40x100.png b/taverna-server-webapp/src/main/resources/static/ui-bg_flat_0_e6b900_40x100.png new file mode 100644 index 0000000..5c5494f Binary files /dev/null and b/taverna-server-webapp/src/main/resources/static/ui-bg_flat_0_e6b900_40x100.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/static/ui-bg_highlight-soft_100_f9f9f9_1x100.png ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/static/ui-bg_highlight-soft_100_f9f9f9_1x100.png b/taverna-server-webapp/src/main/resources/static/ui-bg_highlight-soft_100_f9f9f9_1x100.png new file mode 100644 index 0000000..9a46d19 Binary files /dev/null and b/taverna-server-webapp/src/main/resources/static/ui-bg_highlight-soft_100_f9f9f9_1x100.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/static/ui-bg_inset-hard_100_eeeeee_1x100.png ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/static/ui-bg_inset-hard_100_eeeeee_1x100.png b/taverna-server-webapp/src/main/resources/static/ui-bg_inset-hard_100_eeeeee_1x100.png new file mode 100644 index 0000000..f811f30 Binary files /dev/null and b/taverna-server-webapp/src/main/resources/static/ui-bg_inset-hard_100_eeeeee_1x100.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/static/ui-icons_0a82eb_256x240.png ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/static/ui-icons_0a82eb_256x240.png b/taverna-server-webapp/src/main/resources/static/ui-icons_0a82eb_256x240.png new file mode 100644 index 0000000..755fe99 Binary files /dev/null and b/taverna-server-webapp/src/main/resources/static/ui-icons_0a82eb_256x240.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/static/ui-icons_0b54d5_256x240.png ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/static/ui-icons_0b54d5_256x240.png b/taverna-server-webapp/src/main/resources/static/ui-icons_0b54d5_256x240.png new file mode 100644 index 0000000..98705f9 Binary files /dev/null and b/taverna-server-webapp/src/main/resources/static/ui-icons_0b54d5_256x240.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/static/ui-icons_5fa5e3_256x240.png ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/static/ui-icons_5fa5e3_256x240.png b/taverna-server-webapp/src/main/resources/static/ui-icons_5fa5e3_256x240.png new file mode 100644 index 0000000..3f67eca Binary files /dev/null and b/taverna-server-webapp/src/main/resources/static/ui-icons_5fa5e3_256x240.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/static/ui-icons_fcdd4a_256x240.png ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/static/ui-icons_fcdd4a_256x240.png b/taverna-server-webapp/src/main/resources/static/ui-icons_fcdd4a_256x240.png new file mode 100644 index 0000000..de76ce2 Binary files /dev/null and b/taverna-server-webapp/src/main/resources/static/ui-icons_fcdd4a_256x240.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/static/ui-icons_ffffff_256x240.png ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/static/ui-icons_ffffff_256x240.png b/taverna-server-webapp/src/main/resources/static/ui-icons_ffffff_256x240.png new file mode 100644 index 0000000..42f8f99 Binary files /dev/null and b/taverna-server-webapp/src/main/resources/static/ui-icons_ffffff_256x240.png differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/version.properties ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/version.properties b/taverna-server-webapp/src/main/resources/version.properties new file mode 100644 index 0000000..7ddb7d3 --- /dev/null +++ b/taverna-server-webapp/src/main/resources/version.properties @@ -0,0 +1,5 @@ +# What is the version of the server? Bind this in automatically. +tavernaserver.version=${project.version} +tavernaserver.revision.describe=${git.commit.id.describe} +tavernaserver.branch=${git.branch} +tavernaserver.timestamp=${git.build.time} http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/resources/welcome.html ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/resources/welcome.html b/taverna-server-webapp/src/main/resources/welcome.html new file mode 100644 index 0000000..f80da4a --- /dev/null +++ b/taverna-server-webapp/src/main/resources/welcome.html @@ -0,0 +1,122 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> +<title>Taverna Server %{VERSION}</title> +</head> +<body> +<h1>Taverna Server %{VERSION}</h1> +<div style="text-align;center"> + <p> + <i>Note that this is a pre-release version. Significant known + issues remain open and it is not guaranteed that the service API + will be stable.</i> + </p> +</div> +<p>For a full list of operations, see the <a + href="%{BASEURL}/services">service listing</a> generated by Apache +CXF, which indicates where to access the WSDL and WADL descriptions of +the T2Server interface.</p> +<p>What follows below is a simple guide to using the server. It does +<i>not</i> cover all the features; a much more extensive guide is available on +<a href="http://www.mygrid.org.uk/dev/wiki/display/taverna/Taverna+Server+2.4" +>the myGrid website</a>.</p> +<h2>5 Minute Guide to Using the REST API</h2> +<p>Taverna Server %{VERSION} supports both REST and SOAP APIs; you may use either API +to access the service and any of the workflow runs hosted by the service. This +simple guide just discusses the REST API.</p> +<ol> + <li> + <p>The client starts by creating a workflow run. This is done by POSTing a + T2flow document to the service at the address <tt>%{BASEURL}/rest/runs</tt> + with the content type <tt>application/vnd.taverna.t2flow+xml</tt>.</p> + <p>The result of the POST is an <tt>HTTP 201 Created</tt> that gives the + location of the created run (in a <tt>Location</tt> header), + <tt>%{BASEURL}/rest/runs/<b>UUID</b></tt> (where <tt><b>UUID</b></tt> is a + unique string that identifies the particular run; this is also the name of + the run that you would use in the SOAP interface). Note that the run is not + yet actually doing anything.</p> + </li> + <li> + <p>Next, you need to set up the inputs to the workflow ports. To set the + input port, <tt><b>FOO</b></tt>, to have the value <tt><b>BAR</b></tt>, you + would PUT a message like this to the URI + <tt>%{BASEURL}/rest/runs/<b>UUID</b>/input/input/<b>FOO</b></tt> + </p> + <blockquote><pre><t2sr:runInput xmlns:t2sr="http://ns.taverna.org.uk/2010/xml/server/rest/"> + <t2sr:value><b>BAR</b></t2sr:value> +</t2sr:runInput></pre></blockquote> + </li> + <li> + <p>Now you can start the file running. This is done by using a PUT to set + <tt>%{BASEURL}/rest/runs/<b>UUID</b>/status</tt> to the plain text value + <tt>Operating</tt>.</p> + </li> + <li> + <p>Now you need to poll, waiting for the workflow to finish. To discover the + state of a run, you can (at any time) do a GET on + <tt>%{BASEURL}/rest/runs/<b>UUID</b>/status</tt>; when the workflow has + finished executing, this will return <tt>Finished</tt> instead of + <tt>Operating</tt> (or <tt>Initialized</tt>, the starting state).</p> + </li> + <li> + <p>Every workflow run has an expiry time, after which it will be destroyed + and all resources (i.e., local files) associated with it cleaned up. By + default in this release, this is 20 minutes after initial creation. To see + when a particular run is scheduled to be disposed of, do a GET on + <tt>%{BASEURL}/rest/runs/<b>UUID</b>/expiry</tt>; you may set the time when + the run is disposed of by PUTting a new time to that same URI. Note that + this includes not just the time when the workflow is executing, but also + when the input files are being created beforehand and when the results are + being downloaded afterwards; you are advised to make your clients regularly + advance the expiry time while the run is in use.</p> + </li> + <li> + <p>The outputs from the workflow are files created in the <tt>out</tt> + subdirectory of the run's working directory. The contents of the + subdirectory can be read by doing a GET on + <tt>%{BASEURL}/rest/runs/<b>UUID</b>/wd/out</tt> which will return an XML + document describing the contents of the directory, with links to each of the + files within it. Doing a GET on those links will retrieve the actual created + files (as uninterpreted binary data).</p> + <p>Thus, if a single output <tt><b>FOO.OUT</b></tt> was produced from the + workflow, it would be written to the file that can be retrieved from + <tt>%{BASEURL}/rest/runs/<b>UUID</b>/wd/out/<b>FOO.OUT</b></tt> and the + result of the GET on <tt>%{BASEURL}/rest/runs/<b>UUID</b>/wd/out</tt> would + look something like this:</p> + <blockquote><pre><t2sr:directoryContents xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:t2sr="http://ns.taverna.org.uk/2010/xml/server/rest" + xmlns:t2s="http://ns.taverna.org.uk/2010/xml/server/"> + <t2s:file xlink:href="%{BASEURL}/rest/runs/<b>UUID</b>/wd/out/<b>FOO.OUT</b>" + t2sr:name="<b>FOO.OUT</b>">out/<b>FOO.OUT</b></t2s:file> +</t2sr:directoryContents></pre></blockquote> + </li> + <li> + <p>The standard output and standard error from the T2 Command Line Executor + subprocess can be read via properties of the special I/O listener. To do + that, do a GET on + <tt>%{BASEURL}/rest/runs/<b>UUID</b>/listeners/io/properties/<b>stdout</b></tt> + (or <tt>.../<b>stderr</b></tt>). Once the subprocess has finished executing, + the I/O listener will provide a third property containing the exit code of + the subprocess, called <tt>exitcode</tt>.</p> <p>Note that the supported set + of listeners and properties will be subject to change in future versions of + the server, and should not be relied upon.</p> + </li> + <li> + <p>Once you have finished, destroy the run by doing a DELETE on + <tt>%{BASEURL}/rest/runs/<b>UUID</b></tt>. Once you have done that, none of + the resources associated with the run (including both input and output + files) will exist any more. If the run is still executing, this will also + cause it to be stopped.</p> + </li> +</ol> +<p>All operations described above have equivalents in the +<a href="%{BASEURL}/soap?wsdl">SOAP service interface</a>.</p> + +<div> +<hr> +<p><small>Copyright © 2010–2014. The University of Manchester.</small></p> +<p><small>Software Release ID: ${project.version} (commit: ${git.branch})</small></p> +</div> +</body> +</html> http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/META-INF/MANIFEST.MF ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/META-INF/MANIFEST.MF b/taverna-server-webapp/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 0000000..5e94951 --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/META-INF/cxf/org.apache.cxf.Logger ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/META-INF/cxf/org.apache.cxf.Logger b/taverna-server-webapp/src/main/webapp/META-INF/cxf/org.apache.cxf.Logger new file mode 100644 index 0000000..4fd9372 --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/META-INF/cxf/org.apache.cxf.Logger @@ -0,0 +1 @@ +org.apache.cxf.common.logging.Log4jLogger http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/META-INF/persistence.xml ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/META-INF/persistence.xml b/taverna-server-webapp/src/main/webapp/META-INF/persistence.xml new file mode 100644 index 0000000..afd640a --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/META-INF/persistence.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<persistence version="1.0" + xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd "> + <persistence-unit name="TavernaServer"> + <class>org.taverna.server.master.WebappState</class> + <class>org.taverna.server.master.identity.User</class> + <class>org.taverna.server.master.localworker.PersistedState</class> + <class>org.taverna.server.master.notification.atom.Event</class> + <class>org.taverna.server.master.usage.UsageRecord</class> + <class>org.taverna.server.master.worker.RunConnection</class> + <exclude-unlisted-classes>true</exclude-unlisted-classes> + </persistence-unit> +</persistence> http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/WEB-INF/beans.xml ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/WEB-INF/beans.xml b/taverna-server-webapp/src/main/webapp/WEB-INF/beans.xml new file mode 100644 index 0000000..73990a7 --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/WEB-INF/beans.xml @@ -0,0 +1,518 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2010-2011 The University of Manchester See the file "LICENSE" + for license terms. --> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" + xmlns:task="http://www.springframework.org/schema/task" xmlns:util="http://www.springframework.org/schema/util" + default-lazy-init="false" + xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> + + <bean id="webapp" class="org.taverna.server.master.TavernaServer"> + <property name="policy" ref="worker.policy" /> + <property name="runStore" ref="worker.rundb" /> + <property name="fileUtils" ref="fileUtils" /> + <property name="contentsDescriptorBuilder" ref="contentsDescriptorBuilder" /> + <property name="notificationEngine" ref="notificationFabric" /> + <property name="support" ref="webapp.support" /> + <property name="eventSource" ref="dispatch.atom" /> + <property name="interactionFeed" value="${taverna.interaction.feed_path}" /> + <lookup-method name="makeRunInterface" bean="run.coreView.prototype" /> + <lookup-method name="getPolicyDescription" bean="webapp.policyView" /> + </bean> + + <bean id="webapp.support" class="org.taverna.server.master.TavernaServerSupport"> + <property name="policy" ref="worker.policy" /> + <property name="listenerFactory" ref="localworker.factory" /> + <property name="runFactory" ref="localworker.factory" /> + <property name="fileUtils" ref="fileUtils" /> + <property name="runStore" ref="worker.rundb" /> + <property name="stateModel" ref="webapp.state" /> + <property name="idMapper" ref="IdentityMapper" /> + <property name="invocationCounter" ref="webapp.invocationCounter" /> + <property name="webapp" ref="webapp" /> + <property name="contentTypeMap"> + <map key-type="java.lang.String" value-type="java.lang.String"> + <description>Maps suffixes (post '.') to content types.</description> + <entry key="baclava" value="application/vnd.taverna.baclava+xml" /> + <entry key="robundle.zip" value="application/vnd.wf4ever.robundle+zip" /> + </map> + </property> + <property name="capabilitySource" ref="capabilities" /> + </bean> + + <bean id="capabilities" class="org.taverna.server.master.utils.CapabilityLister" /> + + <bean id="webapp.policyView" class="org.taverna.server.master.PolicyREST"> + <property name="support" ref="webapp.support" /> + <property name="policy" ref="worker.policy" /> + <property name="listenerFactory" ref="localworker.factory" /> + <property name="notificationEngine" ref="notificationFabric" /> + </bean> + + <bean id="contentsDescriptorBuilder" class="org.taverna.server.master.ContentsDescriptorBuilder"> + <property name="uriBuilderFactory" ref="webapp" /> + <property name="fileUtils" ref="fileUtils" /> + </bean> + + <bean id="webapp.state" class="org.taverna.server.master.ManagementState"> + <description>The initial state of the webapp.</description> + <property name="logIncomingWorkflows" value="${default.logworkflows}" /> + <property name="allowNewWorkflowRuns" value="${default.permitsubmit}" /> + <property name="logOutgoingExceptions" value="${default.logexceptions}" /> + <property name="persistenceManagerBuilder" ref="pmb" /> + <property name="self" ref="webapp.state" /> + </bean> + + <bean id="webapp.invocationCounter" class="org.taverna.server.master.utils.InvocationCounter" /> + <bean id="webapp.perfLogger" class="org.taverna.server.master.utils.CallTimeLogger"> + <property name="threshold" value="${calltime.logthreshold:4000000}" /> + </bean> + + <bean id="run.coreView.prototype" scope="prototype" + class="org.taverna.server.master.RunREST"> + <property name="support" ref="webapp.support" /> + <property name="cdBuilder" ref="contentsDescriptorBuilder" /> + <lookup-method name="makeSecurityInterface" bean="run.securityView.prototype" /> + <lookup-method name="makeInputInterface" bean="run.inputView.prototype" /> + <lookup-method name="makeListenersInterface" bean="run.listenersView.prototype" /> + <lookup-method name="makeDirectoryInterface" bean="run.directoryView.prototype" /> + <lookup-method name="makeInteractionFeed" bean="run.interactionFeed.prototype" /> + </bean> + + <bean id="run.directoryView.prototype" scope="prototype" + class="org.taverna.server.master.DirectoryREST"> + <property name="support" ref="webapp.support" /> + <property name="fileUtils" ref="fileUtils" /> + </bean> + + <bean id="run.listenersView.prototype" scope="prototype" + class="org.taverna.server.master.ListenersREST"> + <property name="support" ref="webapp.support" /> + <lookup-method name="makeListenerInterface" bean="run.singleListenerView.prototype" /> + </bean> + + <bean id="run.singleListenerView.prototype" scope="prototype" + class="org.taverna.server.master.SingleListenerREST"> + <lookup-method name="makePropertyInterface" bean="run.propertyView.prototype" /> + </bean> + + <bean id="run.propertyView.prototype" scope="prototype" + class="org.taverna.server.master.ListenerPropertyREST"> + <property name="support" ref="webapp.support" /> + </bean> + + <bean id="run.inputView.prototype" scope="prototype" + class="org.taverna.server.master.InputREST"> + <property name="support" ref="webapp.support" /> + <property name="cdBuilder" ref="contentsDescriptorBuilder" /> + <property name="fileUtils" ref="fileUtils" /> + </bean> + + <bean id="run.securityView.prototype" scope="prototype" + class="org.taverna.server.master.RunSecurityREST"> + <property name="support" ref="webapp.support" /> + </bean> + + <bean id="run.interactionFeed.prototype" scope="prototype" + class="org.taverna.server.master.InteractionFeed"> + <property name="interactionFeedSupport" ref="interactionFeed" /> + </bean> + + <bean id="feed" class="org.taverna.server.master.notification.atom.AtomFeed"> + <property name="eventSource" ref="dispatch.atom" /> + <property name="support" ref="webapp.support" /> + <property name="feedLanguage" value="${atom.language}" /> + <property name="abdera" ref="abdera" /> + </bean> + + <bean id="admin" class="org.taverna.server.master.admin.AdminBean"> + <property name="adminHtmlFile" value="/admin.html" /> + <property name="counter" ref="webapp.invocationCounter" /> + <property name="factory" ref="localworker.factory" /> + <property name="localWorkerModel" ref="localworker.state" /> + <property name="runDB" ref="worker.rundb" /> + <property name="state" ref="webapp.state" /> + <property name="usageRecords" ref="usageRecordSink" /> + <property name="userStore" ref="userStore" /> + </bean> + + <bean id="IdentityMapper" class="org.taverna.server.master.identity.CompositeIDMapper"> + <property name="identityMappers"> + <list> + <bean id="AuthorityBased" + class="org.taverna.server.master.identity.AuthorityDerivedIDMapper"> + <description>Derives the local user identity to use for execution + from the LOCALUSER_* Spring Security authority. Thus, if the user + has "LOCALUSER_foo", they will be executing as the local + user id "foo".</description> + </bean> + <bean id="SelfAccess" + class="org.taverna.server.master.identity.WorkflowInternalAuthProvider.WorkflowSelfIDMapper"> + <description>Handles the case where a workflow is accessing itself for + the purpose of publishing interactions.</description> + <property name="runStore" ref="worker.rundb" /> + </bean> + <bean id="Extracting" class="org.taverna.server.master.identity.NameIDMapper"> + <description>An alternate mechanism for mapping users. This tries + to use an RE to extract the user name from the principal name. + </description> + <property name="regexp" value="${localusernameregexp}"> + <description>An optional regexp to extract the local user name + from the principal's string description. The first capturing + group will be the result of the mapping operation. + </description> + </property> + </bean> + <bean id="Constant" class="org.taverna.server.master.identity.ConstantIDMapper"> + <description>How to map web principals to local users. This one + maps everyone to the same user, "taverna". + </description> + <property name="constantId" value="${default.localusername}" /> + </bean> + </list> + </property> + </bean> + + <bean id="passwordEncoder" + class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" /> + <bean class="org.taverna.server.master.identity.UserStore" id="userStore"> + <property name="persistenceManagerBuilder" ref="pmb" /> + <property name="baselineUserProperties"> + <util:properties location="/WEB-INF/security/users.properties" /> + </property> + <property name="defaultLocalUser" value="${default.localusername}" /> + <property name="encoder" ref="passwordEncoder" /> + </bean> + + <!-- <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> + <property name="dataSource" ref="dataSource" /> <property name="hibernateProperties"> + <props> <prop key="hibernate.dialect">org.hibernate.dialect.DerbyDialect</prop> + <prop key="hibernate.hbm2ddl.auto">create</prop> </props> </property> <property + name="annotatedClasses"> <list> </list> </property> </bean> --> + <bean id="pmb" class="org.taverna.server.master.utils.JDOSupport.PersistenceManagerBuilder"> + <property name="persistenceManagerFactory"> + <bean id="pmf" class="org.datanucleus.api.jdo.JDOPersistenceManagerFactory" + destroy-method="close"> + <property name="connectionFactory" ref="dataSource" /> + <property name="nontransactionalRead" value="true" /> + <property name="persistenceProperties"> + <props> + <prop key="datanucleus.storeManagerType">rdbms</prop> + <prop key="datanucleus.autoCreateTables">true</prop> + <prop key="datanucleus.autoCreateTables">true</prop> + <prop key="datanucleus.validateTables">true</prop> + <prop key="datanucleus.autoCreateColumns">true</prop> + <prop key="datanucleus.autoCreateConstraints">true</prop> + <prop key="datanucleus.validateConstraints">true</prop> + <prop key="datanucleus.autoCreateSchema">true</prop> + <prop key="datanucleus.PersistenceUnitName">TavernaServer</prop> + <prop key="datanucleus.rdbms.datastoreAdapterClassName" + >org.taverna.server.master.utils.LoggingDerbyAdapter</prop> + </props> + </property> + </bean> + </property> + </bean> + <bean id="transactionAspect" + class="org.taverna.server.master.utils.JDOSupport.TransactionAspect" /> + + <bean id="systemPrereqs" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> + <description>http://stackoverflow.com/questions/3339736/set-system-property-with-spring-configuration-file</description> + <property name="targetObject" value="#{@systemProperties}" /> + <property name="targetMethod" value="putAll" /> + <property name="arguments"> + <util:properties> + <prop key="derby.stream.error.field">org.taverna.server.master.utils.DerbyUtils.TO_LOG</prop> + <prop key="derby.stream.error.logSeverityLevel">30000</prop> + </util:properties> + </property> + </bean> + <!-- TODO: control the location of the database properly, or move to JNDI + TODO: review whether what we are doing now is correct! --> + <bean id="dataSource" class="org.taverna.server.master.utils.WebappAwareDataSource"> + <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" /> + <property name="url" + value="jdbc:derby:directory:%{WEBAPPROOT}tavernaserver;create=true" /> + <!-- Needed for Derby... --> + <property name="shutdownUrl" + value="jdbc:derby:directory:%{WEBAPPROOT}tavernaserver;shutdown=true" /> + <property name="username" value="taverna" /> + <property name="password" value="" /> + <property name="contextualizer" ref="contextualizer" /> + </bean> + + <bean id="contextualizer" class="org.taverna.server.master.utils.Contextualizer" /> + + <bean id="usageRecordSink" class="org.taverna.server.master.usage.UsageRecordRecorder"> + <property name="state" ref="webapp.state" /> + <property name="contextualizer" ref="contextualizer" /> + <property name="persistenceManagerBuilder" ref="pmb" /> + <property name="self" ref="usageRecordSink" /> + <property name="disableDB" value="${usage.disableDB}" /> + <property name="logFile" value="${usage.logFile}" /> + </bean> + + <context:property-placeholder + ignore-unresolvable="true" order="2" properties-ref="default-factory-properties" /> + <util:properties id="default-factory-properties"> + <prop key="backEndFactory">org.taverna.server.master.localworker.IdAwareForkRunFactory</prop> + </util:properties> + + <!-- This bean configuration replaced with org.taverna.server.master.localworker.LocalWorkerFactory --> + <!-- <bean id="localworker.factory" scope="singleton" lazy-init="false" + class="${backEndFactory}"> <description> The simple policy manager and factory + for the baseline localworker case. </description> <property name="state" + ref="localworker.state" /> <property name="runDB" ref="worker.rundb" + /> --> + <!-- Handled by autowiring to make type-resilient. --> + <!-- <property name="idMapper" ref="IdentityMapper" /> --> + <!-- <property name="securityContextFactory" ref="worker.securityContext" + /> <property name="usageRecordSink" ref="usageRecordSink" /> <property name="URProcessorPool" + ref="URThreads" /> </bean> --> + + <!-- <task:executor id="URThreads" pool-size="${pool.size}" /> --> + + <bean id="worker.securityContext" + class="org.taverna.server.master.worker.SecurityContextFactory"> + <property name="runDatabase" ref="worker.rundb" /> + <property name="filenameConverter" ref="fileUtils" /> + <property name="x500Utils" ref="x500Utils" /> + <property name="httpRealm" value="${http.realmName}" /> + <property name="uriSource" ref="webapp" /> + <property name="certificateFetcher" ref="certificateChainFetcher" /> + <property name="passwordIssuer" ref="passwordIssuer" /> + </bean> + + <bean id="passwordIssuer" class="org.taverna.server.master.worker.PasswordIssuer"> + <!-- <property name="length" value="8" /> --> + </bean> + + <bean id="certificateChainFetcher" class="org.taverna.server.master.utils.CertificateChainFetcher"> + <property name="secure" value="${fetchCertificateChain}" /> + </bean> + + <bean id="localworker.state" class="org.taverna.server.master.localworker.LocalWorkerState" + scope="singleton" lazy-init="false"> + <description> + The state of the simple factory for the identity-aware + local worker. + </description> + <property name="defaultLifetime" value="${default.lifetime}"> + <description>How long the run lasts for by default, in seconds. + </description> + </property> + <property name="maxRuns" value="${default.runlimit}"> + <description>The maximum simultaneous number of runs.</description> + </property> + <property name="operatingLimit" value="${default.operatinglimit}"> + <description> + The maximum number of runs that are in the Operating state, + i.e., actually running with a process consuming resources. + </description> + </property> + <property name="extraArgs"> + <description>Any extra arguments (memory control, etc.) to pass to + the spawned subprocesses. + </description> + <list> + </list> + </property> + <property name="waitSeconds" value="40"> + <description>An upper bound (in seconds) on the time to wait for a + subprocess to start before failing it. + </description> + </property> + <property name="sleepMS" value="1000"> + <description>The time to wait (in milliseconds) between polling for + the subprocess to complete its registration. + </description> + </property> + <property name="persistenceManagerBuilder" ref="pmb" /> + <!-- <property name="javaBinary"> <description>The name of the java executable + used to run the server worker. Defaults to the executable used to run the + hosting environment.</description> </property> --> + <!-- <property name="serverWorkerJar"> <description>The full path to the + executable JAR file containing the implementation of the server worker.</description> + </property> --> + <!-- <property name="executeWorkflowScript"> <description>The full path + to the executeworkflow.sh in either the Taverna 2 Workbench distribution + or the Taverna 2 Command Line distribution.</description> </property> --> + <property name="self" ref="localworker.state" /> + <property name="defaultExecuteWorkflowScript" value="${executeWorkflowScript:NONE}" /> + </bean> + + <bean id="worker.policy" class="org.taverna.server.master.worker.PolicyImpl"> + <description> + The implementation of the access control policy supported + by the localworker run engine. + </description> + <property name="limits" ref="localworker.state" /> + <property name="runDB" ref="worker.rundb" /> + </bean> + <bean id="worker.rundb" class="org.taverna.server.master.worker.RunDatabase"> + <property name="notifier" ref="worker.notifier" /> + <property name="typeNotifiers"> + <list> + <ref bean="cn.email" /> + <ref bean="cn.sms" /> + <ref bean="cn.twitter" /> + <!-- <ref bean="cn.xmpp"/> --> + </list> + </property> + <property name="notificationEngine" ref="notificationFabric" /> + <property name="dao" ref="worker.runDAO" /> + </bean> + <bean id="cn.email" + class="org.taverna.server.master.worker.VelocityCompletionNotifier"> + <property name="name" value="email" /> + <property name="subject" value="Workflow run finished executing" /> + <property name="velocityEngine" ref="velocity" /> + <property name="uriBuilderFactory" ref="webapp" /> + </bean> + <bean id="cn.sms" + class="org.taverna.server.master.worker.VelocityCompletionNotifier"> + <property name="name" value="sms" /> + <property name="subject" value="Run finished" /> + <property name="velocityEngine" ref="velocity" /> + <property name="uriBuilderFactory" ref="webapp" /> + </bean> + <bean id="cn.twitter" + class="org.taverna.server.master.worker.VelocityCompletionNotifier"> + <property name="name" value="twitter" /> + <property name="subject" value="Run finished" /> + <property name="velocityEngine" ref="velocity" /> + <property name="uriBuilderFactory" ref="webapp" /> + </bean> + + <bean id="worker.runDAO" class="org.taverna.server.master.worker.RunDatabaseDAO"> + <description> + The implementation of the catalog of workflow runs + supported by the localworker run engine. + </description> + <property name="persistenceManagerBuilder" ref="pmb" /> + <property name="facade" ref="worker.rundb" /> + </bean> + <task:scheduled-tasks scheduler="taskScheduler"> + <task:scheduled ref="worker.rundb" method="cleanNow" + fixed-delay="${purge.interval}" /> + <task:scheduled ref="worker.rundb" method="checkForFinishNow" + fixed-delay="${finish.interval}" /> + <task:scheduled ref="dispatch.atom" method="deleteExpiredEvents" + fixed-delay="${atom.cleaninterval}" /> + </task:scheduled-tasks> + + <bean id="notificationFabric" + class="org.taverna.server.master.notification.NotificationEngine"> + <property name="dispatchers"> + <list> + <ref bean="dispatch.email" /> + <ref bean="dispatch.twitter" /> + <ref bean="dispatch.xmpp" /> + <ref bean="dispatch.sms" /> + </list> + </property> + <property name="universalDispatchers"> + <list> + <ref bean="dispatch.atom" /> + </list> + </property> + </bean> + + <bean id="dispatch.email" class="org.taverna.server.master.notification.EmailDispatcher"> + <property name="from" value="${email.from}" /> + <property name="messageContentType" value="${email.type}" /> + <property name="cooldownSeconds" value="${message.cooldown}" /> + <property name="smtpHost" value="${email.host}" /> + <property name="sender"> + <bean class="org.springframework.mail.javamail.JavaMailSenderImpl" + id="javamail"> + <property name="host" value="${email.host}" /> + </bean> + </property> + </bean> + <bean id="dispatch.twitter" + class="org.taverna.server.master.notification.TwitterDispatcher"> + <property name="cooldownSeconds" value="${message.cooldown}" /> + <property name="accessToken" value="${twitter.oauth.accessToken}" /> + <property name="accessSecret" value="${twitter.oauth.accessTokenSecret}" /> + </bean> + <bean id="dispatch.xmpp" class="org.taverna.server.master.notification.JabberDispatcher"> + <property name="resource" value="${xmpp.resource}" /> + <property name="host" value="${xmpp.service}" /> + <property name="username" value="${xmpp.user}" /> + <property name="password" value="${xmpp.password}" /> + </bean> + <bean id="dispatch.sms" class="org.taverna.server.master.notification.SMSDispatcher"> + <property name="usernameField" value="${sms.userfield}" /> + <property name="passwordField" value="${sms.passfield}" /> + <property name="destinationField" value="${sms.destfield}" /> + <property name="messageField" value="${sms.msgfield}" /> + <property name="cooldownSeconds" value="${message.cooldown}" /> + </bean> + + <bean id="dispatch.atom" class="org.taverna.server.master.notification.atom.EventDAO"> + <property name="expiryAgeDays" value="${atom.lifespan}" /> + <property name="persistenceManagerBuilder" ref="pmb" /> + <property name="uriBuilderFactory" ref="feed" /> + <property name="self" ref="dispatch.atom" /> + </bean> + + <bean id="worker.notifier" + class="org.taverna.server.master.worker.SimpleFormattedCompletionNotifier"> + <property name="subject" value="${message.termination.subject}" /> + <property name="messageFormat" value="${message.termination.body}" /> + <property name="name" value="fallback"/> + </bean> + + <bean id="fileUtils" class="org.taverna.server.master.utils.FilenameUtils" /> + <bean id="x500Utils" class="org.taverna.server.master.utils.X500Utils" /> + <task:scheduler id="taskScheduler" pool-size="${pool.size}" /> + + <bean class="org.taverna.server.master.utils.JCECheck" id="JCECheck" /> + + <bean class="org.taverna.server.master.interaction.InteractionFeedSupport" + id="interactionFeed" scope="singleton"> + <property name="abdera" ref="abdera" /> + <property name="support" ref="webapp.support" /> + <property name="uriBuilder" ref="webapp" /> + <property name="utils" ref="fileUtils" /> + </bean> + <bean class="org.taverna.server.master.rest.handler.FeedHandler" id="atomFeedHandler"> + <property name="abdera" ref="abdera" /> + </bean> + <bean class="org.taverna.server.master.rest.handler.EntryHandler" id="atomEntryHandler"> + <property name="abdera" ref="abdera" /> + </bean> + + <bean id="authProvider" class="org.taverna.server.master.identity.StrippedDownAuthProvider"> + <property name="passwordEncoder" ref="passwordEncoder" /> + <property name="userDetailsService"> + <bean class="org.taverna.server.master.identity.UserStore.CachedUserStore"> + <property name="realStore" ref="userStore" /> + </bean> + </property> + </bean> + <bean id="workflowInternalAuthProvder" + class="org.taverna.server.master.identity.WorkflowInternalAuthProvider"> + <property name="dao" ref="worker.runDAO" /> + <property name="cacheBound" value="${default.runlimit}" /> + </bean> + <bean id="velocity" class="org.apache.velocity.app.VelocityEngine" + init-method="init" lazy-init="false"> + <constructor-arg> + <props> + <prop key="input.encoding">UTF-8</prop> + <prop key="output.encoding">UTF-8</prop> + <prop key="runtime.log.logsystem.class">org.apache.velocity.runtime.log.Log4JLogChute</prop> + <prop key="runtime.log.logsystem.log4j.logger">org.taverna.server.master.worker.VelocityCompletionNotifier</prop> + <prop key="resource.loader">class</prop> + <prop key="class.resource.loader.description">Velocity Classpath Resource Loader</prop> + <prop key="class.resource.loader.class">org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader</prop> + </props> + </constructor-arg> + </bean> + <bean id="abdera" class="org.apache.abdera.Abdera"/> +</beans> http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/WEB-INF/insecure.xml ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/WEB-INF/insecure.xml b/taverna-server-webapp/src/main/webapp/WEB-INF/insecure.xml new file mode 100644 index 0000000..92c0b03 --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/WEB-INF/insecure.xml @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2010-2012 The University of Manchester See the file "LICENSE" + for license terms. --> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:security="http://www.springframework.org/schema/security" + xmlns:context="http://www.springframework.org/schema/context" + xmlns:util="http://www.springframework.org/schema/util" + xsi:schemaLocation="http://cxf.apache.org/configuration/security http://cxf.apache.org/schemas/configuration/security.xsd + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> + + <description> + The Taverna Server bean, plus supporting configuration. + THIS IS AN INSECURE CONFIGURATION! + </description> + + <import resource="webappBeans.xml" /> + + <context:property-placeholder order="0" ignore-unresolvable="true" + properties-ref="security.override.properties" /> + <util:properties id="security.override.properties"> + <prop key="backEndFactory">org.taverna.server.master.localworker.ForkRunFactory</prop> + <prop key="fetchCertificateChain">false</prop> + <prop key="suppressRewriteEngine">true</prop> + <prop key="requiredChannel">any</prop> + </util:properties> + + <!-- No JMX support; assume too unsafe. --> +</beans> http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/WEB-INF/lib/org.taverna.server.master.worker.VelocityCompletionNotifier_email.vtmpl ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/WEB-INF/lib/org.taverna.server.master.worker.VelocityCompletionNotifier_email.vtmpl b/taverna-server-webapp/src/main/webapp/WEB-INF/lib/org.taverna.server.master.worker.VelocityCompletionNotifier_email.vtmpl new file mode 100644 index 0000000..d706fed --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/WEB-INF/lib/org.taverna.server.master.worker.VelocityCompletionNotifier_email.vtmpl @@ -0,0 +1,15 @@ +Your workflow, $name, has #if( $prop_exitcode == 0)finished#{else}failed#{end}. + +It started execution at ${startTime}. +It finished execution at ${finishTime}. + +For further information, go to $uriBuilder.build() before the run is +automatically deleted (currently scheduled to happen at ${expiryTime}). + +#if( $prop_exitcode == 0) +Exit code: $prop_exitcode +Standard error: +$prop_stderr +#end + +(This message was automatically generated by Taverna Server ${serverVersion}.) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/WEB-INF/lib/org.taverna.server.master.worker.VelocityCompletionNotifier_sms.vtmpl ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/WEB-INF/lib/org.taverna.server.master.worker.VelocityCompletionNotifier_sms.vtmpl b/taverna-server-webapp/src/main/webapp/WEB-INF/lib/org.taverna.server.master.worker.VelocityCompletionNotifier_sms.vtmpl new file mode 100644 index 0000000..b595931 --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/WEB-INF/lib/org.taverna.server.master.worker.VelocityCompletionNotifier_sms.vtmpl @@ -0,0 +1 @@ +Taverna Server ${serverVersion}: Workflow "$name" from ${startTime} has #if( $prop_exitcode == 0)finished#{else}failed#{end}. \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/WEB-INF/lib/org.taverna.server.master.worker.VelocityCompletionNotifier_twitter.vtmpl ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/WEB-INF/lib/org.taverna.server.master.worker.VelocityCompletionNotifier_twitter.vtmpl b/taverna-server-webapp/src/main/webapp/WEB-INF/lib/org.taverna.server.master.worker.VelocityCompletionNotifier_twitter.vtmpl new file mode 100644 index 0000000..cd920a7 --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/WEB-INF/lib/org.taverna.server.master.worker.VelocityCompletionNotifier_twitter.vtmpl @@ -0,0 +1 @@ +Your workflow, $name, has #if( $prop_exitcode == 0)finished#{else}failed#{end}. $uriBuilder.build() #TavernaServer ${serverVersion} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/WEB-INF/partsecure.xml ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/WEB-INF/partsecure.xml b/taverna-server-webapp/src/main/webapp/WEB-INF/partsecure.xml new file mode 100644 index 0000000..2e27b81 --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/WEB-INF/partsecure.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2011-2012 The University of Manchester See the file "LICENSE" + for license terms. --> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:context="http://www.springframework.org/schema/context" + xmlns:util="http://www.springframework.org/schema/util" + xmlns:security="http://www.springframework.org/schema/security" + xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> + + <description> + The Taverna Server bean, plus supporting configuration. + THIS IS THE CONFIGURATION FOR SEMI-SECURE OPERATION ON WINDOWS. + </description> + + <import resource="webappBeans.xml" /> + + <!-- This is all the same as the secure config *EXCEPT* for this override. --> + <context:property-placeholder order="0" ignore-unresolvable="true" + properties-ref="security.override.properties" /> + <util:properties id="security.override.properties"> + <prop key="backEndFactory">org.taverna.server.master.localworker.ForkRunFactory</prop> + <prop key="fetchCertificateChain">true</prop> + <prop key="suppressRewriteEngine">false</prop> + <prop key="requiredChannel">https</prop> + </util:properties> + + <bean id="MBeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean"> + <property name="locateExistingServerIfPossible" value="true" /> + </bean> + <context:mbean-export server="MBeanServer" + default-domain="${my.domain}" registration="ignoreExisting" /> +</beans> http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/WEB-INF/providers.xml ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/WEB-INF/providers.xml b/taverna-server-webapp/src/main/webapp/WEB-INF/providers.xml new file mode 100644 index 0000000..43531ab --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/WEB-INF/providers.xml @@ -0,0 +1,96 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2010-2011 The University of Manchester See the file "LICENSE" + for license terms. --> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:util="http://www.springframework.org/schema/util" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> + + <import resource="beans.xml" /> + + <bean id="ExceptionProvider.BadInputPortName" class="org.taverna.server.master.rest.handler.BadInputPortNameHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.BadPropertyValue" class="org.taverna.server.master.rest.handler.BadPropertyValueHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.BadStateChange" class="org.taverna.server.master.rest.handler.BadStateChangeHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.FilesystemAccess" class="org.taverna.server.master.rest.handler.FilesystemAccessHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.GeneralFailure" class="org.taverna.server.master.rest.handler.GeneralFailureHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.IllegalArgument" class="org.taverna.server.master.rest.handler.IllegalArgumentHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.ImplementationProblem" + class="org.taverna.server.master.rest.handler.ImplementationProblemHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.InvalidCredential" class="org.taverna.server.master.rest.handler.InvalidCredentialHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.NoCreate" class="org.taverna.server.master.rest.handler.NoCreateHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.Overloaded" class="org.taverna.server.master.rest.handler.OverloadedHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.NoCredential" class="org.taverna.server.master.rest.handler.NoCredentialHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.NoDestroy" class="org.taverna.server.master.rest.handler.NoDestroyHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.NoDirectoryEntry" class="org.taverna.server.master.rest.handler.NoDirectoryEntryHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.NoListener" class="org.taverna.server.master.rest.handler.NoListenerHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.NoUpdate" class="org.taverna.server.master.rest.handler.NoUpdateHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.NotOwner" class="org.taverna.server.master.rest.handler.NotOwnerHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.UnknownRun" class="org.taverna.server.master.rest.handler.UnknownRunHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.JAXBException" class="org.taverna.server.master.rest.handler.JAXBExceptionHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.AccessDenied" class="org.taverna.server.master.rest.handler.AccessDeniedHandler"> + <property name="managementModel" ref="webapp.state" /> + </bean> + <bean id="ExceptionProvider.NegotiationFailed" class="org.taverna.server.master.rest.handler.NegotiationFailedHandler"> + </bean> + <bean id="MessagingProvider.File" class="org.taverna.server.master.rest.handler.FileMessageHandler"> + <property name="maxChunkSize" value="${default.messageSize}" /> + </bean> + <bean id="MessagingProvider.FileConcatenation" class="org.taverna.server.master.rest.handler.FileConcatenationHandler"> + <property name="maxChunkSize" value="${default.messageSize}" /> + </bean> + <bean id="MessagingProvider.FileSegment" class="org.taverna.server.master.rest.handler.FileSegmentHandler"> + <property name="maxChunkSize" value="${default.messageSize}" /> + </bean> + <bean id="MessagingProvider.InputStream" + class="org.taverna.server.master.rest.handler.InputStreamMessageHandler"> + </bean> + <bean id="MessagingProvider.T2flow" class="org.taverna.server.master.rest.handler.T2FlowDocumentHandler"> + </bean> + <bean id="MessagingProvider.Permission" class="org.taverna.server.master.rest.handler.PermissionHandler"> + </bean> + + <bean id="Provider.RuntimeExceptionRemapping" class="org.taverna.server.master.utils.RuntimeExceptionWrapper" /> + <bean id="MessagingProvider.ZipStream" class="org.taverna.server.master.rest.handler.ZipStreamHandler" /> + <bean id="MessagingProvider.URIList" class="org.taverna.server.master.rest.handler.URIListHandler" /> + <bean id="Interceptor.FlushThreadLocalCache" + class="org.taverna.server.master.utils.FlushThreadLocalCacheInterceptor" + lazy-init="false"> + </bean> +</beans> http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/WEB-INF/secure.xml ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/WEB-INF/secure.xml b/taverna-server-webapp/src/main/webapp/WEB-INF/secure.xml new file mode 100644 index 0000000..cf08083 --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/WEB-INF/secure.xml @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2010-2012 The University of Manchester See the file "LICENSE" + for license terms. --> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:context="http://www.springframework.org/schema/context" + xmlns:util="http://www.springframework.org/schema/util" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:security="http://www.springframework.org/schema/security" + xsi:schemaLocation=" + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd"> + + <description> + The Taverna Server bean, plus supporting configuration. + THIS IS THE CONFIGURATION FOR SECURE OPERATION. + </description> + + <import resource="webappBeans.xml" /> + + <context:property-placeholder order="0" ignore-unresolvable="true" + properties-ref="security.override.properties" /> + <util:properties id="security.override.properties"> + <prop key="fetchCertificateChain">true</prop> + <prop key="suppressRewriteEngine">false</prop> + <prop key="requiredChannel">https</prop> + </util:properties> + + <bean id="MBeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean"> + <property name="locateExistingServerIfPossible" value="true" /> + </bean> + <context:mbean-export server="MBeanServer" + default-domain="${my.domain}" registration="ignoreExisting" /> +</beans> http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/WEB-INF/security/users.properties ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/WEB-INF/security/users.properties b/taverna-server-webapp/src/main/webapp/WEB-INF/security/users.properties new file mode 100644 index 0000000..03f8436 --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/WEB-INF/security/users.properties @@ -0,0 +1,48 @@ +# This is a Java properties file that defines the default users supported by +# Taverna Server. The keys are the user names, and the values are comma- +# -separated lists of values: the first is the password (which must not have +# any spaces or commas in) and the last is "enabled" or "disabled" to indicate +# whether this user is actually allowed to log in or not. The values between +# are the authorities associated with the user: these are either roles (which +# describe a particular set of permissions for the user) or user mappings. +# +# The supported set of authorities are: +# +# ROLE_tavernauser - may use the standard Taverna Server interfaces +# +# ROLE_tavernasuperuser - may use the admin interfaces and see *all* +# workflow runs irrespective of permissions +# +# LOCALUSER_* - map the server user to the given local system +# account (i.e., the account name is in place of the +# "*" in the authority); don't grant two of these +# authorities at once, or confusion will reign +# +# Note that it is usually better to define accounts via the administrative +# interface or through the JMX interface because those can then be modified +# without restarting the server; anything in this file is fixed until the +# next server restart. This file exists mainly to allow permissions for the +# admin interface to be boot-strapped. + +# --------------------------------------------------------------------- + +# A normal user. Must have given role (ROLE_tavernauser) to use Taverna Server. +# The user has password "taverna" and is enabled. The default mapping to user +# accounts - using the user name - will be used. + +taverna: taverna,ROLE_tavernauser,enabled + +# Another normal user (username: "taverna_alt"). Will be mapped to the system +# account called "taverna", but the user is currently disabled. + +taverna_alt: qwerty,ROLE_tavernauser,LOCALUSER_taverna,disabled + +# The default admin user, who has password "admin". You should change this! +# Admin users also have ROLE_tavernasuperuser, which grants access to the +# server's /admin pages and allows all workflow runs to be seen (if the +# ROLE_tavernauser is also assigned, as below; one does not imply the other). +# If you don't have any enabled admin users, you'll need to use JMX to do +# management operations (JMX is only accessible from the local host and by +# the overall container user or the system administrator). + +admin: admin,ROLE_tavernauser,ROLE_tavernasuperuser,LOCALUSER_taverna,enabled http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/WEB-INF/tavernaserver.properties ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/WEB-INF/tavernaserver.properties b/taverna-server-webapp/src/main/webapp/WEB-INF/tavernaserver.properties new file mode 100644 index 0000000..9616a45 --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/WEB-INF/tavernaserver.properties @@ -0,0 +1,77 @@ +# Override the hostname, port and webapp; leave at 'NONE' if no override +# desired. If set, set it to something like: +# foo.example.com:8000/tav-serv +default.webapp: NONE +# User name to use if nothing else specified +default.localusername: taverna +# How to pick a user name out of a global identity +localusernameregexp: ^TAVERNAUSER=(.*)$ +# General defaults +default.logworkflows: false +default.logexceptions: false +default.permitsubmit: true +default.lifetime: 1440 +default.runlimit: 100 +default.operatinglimit: 10 +default.messageSize: 65536 +#taverna.preferredUserUri: https://some.host:8443/tavernaserver/rest/ +http.realmName: tavernaserver + +rmi.localhostOnly: true +helio.cis.enableTokenPassing: false +log.security.details: false + +#executeWorkflowScript: /usr/taverna/executeworkflow.sh +#secureForkPasswordFile: /usr/local/tomcat6.0/conf/sudopass.txt + +# Usage Record handling +usage.logFile: none +usage.disableDB: no + +# Delays used in the task executor +purge.interval: 30000 +finish.interval: 10000 + +# Static configuration of messaging + +### Email +email.from: taverna.server@localhost +email.type: text/plain +#email.host: localhost + +### Jabber +#xmpp.server: xmpp://some.host:5222 +xmpp.resource: TavernaServer +#xmpp.user: taverna +#xmpp.password: ******* + +### Atom/RSS; lifespan in days, cleaninterval in milliseconds +atom.language: en +atom.lifespan: 7 +atom.cleaninterval: 3600000 + +### SMS +#sms.service: https://www.intellisoftware.co.uk/smsgateway/sendmsg.aspx +sms.userfield: username +sms.passfield: password +sms.destfield: to +sms.msgfield: text +#sms.user: taverna +#sms.pass: ******* + +### Twitter +#twitter.oauth.accessToken: ... +#twitter.oauth.accessTokenSecret: ... + +### General; cooldown in seconds +message.cooldown: 300 +message.termination.subject: Taverna workflow run finished +message.termination.body: Your job with ID={0} has finished with exit code {1,number,integer}. + +# Thread pool sizing +pool.size: 2 + +taverna.interaction.host: none +taverna.interaction.port: none +taverna.interaction.webdav_path: none +taverna.interaction.feed_path: none http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/WEB-INF/web-nosec.xml ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/WEB-INF/web-nosec.xml b/taverna-server-webapp/src/main/webapp/WEB-INF/web-nosec.xml new file mode 100644 index 0000000..d6c6ee7 --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/WEB-INF/web-nosec.xml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE web-app + PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" + "http://java.sun.com/dtd/web-app_2_3.dtd"> + +<!-- Copyright (C) 2010-2011 The University of Manchester See the file "LICENSE" + for license terms. --> +<web-app id="TAVSERV-2.5.4"> + <display-name>Taverna 2.5.4 Server</display-name> + <description>This is the front-end engine for Taverna 2.5.4 Server.</description> + <context-param> + <param-name>contextConfigLocation</param-name> + <param-value>WEB-INF/insecure.xml</param-value> + <description>Where Spring is to load its bean definitions from. DO NOT + CHANGE WITHOUT CONSULTING DOCUMENTATION.</description> + </context-param> + <context-param> + <param-name>log4jExposeWebAppRoot</param-name> + <param-value>false</param-value> + <description> + THIS IS STUPID! We have to do this so that Tomcat webapps do not + leak their configurations into each other via the log4j support + trying to be "smart". + http://javacolors.blogspot.co.uk/2010/08/tomcat-and-webxmls-webapprootkey.html + If you change this, good luck hunting down the weird crashes. + </description> + </context-param> + + <filter> + <filter-name>springSecurityFilterChain</filter-name> + <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> + </filter> + <filter-mapping> + <filter-name>springSecurityFilterChain</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + <listener> + <listener-class> + org.springframework.web.context.request.RequestContextListener + </listener-class> + </listener> + <listener> + <listener-class> + org.springframework.web.util.Log4jConfigListener + </listener-class> + </listener> + <listener> + <listener-class> + org.springframework.web.context.ContextLoaderListener + </listener-class> + </listener> + + <servlet> + <servlet-name>CXFServlet</servlet-name> + <display-name>CXF Servlet</display-name> + <servlet-class> + org.apache.cxf.transport.servlet.CXFServlet + </servlet-class> + <load-on-startup>1</load-on-startup> + </servlet> + + <servlet-mapping> + <servlet-name>CXFServlet</servlet-name> + <url-pattern>/*</url-pattern> + </servlet-mapping> + + <resource-ref> + <description> + Resource reference to a factory for javax.mail.Session + instances that may be used for sending electronic mail + messages, preconfigured to connect to the appropriate + SMTP server. + </description> + <res-ref-name>mail/Session</res-ref-name> + <res-type>javax.mail.Session</res-type> + <res-auth>Container</res-auth> + <res-sharing-scope>Shareable</res-sharing-scope> + </resource-ref> +</web-app> http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/WEB-INF/web-partsec.xml ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/WEB-INF/web-partsec.xml b/taverna-server-webapp/src/main/webapp/WEB-INF/web-partsec.xml new file mode 100644 index 0000000..a2b545e --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/WEB-INF/web-partsec.xml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE web-app + PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" + "http://java.sun.com/dtd/web-app_2_3.dtd"> + +<!-- Copyright (C) 2010-2011 The University of Manchester See the file "LICENSE" + for license terms. --> +<web-app id="TAVSERV-2.5.4"> + <display-name>Taverna 2.5.4 Server</display-name> + <description>This is the front-end engine for Taverna 2.5.4 Server.</description> + <context-param> + <param-name>contextConfigLocation</param-name> + <param-value>WEB-INF/partsecure.xml</param-value> + <description>Where Spring is to load its bean definitions from. DO NOT + CHANGE WITHOUT CONSULTING DOCUMENTATION.</description> + </context-param> + <context-param> + <param-name>log4jExposeWebAppRoot</param-name> + <param-value>false</param-value> + <description> + THIS IS STUPID! We have to do this so that Tomcat webapps do not + leak their configurations into each other via the log4j support + trying to be "smart". + http://javacolors.blogspot.co.uk/2010/08/tomcat-and-webxmls-webapprootkey.html + If you change this, good luck hunting down the weird crashes. + </description> + </context-param> + + <filter> + <filter-name>springSecurityFilterChain</filter-name> + <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> + </filter> + <filter-mapping> + <filter-name>springSecurityFilterChain</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + <listener> + <listener-class> + org.springframework.web.context.request.RequestContextListener + </listener-class> + </listener> + <listener> + <listener-class> + org.springframework.web.util.Log4jConfigListener + </listener-class> + </listener> + <listener> + <listener-class> + org.springframework.web.context.ContextLoaderListener + </listener-class> + </listener> + + <servlet> + <servlet-name>CXFServlet</servlet-name> + <display-name>CXF Servlet</display-name> + <servlet-class> + org.apache.cxf.transport.servlet.CXFServlet + </servlet-class> + <load-on-startup>1</load-on-startup> + </servlet> + + <servlet-mapping> + <servlet-name>CXFServlet</servlet-name> + <url-pattern>/*</url-pattern> + </servlet-mapping> + + <resource-ref> + <description> + Resource reference to a factory for javax.mail.Session + instances that may be used for sending electronic mail + messages, preconfigured to connect to the appropriate + SMTP server. + </description> + <res-ref-name>mail/Session</res-ref-name> + <res-type>javax.mail.Session</res-type> + <res-auth>Container</res-auth> + <res-sharing-scope>Shareable</res-sharing-scope> + </resource-ref> +</web-app> http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/WEB-INF/web-sec.xml ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/WEB-INF/web-sec.xml b/taverna-server-webapp/src/main/webapp/WEB-INF/web-sec.xml new file mode 100644 index 0000000..9a5395a --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/WEB-INF/web-sec.xml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<!DOCTYPE web-app + PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" + "http://java.sun.com/dtd/web-app_2_3.dtd"> + +<!-- Copyright (C) 2010-2011 The University of Manchester See the file "LICENSE" + for license terms. --> +<web-app id="TAVSERV-2.5.4"> + <display-name>Taverna 2.5.4 Server</display-name> + <description>This is the front-end engine for Taverna 2.5.4 Server.</description> + <context-param> + <param-name>contextConfigLocation</param-name> + <param-value>WEB-INF/secure.xml</param-value> + <description>Where Spring is to load its bean definitions from. DO NOT + CHANGE WITHOUT CONSULTING DOCUMENTATION.</description> + </context-param> + <context-param> + <param-name>log4jExposeWebAppRoot</param-name> + <param-value>false</param-value> + <description> + THIS IS STUPID! We have to do this so that Tomcat webapps do not + leak their configurations into each other via the log4j support + trying to be "smart". + http://javacolors.blogspot.co.uk/2010/08/tomcat-and-webxmls-webapprootkey.html + If you change this, good luck hunting down the weird crashes. + </description> + </context-param> + + <filter> + <filter-name>springSecurityFilterChain</filter-name> + <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> + </filter> + <filter-mapping> + <filter-name>springSecurityFilterChain</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + <listener> + <listener-class> + org.springframework.web.context.request.RequestContextListener + </listener-class> + </listener> + <listener> + <listener-class> + org.springframework.web.util.Log4jConfigListener + </listener-class> + </listener> + <listener> + <listener-class> + org.springframework.web.context.ContextLoaderListener + </listener-class> + </listener> + + <servlet> + <servlet-name>CXFServlet</servlet-name> + <display-name>CXF Servlet</display-name> + <servlet-class> + org.apache.cxf.transport.servlet.CXFServlet + </servlet-class> + <load-on-startup>1</load-on-startup> + </servlet> + + <servlet-mapping> + <servlet-name>CXFServlet</servlet-name> + <url-pattern>/*</url-pattern> + </servlet-mapping> + + <resource-ref> + <description> + Resource reference to a factory for javax.mail.Session + instances that may be used for sending electronic mail + messages, preconfigured to connect to the appropriate + SMTP server. + </description> + <res-ref-name>mail/Session</res-ref-name> + <res-type>javax.mail.Session</res-type> + <res-auth>Container</res-auth> + <res-sharing-scope>Shareable</res-sharing-scope> + </resource-ref> +</web-app> http://git-wip-us.apache.org/repos/asf/incubator-taverna-server/blob/2c71f9a9/taverna-server-webapp/src/main/webapp/WEB-INF/webappBeans.xml ---------------------------------------------------------------------- diff --git a/taverna-server-webapp/src/main/webapp/WEB-INF/webappBeans.xml b/taverna-server-webapp/src/main/webapp/WEB-INF/webappBeans.xml new file mode 100644 index 0000000..22e74b3 --- /dev/null +++ b/taverna-server-webapp/src/main/webapp/WEB-INF/webappBeans.xml @@ -0,0 +1,213 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2010-2012 The University of Manchester See the file "LICENSE" + for license terms. --> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:context="http://www.springframework.org/schema/context" + xmlns:aop="http://www.springframework.org/schema/aop" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:jaxrs="http://cxf.apache.org/jaxrs" + xmlns:jaxws="http://cxf.apache.org/jaxws" + xmlns:cxf="http://cxf.apache.org/core" + xmlns:security="http://www.springframework.org/schema/security" + xmlns:util="http://www.springframework.org/schema/util" + xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd + http://cxf.apache.org/configuration/security http://cxf.apache.org/schemas/configuration/security.xsd + http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd + http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd + http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd + http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd + http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> + + <description> + The Taverna Server bean, plus supporting configuration. + </description> + + <import resource="classpath:META-INF/cxf/cxf.xml" /> + <import resource="providers.xml" /> + + <context:annotation-config /> + <context:component-scan base-package="org.taverna.server" /> + <bean id="servletContextPropertyConfigurer" + class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"> + <property name="ignoreUnresolvablePlaceholders" value="true" /> + <property name="localOverride" value="true" /> + <property name="order" value="0" /> + <property name="location" value="/WEB-INF/tavernaserver.properties" /> + </bean> + + <jaxws:server id="master_SOAP" + serviceClass="org.taverna.server.master.TavernaServer" address="/soap"> + <jaxws:serviceBean> + <ref bean="webapp" /> + </jaxws:serviceBean> + <jaxws:properties> + <entry key="mtom-enabled" value="true" /> + </jaxws:properties> + <!-- <jaxws:dataBinding><ref bean="addStylesheet"/></jaxws:dataBinding> --> + </jaxws:server> + + <jaxrs:server id="root_REST" address="/"> + <jaxrs:serviceBeans> + <ref bean="root_facade" /> + </jaxrs:serviceBeans> + <jaxrs:properties> + <entry key="org.apache.cxf.endpoint.private" value="true" /> + </jaxrs:properties> + </jaxrs:server> + + <jaxrs:server id="master_REST" address="/rest" + staticSubresourceResolution="true"> + <jaxrs:serviceBeans> + <ref bean="webapp" /> + </jaxrs:serviceBeans> + <jaxrs:features> + <!-- <cxf:logging /> --><!-- NOISY! --> + </jaxrs:features> + <jaxrs:providers> + <ref bean="ExceptionProvider.AccessDenied" /> + <ref bean="ExceptionProvider.BadInputPortName" /> + <ref bean="ExceptionProvider.BadPropertyValue" /> + <ref bean="ExceptionProvider.BadStateChange" /> + <ref bean="ExceptionProvider.FilesystemAccess" /> + <ref bean="ExceptionProvider.GeneralFailure" /> + <ref bean="ExceptionProvider.IllegalArgument" /> + <ref bean="ExceptionProvider.ImplementationProblem" /> + <ref bean="ExceptionProvider.InvalidCredential" /> + <ref bean="ExceptionProvider.JAXBException" /> + <ref bean="ExceptionProvider.NegotiationFailed" /> + <ref bean="ExceptionProvider.NoCreate" /> + <ref bean="ExceptionProvider.NoCredential" /> + <ref bean="ExceptionProvider.NoDestroy" /> + <ref bean="ExceptionProvider.NoDirectoryEntry" /> + <ref bean="ExceptionProvider.NoListener" /> + <ref bean="ExceptionProvider.NoUpdate" /> + <ref bean="ExceptionProvider.NotOwner" /> + <ref bean="ExceptionProvider.Overloaded" /> + <ref bean="ExceptionProvider.UnknownRun" /> + <ref bean="MessagingProvider.File" /> + <ref bean="MessagingProvider.FileConcatenation" /> + <ref bean="MessagingProvider.FileSegment" /> + <ref bean="MessagingProvider.InputStream" /> + <ref bean="MessagingProvider.T2flow" /> + <ref bean="MessagingProvider.Permission" /> + <ref bean="MessagingProvider.URIList" /> + <ref bean="MessagingProvider.ZipStream" /> + <ref bean="jsonProvider" /> + <ref bean="atomEntryHandler" /> + <ref bean="atomFeedHandler" /> + <bean class="org.apache.cxf.jaxrs.model.wadl.WadlGenerator"> + <property name="addResourceAndMethodIds" value="true"/> + </bean> + </jaxrs:providers> + <jaxrs:outInterceptors> + <ref bean="Interceptor.FlushThreadLocalCache" /> + </jaxrs:outInterceptors> + </jaxrs:server> + + <jaxrs:server id="AtomFeed" address="/feed"> + <jaxrs:serviceBeans> + <ref bean="feed" /> + </jaxrs:serviceBeans> + <jaxrs:properties> + <entry key="org.apache.cxf.endpoint.private" value="true" /> + </jaxrs:properties> + <jaxrs:providers> + <ref bean="atomEntryHandler" /> + <ref bean="atomFeedHandler" /> + </jaxrs:providers> + </jaxrs:server> + + <jaxrs:server id="AdministrationInterface" address="/admin" + staticSubresourceResolution="true"> + <jaxrs:serviceBeans> + <ref bean="admin" /> + </jaxrs:serviceBeans> + <jaxrs:providers> + <ref bean="jsonProvider" /> + </jaxrs:providers> + </jaxrs:server> + + <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider"> + <property name="ignoreNamespaces" value="true" /> + <property name="namespaceMap" ref="jsonNamespaceMap" /> + </bean> + <util:map id="jsonNamespaceMap" key-type="java.lang.String" + value-type="java.lang.String"> + <entry key="http://www.w3.org/1999/xlink" value="" /> + <entry key="http://www.w3.org/2000/09/xmldsig#" value="" /> + <entry key="http://schema.ogf.org/urf/2003/09/urf" value="" /> + <entry key="http://ns.taverna.org.uk/2010/xml/server/" value="" /> + <entry key="http://ns.taverna.org.uk/2010/xml/server/rest/" value="" /> + <entry key="http://ns.taverna.org.uk/2010/xml/server/soap/" value="" /> + <entry key="http://ns.taverna.org.uk/2010/xml/server/feed/" value="" /> + <entry key="http://ns.taverna.org.uk/2010/xml/server/admin/" value="" /> + <entry key="http://ns.taverna.org.uk/2010/port/" value="" /> + <entry key="http://ns.taverna.org.uk/2010/run/" value="" /> + </util:map> + + <bean id="root_facade" class="org.taverna.server.master.facade.Facade"> + <property name="file" value="/welcome.html" /> + <property name="contextualizer" ref="contextualizer" /> + </bean> + + <bean class="org.taverna.server.master.common.Uri.Rewriter" + autowire="byType" id="URI-Rewriter-Thunk"> + <property name="suppressSecurity" value="${suppressRewriteEngine}" /> + <property name="rewriteTarget" value="${default.webapp}" /> + </bean> + <security:authentication-manager> + <security:authentication-provider ref="workflowInternalAuthProvder" /> + <security:authentication-provider ref="authProvider" /> + </security:authentication-manager> + + <bean id="WSDLHeadOptionsInterceptor" + class="org.taverna.server.master.utils.WSDLHeadOptionsInterceptor" /> + <cxf:bus> + <cxf:inInterceptors> + <ref bean="WSDLHeadOptionsInterceptor" /> + </cxf:inInterceptors> + </cxf:bus> + + <aop:aspectj-autoproxy proxy-target-class="true" /> + <security:global-method-security + jsr250-annotations="enabled" /> + + <security:http realm="${http.realmName}" create-session="never" + use-expressions="true"> + <security:http-basic /> + <security:intercept-url pattern="/" + requires-channel="any" access="permitAll" /> + <security:intercept-url pattern="/rest" + requires-channel="${requiredChannel}" access="permitAll" /> + <security:intercept-url pattern="/rest/" + requires-channel="${requiredChannel}" access="permitAll" /> + <security:intercept-url pattern="/rest/policy" + requires-channel="${requiredChannel}" access="permitAll" /> + <security:intercept-url pattern="/rest/policy/" + requires-channel="${requiredChannel}" access="permitAll" /> + <security:intercept-url pattern="/services/**" + requires-channel="${requiredChannel}" access="permitAll" /> + <security:intercept-url pattern="/soap/**" method="GET" + requires-channel="${requiredChannel}" access="permitAll" /> + <security:intercept-url pattern="/soap/**" method="POST" + requires-channel="${requiredChannel}" + access="hasRole('ROLE_tavernauser')" /> + <security:intercept-url pattern="/admin" + requires-channel="${requiredChannel}" + access="hasRole('ROLE_tavernasuperuser')" /> + <security:intercept-url pattern="/admin/**" + requires-channel="${requiredChannel}" + access="hasRole('ROLE_tavernasuperuser')" /> + <security:intercept-url pattern="/rest/**" + requires-channel="${requiredChannel}" + access="hasAnyRole('ROLE_tavernauser','ROLE_tavernaworkflow')" /> + <security:intercept-url pattern="/feed" + requires-channel="${requiredChannel}" + access="hasRole('ROLE_tavernauser')" /> + <security:intercept-url pattern="/feed/**" + requires-channel="${requiredChannel}" + access="hasRole('ROLE_tavernauser')" /> + </security:http> +</beans>
