diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 14fc3a40..5f114278 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -9,3 +9,5 @@ updates: directory: "/" # Location of package manifests schedule: interval: "daily" + assignees: + - "p3k" diff --git a/.gitignore b/.gitignore index 25d6ec63..e9557b6a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .gradle +.idea .settings build diff --git a/README.md b/README.md index 30d6de89..a23efae0 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ Clone this repository to your machine and start the build process with `./gradle After all files are put into place start Helma by invoking `./bin/helma.bat` or `./bin/helma`, depending on whether you are on Windows or Linux / Unix / OS X, respectively. If the `java` command is not found, try setting the `JAVA_HOME` environment variable to the location of your Java installation. -You can adjust server-wide settings in the `server.properties` file. For example, you could set the `smtp` property to the name of the SMTP server that Helma should use to send e-mail. Applications can be started or stopped by editing the `apps.properties` file through the web interface using the management application that is part of Helma. +You can adjust server-wide settings in the `server.properties` file. For example, you could set the `smtp` property to the name of the SMTP server that Helma should use to send e-mail. Applications can be started or stopped by editing the `apps.properties` file, or through the web interface using the management application that is part of Helma. If all goes well you should be able to connect your browser to – port 8080 on the local machine, that is. diff --git a/build.gradle b/build.gradle index c754bb5e..7b6de020 100644 --- a/build.gradle +++ b/build.gradle @@ -21,6 +21,10 @@ allprojects { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } + + repositories { + mavenCentral() + } } version = new Date().format("yyyyMMdd") @@ -37,11 +41,6 @@ sourceSets { } } -repositories { - mavenCentral() - jcenter() -} - configurations { // Wrapping implementation because it does not allow access to its files // (i.e. cannot be resolved) @@ -50,7 +49,7 @@ configurations { dependencies { implementation 'com.google.code.gson:gson:2.8.6' - implementation 'commons-codec:commons-codec:1.14' + implementation 'commons-codec:commons-codec:1.15' implementation 'commons-fileupload:commons-fileupload:1.4' implementation 'commons-logging:commons-logging:1.2' implementation 'commons-net:commons-net:3.8.0' @@ -68,7 +67,6 @@ def rhinoJar = configurations.library.files.find { jar -> jar.name.startsWith('rhino') } - startScripts { applicationName = 'helma' classpath = files('../launcher.jar') @@ -117,6 +115,7 @@ applicationDistribution.from("${project.buildDir}/reports/dependency-license") { } distTar { + dependsOn ':generateLicenseReport', ':javadoc', ':jsdoc' compression = Compression.GZIP filesMatching(textFiles) { @@ -125,6 +124,8 @@ distTar { } distZip { + dependsOn ':generateLicenseReport', ':javadoc', ':jsdoc' + filesMatching(textFiles) { filter(FixCrLfFilter.class, eol: FixCrLfFilter.CrLf.newInstance("crlf")) } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 95feb49f..1a0a0d7f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,4 +1,4 @@ -distributionUrl=https\://services.gradle.org/distributions/gradle-6.2.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists diff --git a/modules/helma/Chart.js b/modules/helma/Chart.js index c05d3515..6f699ebc 100644 --- a/modules/helma/Chart.js +++ b/modules/helma/Chart.js @@ -18,12 +18,12 @@ /** * @fileoverview Fields and methods of the helma.Chart prototype *

- * To use this optional module, its repository needs to be added to the + * To use this optional module, its repository needs to be added to the * application, for example by calling app.addRepository('modules/helma/Chart.js') */ // take care of any dependencies -app.addRepository('modules/helma/jxl.jar'); +app.addRepository('modules/helma/jxl-2.5.7.jar'); /** * Define the global namespace if not existing @@ -55,12 +55,12 @@ helma.Chart = function(fpath, prefix, sheetName) { var workbook, file; try { - file = new java.io.File(fpath); + file = new java.io.File(fpath); workbook = JXLPKG.getWorkbook(file); } catch (e) { if (e instanceof TypeError == false) throw(e); - throw("helma.Chart needs " + JXLPKGNAME + + throw("helma.Chart needs " + JXLPKGNAME + " in lib/ext or application directory " + "[" + JXLPKGURL + "]"); } @@ -98,9 +98,9 @@ helma.Chart = function(fpath, prefix, sheetName) { * Renders the Excel spreadsheet as XHTML table. */ this.render = function() { - res.write('\n'); - + var rowBuf = []; var rows = sheet.getRows(); var max = 0; @@ -110,7 +110,7 @@ helma.Chart = function(fpath, prefix, sheetName) { max = row.length; rowBuf.push(row); } - + for (var i in rowBuf) { res.write('\n'); for (var n=0; n\n'); } - + res.write('
\n'); workbook.close(); }; diff --git a/modules/helma/Search.js b/modules/helma/Search.js index 478fd638..c4b97dd1 100644 --- a/modules/helma/Search.js +++ b/modules/helma/Search.js @@ -26,13 +26,13 @@ /** * @fileoverview Fields and methods of the helma.Search class *

