JAL-1400 default JalviewLite build is signed applet with sandbox permissions
[jalview.git] / build.xml
index 0f81af7..0849463 100755 (executable)
--- a/build.xml
+++ b/build.xml
@@ -85,6 +85,8 @@
                <!-- Key Password -->
                <property name="jalview.key.pass" value="alignmentisfun" />
 
+                   
+                   
                <!-- Don't change anything below here unless you know what you are doing! -->
                <!-- Url path for WebStart in JNLP file -->
                <property name="WebStartLocation" value="http://www.jalview.org/webstart" />
                <property name="WebStartImage" value="JalviewLogo_big.png"/>
                <!-- J2SE version needed for webstart launch -->
                <property name="j2sev" value="1.6+"/>
+
+    <!-- Permissions for running Java applets and applications. -->
+    <!-- Defaults are those suitable for deploying jalview webstart www.jalview.org -->
+    <property name="application.codebase" value="*.jalview.org"/>
+    <!-- and allowing the applet to be deployed from any URL -->
+    <property name="applet.codebase" value="*"/>
+    <property name="applet.caller-codebase" value="${applet.codebase}"/>
+
                <!-- build directory configuration -->
                <property name="libDir" value="lib" />
                <property name="resourceDir" value="resources" />
 
        <target name="makefulldist" depends="makedist">
                <!-- the default keystore details might need to be edited here -->
-               <signjar storepass="${jalview.keystore.pass}" keypass="${jalview.key.pass}" keystore="${jalview.keystore}" alias="${jalview.key}" lazy="false" verbose="false">
+               <signjar storepass="${jalview.keystore.pass}" keypass="${jalview.key.pass}" keystore="${jalview.keystore}" alias="${jalview.key}" lazy="false" verbose="false" sigalg="SHA1withRSA">
 
                        <fileset dir="${packageDir}">
                                <include name="*.jar" />
                                <include name="*.jar"/>
                        </fileset>
                </delete>
-               <jar destfile="${packageDir}/${outputJar}">
+               <jar destfile="${packageDir}/${outputJar}" index="true">
                        <manifest>
                                <attribute name="Main-Class" value="jalview.bin.Jalview" />
+        <attribute name="Permissions" value="all-permissions" />
+        <attribute name="Application-Name" value="Jalview Desktop"/>
+        <attribute name="Codebase" value="${application.codebase}"/>
                        </manifest>
                        <fileset dir="${outputDir}/">
                                <exclude name="cache*/**" />
        <target name="packageApplet" depends="compileApplet, buildPropertiesFile">
                <copy file="${resourceDir}/images/idwidth.gif" toFile="${outputDir}/images/idwidth.gif" />
                <copy file="${resourceDir}/images/link.gif" toFile="${outputDir}/images/link.gif" />
-               <jar destfile="in.jar">
+               <jar destfile="in.jar" index="true">
                        <manifest>
                                <attribute name="Main-Class" value="jalview.bin.JalviewLite" />
+                               <attribute name="Application-Name" value="JalviewLite"/>
+                               <attribute name="Codebase" value="${applet.codebase}"/>
                        </manifest>
                        <fileset dir="${outputDir}">
                                <include name="com/**" />
                        <injar file="in.jar" />
                        <outjar file="${jalviewLiteJar}" />
                        <libraryjar refid="obfuscateDeps.path" />
+                       <dontwarn/>
                        <keep access="public" type="class" name="jalview.bin.JalviewLite">
                                <field access="public" />
                                <method access="public" />
                                <constructor access="public" />
                        </keep>
+                       <keep access="public" type="class" name="jalview.appletgui.AlignFrame">
+                               <field access="public" />
+                               <method access="public" />
+                               <constructor access="public" />
+                       </keep>
                        <!--      -libraryjars "${obfuscateDeps}"
       -injars      in.jar
       -outjars     jalviewApplet.jar
       <include name="jmol/*"/>
          </fileset>
                <fileset dir=".">
-               <include name="jalviewApplet.jar"/>
+               <include name="${jalviewLiteJar}"/>
                        </fileset>
                <fileset dir="appletlib">
                      <include name="**/*"/>
                        </fileset>
          </copy>
