#
#  This file contains defaults for development.  If you are cross-
#  developing in multiple environments, just change the defaults
#  in this file.
#
#  Any changes in this file will be reflected in the default
#  jspwiki.properties-file when it is run.
#
@appname@=JSPWiki
@pagedir@=/p/web/www-data/jspwiki/
@logfile@=/tmp/jspwiki.log
@securitylog@=/tmp/security.log
@spamlog@=/tmp/spamlog.log

@tests.pagedir@=/tmp/testrepository
@tests.workdir@=/tmp/testworkdir
@tests.logfile@=/tmp/jspwikitests.log

@tests.auth.filename=/tmp/testrepository/auth.txt
@tests.filter@=tests/etc/filters.xml

# JavaMail configuration
@mail.smtp.host@=127.0.0.1
@mail.smtp.port@=25
@mail.from@=JSPWiki <JSPWiki@localhost>
#@mail.smtp.account@=foo
#@mail.smtp.password@=foopassword

#  Enable these if you wish to create a static content tarball
#  for use with Apache or another front-end web server.
#  You should specify user and group names that make sense for
#  your environment.

static.user = apache
static.group = daemon
jks.password = jspwiki

#
#  JDBC testing properties
#
jdbc.driver.id=hsql
jdbc.driver.jar=tests/lib/hsqldb.jar
jdbc.driver.class=org.hsqldb.jdbcDriver
jdbc.driver.url=jdbc:hsqldb:hsql://localhost/jspwiki
jdbc.admin.id=SA
jdbc.admin.password=
jdbc.user.id=jspwiki
jdbc.user.password=password

#
#  Running webtests
#

#  Which browser to use?
webtests.browser=*safari
#  if you run firefox, and it is not in your PATH, you can specify this :
#webtests.browser=*firefox /usr/lib/firefox/firefox-2-bin

# For generating API diffs (you must have DependencyFinder installed)
#dependencyfinder.dir=../lib/DependencyFinder
#jarfile.old=../JSPWiki-2.6.3-src/build/JSPWiki.jar