- * To use this optional module, its repository needs to be added to the + * To use this optional module, its repository needs to be added to the * application, for example by calling app.addRepository('modules/helma/Search.js') */ // take care of any dependencies -app.addRepository('modules/helma/lucene-core.jar'); -app.addRepository('modules/helma/lucene-analyzers.jar'); +app.addRepository('modules/helma/lucene-core-2.2.0.jar'); +app.addRepository('modules/helma/lucene-analyzers-2.2.0.jar'); if (!global.helma) { @@ -47,7 +47,7 @@ if (!global.helma) { * creating a fulltext search index based on Apache Lucene. * @returns A newly created instance of this prototype. * @constructor - * @author Robert Gaggl + * @author Robert Gaggl */ helma.Search = function() { try { @@ -309,7 +309,7 @@ helma.Search.Index = function(directory, analyzer) { this.getAnalyzer = function() { return analyzer; }; - + /** * Returns a searcher for querying this index. * @returns A searcher useable for querying the index. @@ -318,7 +318,7 @@ helma.Search.Index = function(directory, analyzer) { this.getSearcher = function() { return new helma.Search.Searcher(this); }; - + /** @ignore */ this.toString = function() { return ("[Lucene Index " + directory + "]"); @@ -773,7 +773,7 @@ helma.Search.HitCollection = function(hits) { this.length = function() { return this.size(); }; - + /** * Executes a provided function once per hit. * @param {Function} fun Function to execute for each element @@ -793,7 +793,7 @@ helma.Search.HitCollection = function(hits) { } return; }; - + return this; }; @@ -1308,7 +1308,7 @@ helma.Search.Document.Field = function(name, value, options) { var store = pkg.Store.YES; var index = pkg.Index.TOKENIZED; var termVector = pkg.TermVector.NO; - + var opt; if (options != null) { if (options.store != null) { diff --git a/modules/helma/Ssh.js b/modules/helma/Ssh.js index 875dcecf..76d47966 100644 --- a/modules/helma/Ssh.js +++ b/modules/helma/Ssh.js @@ -18,20 +18,20 @@ /** * @fileoverview Fields and methods of the helma.Ssh class. *