-                       
+         <presetdef name="applet.jar">
+      <!-- build a signed applet with 'all-permissions' - 
+                         Needs 'param name="permissions' value="all-permissions"' in applet tag
+                         JalviewLite+JmolApplet linked sequence/structure fails
+                         Mixed code warnings are raised
+                         -->
+           <jar update="true" index="true">
+               <manifest>
+               <attribute name="Application-Name" value="JalviewLite"/>
+               <attribute name="Permissions" value="all-permissions"/>
+               <attribute name="Codebase" value="${applet.codebase}"/>
+               <attribute name="Caller-Allowable-Codebase" value="${applet.caller-codebase}"/>
+               <attribute name="Application-Library-Allowable-Codebase" value="${applet.codebase}"/>
+        </manifest>
+      </jar>
+    </presetdef>
+    <presetdef name="s_applet.jar">
+      <!-- build signed applet with sandbox permissions -
+                         Needs 'param name="permissions' value="sandbox"' in applet tag
+                        Preserves Pre-Java 1.7_u45 behavior once 'permissions' parameter added to applet tag 
+-->
+
+      <jar update="true" index="true" jarfile="@{jarfile}">
+        <manifest>
+          <attribute name="Application-Name" value="JalviewLite" />
+          <attribute name="Permissions" value="sandbox" />
+          <attribute name="Codebase" value="${applet.codebase}" />
+          <attribute name="Caller-Allowable-Codebase" value="${applet.caller-codebase}" />
+          <attribute name="Application-Library-Allowable-Codebase" value="${applet.codebase}" />
+               </manifest>
+         </jar>
+         </presetdef>
+         <presetdef name="applet_tl.jar">
+      <!-- build signed applet with trusted library/trusted permissions -
+                               Needs 'param name="permissions' value="all-permissions"' in applet tag
+                              j1.7_45:
+                              No mixed code warnings raised 
+                              Jmol/JalviewLite sequence/structure example doesn't link structures
+                              Raises dialog asking user to allow page to control applet via LiveConnect javascript
+                              
+                             -->
+
+           <jar update="true" index="true" jarfile="@{jarfile}">
+               <manifest>
+               <attribute name="Application-Name" value="JalviewLite"/>
+               <attribute name="Permissions" value="all-permissions" />
+               <attribute name="Codebase" value="${applet.codebase}"/>
+               <attribute name="Trusted-Only" value="true"/>
+               <attribute name="Trusted-Library" value="true"/>
+               </manifest>
+         </jar>
+
+         </presetdef>
+    <presetdef name="applet_to.jar">
+      <!-- not fully test variant (yet) -->
+      <jar update="true" index="true" jarfile="@{jarfile}">
+        <manifest>
+          <attribute name="Application-Name" value="JalviewLite" />
+          <attribute name="Permissions" value="all-permissions" />
+          <attribute name="Codebase" value="${applet.codebase}" />
+          <attribute name="Trusted-Only" value="true" />
+        </manifest>
+      </jar>
+    </presetdef>
+    <!-- create differently privileged artefacts -->
+         <copy file="${packageDir}/examples/${jalviewLiteJar}" tofile="${packageDir}/examples/tl_${jalviewLiteJar}"/>
+         <copy file="${packageDir}/examples/${jmolJar}" tofile="${packageDir}/examples/tl_${jmolJar}"/>
+    <copy file="${packageDir}/examples/${jalviewLiteJar}" tofile="${packageDir}/examples/to_${jalviewLiteJar}" />
+    <copy file="${packageDir}/examples/${jmolJar}" tofile="${packageDir}/examples/to_${jmolJar}" />
+    <copy file="${packageDir}/examples/${jalviewLiteJar}" tofile="${packageDir}/examples/s_${jalviewLiteJar}" />
+    <copy file="${packageDir}/examples/${jmolJar}" tofile="${packageDir}/examples/s_${jmolJar}" />
+    <applet.jar jarfile="${packageDir}/examples/ap_${jalviewLiteJar}" />
+    <applet.jar jarfile="${packageDir}/examples/ap_${jmolJar}" />
+         <applet_tl.jar jarfile="${packageDir}/examples/tl_${jalviewLiteJar}"/>
+         <applet_tl.jar jarfile="${packageDir}/examples/tl_${jmolJar}"/>
+    <s_applet.jar jarfile="${packageDir}/examples/${jalviewLiteJar}" />
+    <s_applet.jar jarfile="${packageDir}/examples/${jmolJar}" />
+    <applet_to.jar jarfile="${packageDir}/examples/to_${jalviewLiteJar}" />
+    <applet_to.jar jarfile="${packageDir}/examples/to_${jmolJar}" />
+    <!-- todo - write examples/downloads for alternate versions of the applet -->
+    <signjar storepass="${jalview.keystore.pass}" keypass="${jalview.key.pass}" keystore="${jalview.keystore}" alias="${jalview.key}" lazy="false" verbose="false">
+
+      <fileset dir="${packageDir}/examples">
+        <include name="*.jar" />
+      </fileset>
+    </signjar>
        </target>
        <target name="sourcedoc" description="Create jalview source documentation pages" depends="init">
         <javadoc destdir="${javadocDir}">