- * To use this optional module, its repository needs to be added to the + * To use this optional module, its repository needs to be added to the * application, for example by calling app.addRepository('modules/helma/Ssh.js') */ // take care of any dependencies app.addRepository('modules/helma/File.js'); -app.addRepository('modules/helma/ganymed-ssh2.jar'); +app.addRepository('modules/helma/ganymed-ssh2-build208.jar'); // define the helma namespace, if not existing if (!global.helma) { global.helma = {}; } -/** +/** * Creates a new instance of helma.Ssh * @class This class provides methods for connecting to a remote * server via secure shell (ssh) and copying files from/to a remote @@ -43,7 +43,7 @@ if (!global.helma) { * file. This argument is optional. * @constructor * @returns A newly created instance of helma.Ssh - * @author Robert Gaggl + * @author Robert Gaggl */ helma.Ssh = function(server, hosts) { var SSHPKG = Packages.ch.ethz.ssh2; @@ -61,11 +61,11 @@ helma.Ssh = function(server, hosts) { } catch (e) { if (e instanceof TypeError == false) throw(e); - throw("helma.Ssh needs " + SSHPKGNAME + + throw("helma.Ssh needs " + SSHPKGNAME + " in lib/ext or application directory " + "[" + SSHPKGURL + "]"); } - + /** * A simple verifier for verifying host keys * @private @@ -96,7 +96,7 @@ helma.Ssh = function(server, hosts) { return; } }; - + /** * Converts the argument into an instance of java.io.File * @param {helma.File|java.io.File|String} file Either a file @@ -131,7 +131,7 @@ helma.Ssh = function(server, hosts) { } return false; }; - + /** * Private helper method for debugging output using app.logger * @param {String} methodName The name of the method @@ -175,7 +175,7 @@ helma.Ssh = function(server, hosts) { } return false; }; - + /** * Connects to a remote host using plain username/password authentication. * @param {String} username The username @@ -217,7 +217,7 @@ helma.Ssh = function(server, hosts) { } return false; }; - + /** * Disconnects this client from the remote server. */ @@ -325,7 +325,7 @@ helma.Ssh = function(server, hosts) { } } }; - + /** * Toggles paranoid mode. If set to true this client tries to * verify the host key against the its list of known hosts @@ -346,7 +346,7 @@ helma.Ssh = function(server, hosts) { this.isParanoid = function() { return paranoid; }; - + /** * main constructor body */ diff --git a/modules/helma/build.gradle b/modules/helma/build.gradle new file mode 100644 index 00000000..81f22c50 --- /dev/null +++ b/modules/helma/build.gradle @@ -0,0 +1,11 @@ +dependencies { + runtimeOnly 'ch.ethz.ganymed:ganymed-ssh2:build209' + runtimeOnly 'net.sourceforge.jexcelapi:jxl:2.5.7' + runtimeOnly 'org.apache.lucene:lucene-analyzers:2.2.0' + runtimeOnly 'org.apache.lucene:lucene-core:2.2.0' +} + +task deps(type: Copy) { + from sourceSets.main.runtimeClasspath + into '.' +} diff --git a/modules/helma/ganymed-ssh2.jar b/modules/helma/ganymed-ssh2-build208.jar similarity index 100% rename from modules/helma/ganymed-ssh2.jar rename to modules/helma/ganymed-ssh2-build208.jar diff --git a/modules/helma/jxl-2.5.7.jar b/modules/helma/jxl-2.5.7.jar new file mode 100644 index 00000000..fc1a5a55 Binary files /dev/null and b/modules/helma/jxl-2.5.7.jar differ diff --git a/modules/helma/jxl.jar b/modules/helma/jxl.jar deleted file mode 100644 index 92dc867a..00000000 Binary files a/modules/helma/jxl.jar and /dev/null differ diff --git a/modules/helma/lucene-analyzers.jar b/modules/helma/lucene-analyzers-2.2.0.jar similarity index 99% rename from modules/helma/lucene-analyzers.jar rename to modules/helma/lucene-analyzers-2.2.0.jar index 7e37b731..86226042 100644 Binary files a/modules/helma/lucene-analyzers.jar and b/modules/helma/lucene-analyzers-2.2.0.jar differ diff --git a/modules/helma/lucene-core.jar b/modules/helma/lucene-core-2.2.0.jar similarity index 100% rename from modules/helma/lucene-core.jar rename to modules/helma/lucene-core-2.2.0.jar diff --git a/modules/jala/build.gradle b/modules/jala/build.gradle new file mode 100644 index 00000000..1270bd58 --- /dev/null +++ b/modules/jala/build.gradle @@ -0,0 +1,14 @@ +dependencies { + runtimeOnly 'dom4j:dom4j:1.6.1' + runtimeOnly 'jaxen:jaxen:1.1-beta-8' + runtimeOnly 'net.sf.javamusictag:jid3lib:0.5.4' + + // FIXME: Did not find these two or appropriate replacements for them + //runtime 'id3:de.ueberdosis.mp3info:1.6.0d9' + //runtime 'javadns:org.wonderly:?' +} + +task deps(type: Copy) { + from sourceSets.main.runtimeClasspath + into 'lib' +} diff --git a/modules/jala/lib/jid3lib-0.5.4.jar b/modules/jala/lib/jid3lib-0.5.4.jar index c0b8ed94..63e5a672 100644 Binary files a/modules/jala/lib/jid3lib-0.5.4.jar and b/modules/jala/lib/jid3lib-0.5.4.jar differ diff --git a/modules/jala/util/HopKit/build.gradle b/modules/jala/util/HopKit/build.gradle new file mode 100644 index 00000000..43e81a1a --- /dev/null +++ b/modules/jala/util/HopKit/build.gradle @@ -0,0 +1,9 @@ +dependencies { + // FIXME: Seems to be not used, anymore…? + runtimeOnly 'bsf:bsf:2.4.0' +} + +task deps(type: Copy) { + from sourceSets.main.runtimeClasspath + into 'lib' +} diff --git a/modules/jala/util/HopKit/lib/bsf-2.4.0.jar b/modules/jala/util/HopKit/lib/bsf-2.4.0.jar new file mode 100644 index 00000000..2288c36e Binary files /dev/null and b/modules/jala/util/HopKit/lib/bsf-2.4.0.jar differ diff --git a/modules/jala/util/HopKit/lib/bsf.jar b/modules/jala/util/HopKit/lib/bsf.jar deleted file mode 100644 index 3c035ff4..00000000 Binary files a/modules/jala/util/HopKit/lib/bsf.jar and /dev/null differ diff --git a/modules/jala/util/Test/build.gradle b/modules/jala/util/Test/build.gradle new file mode 100644 index 00000000..95d4d60a --- /dev/null +++ b/modules/jala/util/Test/build.gradle @@ -0,0 +1,9 @@ +dependencies { + runtimeOnly 'org.subethamail:subethasmtp-smtp:1.2' + runtimeOnly 'org.subethamail:subethasmtp-wiser:1.2' +} + +task deps(type: Copy) { + from sourceSets.main.runtimeClasspath + into 'code' +} diff --git a/modules/jala/util/Test/code/subetha-wiser.jar b/modules/jala/util/Test/code/subetha-wiser.jar deleted file mode 100644 index c75cc70c..00000000 Binary files a/modules/jala/util/Test/code/subetha-wiser.jar and /dev/null differ diff --git a/modules/jala/util/Test/code/subetha-smtp.jar b/modules/jala/util/Test/code/subethasmtp-smtp-1.2.jar similarity index 74% rename from modules/jala/util/Test/code/subetha-smtp.jar rename to modules/jala/util/Test/code/subethasmtp-smtp-1.2.jar index ed83063b..3af4aa44 100644 Binary files a/modules/jala/util/Test/code/subetha-smtp.jar and b/modules/jala/util/Test/code/subethasmtp-smtp-1.2.jar differ diff --git a/modules/jala/util/Test/code/subethasmtp-wiser-1.2.jar b/modules/jala/util/Test/code/subethasmtp-wiser-1.2.jar new file mode 100644 index 00000000..200cf39e Binary files /dev/null and b/modules/jala/util/Test/code/subethasmtp-wiser-1.2.jar differ diff --git a/settings.gradle b/settings.gradle index 53c80aac..15905a7b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -7,3 +7,7 @@ org.apache.tools.ant.DirectoryScanner.removeDefaultExclude('**/.git/**') org.apache.tools.ant.DirectoryScanner.removeDefaultExclude('**/.gitignore') include 'launcher' +include 'modules:helma' +include 'modules:jala' +include 'modules:jala:util:HopKit' +include 'modules:jala:util:Test' diff --git a/src/dist/extras/upstart/helma b/src/dist/extras/upstart/helma index e7f1229f..46bbf66c 100755 --- a/src/dist/extras/upstart/helma +++ b/src/dist/extras/upstart/helma @@ -6,56 +6,67 @@ # andreas bolka, 2003-11-30 # +### BEGIN INIT INFO +# Provides: helma +# Required-Start: postgresql apache2 +# Required-Stop: +# Default-Start: 2 3 4 5 +# Default-STop: 0 1 6 +# Short-Description: Helma Application Server +### END INIT INFO + HELMA_CONFIG=/etc/helma.conf ### # Check for existence of needed config file and source it if [ -r $HELMA_CONFIG ]; then - source $HELMA_CONFIG + source $HELMA_CONFIG else - echo "Can't read config file $HELMA_CONFIG" - exit 6 + echo "Can't read config file $HELMA_CONFIG" + exit 6 fi # Check for missing files and directories + if [ ! -x $JAVA_BIN ]; then - echo "Config error: JAVA_BIN $JAVA_BIN not found or not executable" - exit 5 -fi -if [ ! -r $HELMA_INSTALL/launcher.jar ]; then - echo "Config error: $HELMA_INSTALL/launcher.jar not found or not readable" - exit 5 -fi -if [ ! -d $HELMA_HOME ]; then - echo "Config error: HELMA_HOME $HELMA_HOME not found" - exit 5 + echo "Config error: JAVA_BIN $JAVA_BIN not found or not executable" + exit 5 fi -# local settins -RUN_CMD="sudo -u $HELMA_USER $JAVA_BIN" -RUN_ARGS="$JAVA_OPTS -jar $HELMA_INSTALL/launcher.jar -h $HELMA_HOME $HELMA_ARGS" +if [ ! -r $HELMA_INSTALL/launcher.jar ]; then + echo "Config error: $HELMA_INSTALL/launcher.jar not found or not readable" + exit 5 +fi + +if [ ! -d $HELMA_HOME ]; then + echo "Config error: HELMA_HOME $HELMA_HOME not found" + exit 5 +fi + +RUN_CMD="su - $HELMA_USER" +RUN_ARGS="-c $JAVA_BIN $JAVA_OPTS -jar $HELMA_INSTALL/launcher.jar -h $HELMA_HOME $HELMA_ARGS" case "$1" in -start) + start) echo -n "Starting $HELMA_SERVICE: " if [ -f $HELMA_PID ]; then - echo "$HELMA_SERVICE (pid `cat $HELMA_PID`) already running" - exit 1 + echo "$HELMA_SERVICE (pid `cat $HELMA_PID`) already running" + exit 1 fi cd $HELMA_HOME - nohup $RUN_CMD $RUN_ARGS > $HELMA_LOG 2>&1 & + nohup $RUN_CMD "$RUN_ARGS" > $HELMA_LOG 2>&1 & echo $! > $HELMA_PID echo "$HELMA_SERVICE (pid `cat $HELMA_PID`) started." ;; -stop) + stop) echo -n "Shutting down $HELMA_SERVICE: " if [ ! -f $HELMA_PID ]; then - echo "$HELMA_SERVICE not running" - exit 1 + echo "$HELMA_SERVICE not running" + exit 1 fi PID=`cat $HELMA_PID 2>/dev/null` @@ -65,20 +76,21 @@ stop) echo "stopped." ;; -restart) + restart) $0 stop && $0 start ;; -reload) + reload) echo -n "Reloading $HELMA_SERVICE: $HELMA_SERVICE" touch $HELMA_HOME/server.properties touch $HELMA_HOME/apps.properties echo "." ;; -*) + *) echo "Usage: /etc/init.d/helma start|stop|restart|reload" - exit 1 + exit 1 ;; esac + exit 0 diff --git a/src/dist/extras/upstart/helma.conf b/src/dist/extras/upstart/helma.conf index 2fb8c80f..521320c2 100644 --- a/src/dist/extras/upstart/helma.conf +++ b/src/dist/extras/upstart/helma.conf @@ -1,72 +1,44 @@ -############################################################## -### -### Helma object publisher config file -### Author: Hannes Wallnoefer, -### Author: Andreas Bolka -### -### This file should be placed in /etc/helma.conf. -### It is read by the Helma service control script, -### usually /etc/init.d/helma. -### -############################################################## +# +# Helma Object Publisher configuration file +# +# Authors: +# Hannes Wallnoefer , +# Andreas Bolka +# +# This file should be placed in /etc/helma.conf. +# It is read by the Helma service control script, +# usually /etc/init.d/helma. +# -############################################################## -### The name of this Helma server/service and the -### pid file to be used -############################################################# +# Full path to Java executable +JAVA_HOME=/usr/lib/jvm/default-java +JAVA_BIN=$JAVA_HOME/bin/java + +# Options passed to the Java runtime +JAVA_OPTS="-server -Djava.awt.headless=true -Dfile.encoding=utf-8 -Djsse.enableSNIExtension=false" + +# The name of this Helma server/service and the pid file to be used HELMA_SERVICE=helma HELMA_PID=/var/run/helma.pid +# Helma install directory. This is where we look for the Helma jar files +# (launcher.jar, lib/* and lib/ext/*) +HELMA_INSTALL=/home/helma -############################################################## -### Full path to Java executable -############################################################## -JAVA_HOME=/usr/lib/j2sdk1.5-sun -JAVA_BIN=$JAVA_HOME/bin/java - - -############################################################## -### Options passed to the Java runtime -############################################################## -JAVA_OPTS="-Djava.awt.headless=true" - - -############################################################## -### Helma install directory. This is where we look for -### the Helma jar files (launcher.jar, lib/* and lib/ext/*) -############################################################## -HELMA_INSTALL=/usr/local/helma/helma-1.6.x - - -############################################################## -### Helma home directory, in case it is different from the -### Helma install dir. This is where Helma will look for -### properties files and applications. -############################################################## +# Helma home directory, in case it is different from the Helma install dir. +# This is where Helma will look for properties files and applications. HELMA_HOME=$HELMA_INSTALL - -############################################################## -### The user Helma should be running as -############################################################## +# The user Helma should be running as HELMA_USER=helma - -############################################################## -### File to which standard and error output from Helma -### is redirected -############################################################## +# File to which standard and error output from Helma is redirected HELMA_LOG=$HELMA_HOME/log/helma-out.log - -############################################################## -### Helma options. Possible options are: -### -### -f file Specify server.properties file -### -p port Specify RMI port number -### -w port Specify port number for embedded Web server -### -x port Specify XML-RPC port number -### -jk port Specify AJP13 port number -### -############################################################## +# Helma options. Possible options are: +# -f file - Location of server.properties file +# -p port - RMI port +# -w port - Web server port +# -x port - XML-RPC port +# -jk port - AJP13 port HELMA_ARGS="-w 8080"