Wiki

Clone wiki

Shampoo / ConfiguringShampoo

__TOC__

Configuring Shampoo

Shampoo provides several configuration files for both controlling and customizing the application. You must reload the application for settings to take effect.

Main configuration file

Located at /WEB-INF/conf/shampoo.properties. Any of the entries mentioned below can be present in this file. Default values are provided for options that are not explicitly specified within the file. The syntax is simple: the attribute name, followed by the sign equals, and then the corresponding value, which can be blank, if applicable. The hash (number) symbol at the beginning of a line is a comment prefix.

Attribute list

  • Database connection options These are important settings that make sure Shampoo can talk to your database and effectively stores and retrieves data from it.

    • jdbc.driver

      The JDBC driver full class name you use to connect to your database. The driver must be added as a JAR in the Shampoo library. See the installation page. default value: org.h2.Driver which is the default embedded H2 engine, it is not recommended to use it for production though.

    • jdbc.url

      A JDBC URL provides a way of identifying a database so that the appropriate driver will recognize it and establish a connection with it. Adapt the URL according to your own RDBMS and JDBC driver. See your JDBC driver documentation for more info. This URL specifies what database Shampoo will use, where it's located, and optionally some miscellaneous parameters for accessing it. XML-reserved characters must be escaped when specifying this value. Default value: jdbc:h2:~/shampoo;IGNORECASE=TRUE.

      • If you use MySQL and wish to activate server-side cursors (see the hibernate.cursor.support option below), be sure to force their use within the URL, using the following parameter: useCursorFetch=true

        Full example for a MySQL server, installed on the same machine as Shampoo:

        jdbc:mysql://localhost:3306/shampoo?useCursorFetch=true&useServerPrepStmts=true
        

        You may also have to force the use of UTF8 charsets as well, depending on your configuration:

        jdbc:mysql://localhost:3306/shampoo?useUnicode=true&connectionCollation=utf8_general_ci&characterSetResults=utf8&characterEncoding=utf8
        -   jdbc.username
        

      and

      jdbc.password
      

      Your actual login and password for connecting to the database. Full CRUD rights over the Shampoo tables is required. Default value: root and adminadmin, respectively.

    • hibernate.dialect

      The classname of a Hibernate org.hibernate.dialect.Dialect which allows Shampoo to speak a language optimized for a particular relational database. An up-to-date dialect list can be found here. This value is closely related to the JDBC driver setting, don't mix up dialects compatible with other brands of RDBMS than yours. Default value: org.hibernate.dialect.H2Dialect.

      • If your DBMS is MySQL, try not to use the ISAM engine and the org.hibernate.dialect.MySQLMyISAMDialect dialect, but org.hibernate.dialect.MySQLInnoDBDialect for MySQL 4, and org.hibernate.dialect.MySQL5InnoDBDialect for MySQL 5.
      • The Apache Derby dialect is biz.ddcr.shampoo.server.helper.hibernate.AlternativeDerbyDialect.
      • The PostgreSQL dialect is org.hibernate.dialect.PostgreSQLDialect.
        • hibernate.cursor.support

      Set it to true to activate cursor-based filtering of datasets. Some database engines will perform better when this option is switched on, others not. Default value: false.

  • Message provider (mail server only at the moment) options You need to configure a connection to a mail server if you want to send various notifications to your users. The mail server can either be remote or local.

    • mail.smtp.host

      The fully qualified hostname to your SMTP server. Leave it blank if you do not want to configure a connection and actually disable email notifications. Default value: empty, feature disabled by default.

    • mail.smtp.port

      Its port. Default value: 25.

    • mail.smtp.auth

      Specify true if the SMTP requires its users to be authenticated before sending mails, otherwise false. Default value: false.

    • mail.smtp.username

      and

      mail.smtp.password
      

      The login/password couple you must provide if this SMTP server is not an open relay and mail.smtp.auth=true. Leave the fields blank otherwise. Default value: empty.

    • mail.smtp.starttls.enable

      Specify true if the connection must be encrypted using TLS, otherwise false. You must add the server certificate into your JRE keystore if mail.smtp.starttls.enable=true. See the Java keytool documentation for more info. Default value: false.

    • mail.from.default

      The email address that will appear within the message for the sender. You may enter bogus info if you fear users will reply to your automated emails. Default value: noreply@shampoo.ddcr.biz.

    • notification.mail.period

      Recurring period when due notifications are sent to the mail server for distribution, in minutes. Default value: 5.

    • The following options specify where to find the different file templates for customizing user-targeted messages, relative to the classpath. See next section.

      • mail.template.notification.subject.file

        Template file for the short-form style user notifications. Default value: notificationShortMessageModel.vm.

      • mail.template.notification.message.file

        Template file for the long-form style user notifications. Default value: notificationLongMessageModel.vm.

      • mail.template.sendpassword.subject.file

        Template file for the short-form style "retrieving password" messages. Default value: sendPasswordShortMessageModel.vm.

      • mail.template.sendpassword.message.file

        Template file for the long-form style "retrieving password" messages. Default value: sendPasswordLongMessageModel.vm.

  • Web frontend options Various options related to how the Shampoo GUI behaves.

    • cookie.age.max

      The actual lifespan of the cookies used to identify users in the web frontend. The value is measured in seconds. Default value: 1209600.

    • session.age.max

      The actual lifespan of an idling HTTP session before users are asked to login again, in seconds. Default value: 3600.

    • The following options specify where to find the different file templates for customizing the web frontend layout and content, relative to the classpath. See next section.

    • gui.template.frontpage.file

      Template file for the Home/Index page. Default value: frontpageGUIModel.vm.

    • gui.template.header.file

      Template file for the top banner. default value: headerGUIModel.vm.

  • Datastore options A datastore is a location, either remote or local, where all your music tracks and pictures are stored. Depending on how many channels Shampoo will handle, and how busy they are, the datastore can consume a great amount of disk space.

    • file.datastore.implementation

      The current datastore name Shampoo will use. At the moment, only localFilesystem and ftp are functional. The localFilesystem datastore is actually the server's own local filesystem and ftp is either a local or distant FTP server. Default value: localFilesystem.

    • The following attributes do only exist for the localFilesystem implementation.

      • file.datastore.localFilesystem.path

        It defines the full path on your file system where files will be stored. Use your OS conventions for writing it. Multiple sub-directories will be automatically created within the specified path as soon as Shampoo is first deployed. Tip: you can use localFilesystem even if your datastore is located on another machine, just define at boot those sub-directories as NFS mount points, via fstab for example. Default value: /var/spool/shampoo.

      • file.datastore.localFilesystem.path.levels

        It actually defines the level of imbricated (parent/children) sub-directories that will be created during deployment. Specify 0 if you don't want to create any. Directories named from a to z and 0 to 9 are created for each level. Uploaded files will be effectively dispatched among all those folders, so you can mount them on different disks and easily adapt your storage capacity to the growing amount of data.

    • The following attributes do only exist for the ftp implementation.

      • file.datastore.ftp.url

        It defines the full URL where the FTP server which serves all your files is located. FTPS is supported via the ftps:// protocol. If you need to login to your FTP server then specify the username and password within the URL, directly. Default value: ftp://localhost/.

        • Examples: ftp://localhost/ for anonymous login to a local FTP server with no specific working directory. ftps://test123:test123@ftp2.ddcr.biz/shampoo/pool/ for connecting to a remote FTP server via FTPS with a specific user and home directory. - file.datastore.ftp.retries

        The number of times Shampoo should retry connecting to the server if a recoverable error occurs (e.g. loss of connectivity.) Specify 0 if you don't need this feature. Default value: 3.

      • file.datastore.ftp.expose_uri_to_private_webservice

        The direct FTP URL to the files in the datastore will be exposed to the streaming software for download, instead of an HTTP URL backed by Shampoo's internal webserver. Activating this option results in faster downloads and less bandwidth usage, but there's no per-streamer authorization process anymore. Please note that the credentials that Shampoo uses to connect to the server will also be used by the streamers. Default value: false.

  • Media upload The following options define which, and how, media files are acceptable for both storage and streaming. At the moment, no transcoding facility is available for datastores, i.e. automatic format conversion. So you're advised to check whether your streaming software can actually handle those files before accepting them for storage.

    • file.upload.temp.path

      The temporary path on your system where cover art pictures and audio files are uploaded by users through the web frontend. Those files are not yet part of the datastore and thus it is not dependent on the datastore URL, nor the media download mechanism. It's a shared location for all channels, /tmp might be good place, if it's large enough. Obsolete files are automatically detected and removed from this folder. Default value: /var/tmp/shampoo.

    • file.picture.upload.size.max

      The maximum size, in bytes, of cover art files users can upload. Specify 0 if you don't want any limit. Some Servlet containers will override this setting by default, see their own documentation on how to disable or configure their POST thresholds. Default value: 2097152

    • file.audio.upload.size.max

      Just like

      file.coverart.upload.size.max
      

      except that it's specific to audio files this time. Default value: 2147483648.

    • file.picture.handle.jpg

      Specify true if you want users to upload JPEG cover arts, false otherwise. Default value: true.

    • file.picture.handle.gif

      Specify true if you want users to upload GIF cover arts, false otherwise. Default value: true.

    • file.picture.handle.png

      Specify true if you want users to upload PNG cover arts, false otherwise. Default value: true.

    • file.picture.support.dimension.max

      The maximum allowed height and width of uploaded pictures, in pixels, specify 0 if you don't want to enforce any upper limit. Default value: 4096.

    • file.picture.support.dimension.min

      The minimum allowed height and width of uploaded pictures, in pixels, specify 0 if you don't want to enforce any upper limit. Default value: 200.

    • file.picture.resize.dimension

      Uploaded pictures will be automatically rescaled if the value is different from 0. The greatest dimension of the picture will be rescaled the specified value, in pixels. Note that the final picture will not be distorted. Default value: 200.

    • Try to match the following values with your own streaming software capabilities.

    • file.audio.handle.mp3

      Specify true if you want users to upload MP3 audio files, false otherwise. Default value: true.

    • file.audio.handle.native_flac

      Specify true if you want users to upload FLAC audio files, false otherwise. Default value: true.

    • file.audio.handle.mp4_aac

      Specify true if you want users to upload MP4 AAC audio files, false otherwise. Default value: true.

    • file.audio.handle.ogg_vorbis

      Specify true if you want users to upload Ogg Vorbis audio files, false otherwise. Default value: true.

    • file.audio.support.mp3.bitrate.min

      The minimum accepted bitrate for MP3 audio files, in bit/s, specify 0 if you don't want to enforce any lower limit. Default value: 128000.

    • file.audio.support.mp3.bitrate.max

      The maximum accepted bitrate for MP3 audio files, in bit/s, specify 0 if you don't want to enforce any upper limit. Default value: 320000.

    • file.audio.support.mp3.bitrate.vbr

      Specify true if variable bitrate MP3 files are accepted, false otherwise. Default value: true.

    • file.audio.support.native_flac.bitrate.min

      The minimum accepted bitrate for FLAC audio files, in bit/s, specify 0 if you don't want to enforce any lower limit. Default value: 128000.

    • file.audio.support.native_flac.bitrate.max

      The maximum accepted bitrate for FLAC audio files, in bit/s, specify 0 if you don't want to enforce any upper limit. Default value: 320000.

    • file.audio.support.native_flac.bitrate.vbr

      Specify true if variable bitrate FLAC files are accepted, false otherwise. Default value: true.

    • file.audio.support.mp4_aac.bitrate.min

      The minimum accepted bitrate for MP4 AAC audio files, in bit/s, specify 0 if you don't want to enforce any lower limit. Default value: 128000.

    • file.audio.support.mp4_aac.bitrate.max

      The maximum accepted bitrate for MP4 AAC audio files, in bit/s, specify 0 if you don't want to enforce any upper limit. Default value: 320000.

    • file.audio.support.mp4_aac.bitrate.vbr

      Specify true if variable bitrate MP4 AAC files are accepted, false otherwise. Default value: true.

    • file.audio.support.ogg_vorbis.bitrate.min

      The minimum accepted bitrate for Ogg Vorbis audio files, in bit/s, specify 0 if you don't want to enforce any lower limit. Default value: 128000.

    • file.audio.support.ogg_vorbis.bitrate.max

      The maximum accepted bitrate for Ogg Vorbis audio files, in bit/s, specify 0 if you don't want to enforce any upper limit. Default value: 320000.

    • file.audio.support.ogg_vorbis.bitrate.vbr

      Specify true if variable bitrate Ogg Vorbis files are accepted, false otherwise. Default value: true.

    • file.audio.support.channels.mono

      Specify true if mono files are accepted, false otherwise. This is a global setting that applies to any kind of audio files. Default value: false.

    • file.audio.support.samplerate.max

      The maximum accepted samplerate for audio files, in hertz, specify 0 if you don't want to enforce any upper limit. This is a global setting that applies to any kind of audio files. Default value: 48000.

    • file.audio.support.samplerate.min

      The minimum accepted samplerate for audio files, in hertz, specify 0 if you don't want to enforce any lower limit. This is a global setting that applies to any kind of audio files. Default value: 44000.

    • file.audio.duration.min

      The minimum accepted duration for audio files, in seconds, specify 0 if you don't want to enforce any lower limit. This is a global setting that applies to any kind of audio files. Default value: 3.

    • file.audio.duration.max

      The maximum accepted duration for audio files, in seconds, specify 0 if you don't want to enforce any upper limit. This is a global setting that applies to any kind of audio files. Default value: 0.

  • Journal management Which events should be logged by Shampoo for later auditing. The logged events are accessible through the web frontend to authorized users only.

    • log.age.max

      The maximum number of days logs are kept in database, after this time limit they will be pruned. Specify 0 if want to keep them forever. Default value: 14.

    • The following attributes define whether a specific a specific event should be logged. Specify true to enable logging of this specific event. Default value: true.

    • log.error.data

    • log.error.io

    • log.error.general

    • log.user.create

    • log.user.read

    • log.user.update

    • log.user.delete

    • log.profile.login

    • log.profile.logout

    • log.profile.read

    • log.profile.update

    • log.track.create

    • log.track.read

    • log.track.update

    • log.track.delete

    • log.track.reject

    • log.track.validate

    • log.programme.create

    • log.programme.read

    • log.programme.update

    • log.programme.delete

    • log.playlist.create

    • log.playlist.read

    • log.playlist.update

    • log.playlist.delete

    • log.channel.create

    • log.channel.read

    • log.channel.update

    • log.channel.delete

    • log.timetable.create

    • log.timetable.read

    • log.timetable.update

    • log.timetable.delete

    • log.timetable.clone

    • log.timetable.shift

    • log.timetable.resize

    • log.timetable.cancel

    • log.timetable.confirm

    • log.archive.delete

    • log.webservice.create

    • log.webservice.update

    • log.webservice.delete

    • log.queue.create

    • log.queue.delete

  • Notification management In the current builds, all kinds of notifications are activated by default and cannot be turned off, unlike journals.
    • notification.age.max

      The maximum number of days notifications are kept in database, after this time limit they will be pruned. Specify 0 if want to keep them forever. Default value: 7.

  • Archive management
    • archive.age.max

      The maximum number of days archives are kept in database, after this time limit they will be pruned. Specify 0 if want to keep them forever. Default value: 180.

  • Report management
    • report.age.max

      The maximum number of days reports are kept in database, after this time limit they will be pruned. Specify 0 if want to keep them forever. Default value: 14.

  • Host and deployment paths Location where Shampoo is accessible.

    • If you notice within the Shampoo GUI that you can't upload or download tracks, pictures are not displayed, or if streamers cannot find any track to stream, then first check that the following parameters are correctly set.
    • Don't make up URLs and paths, they must match existing, valid ones.
    • private.ws.deployment.url

      The protocol, host, port, and deployment path of your current Shampoo installation, accessible by the private webservice. You will most likely only need to use the URL already given to you by your servlet container. Explictly specify no value if you'd like to enable automatic detection. If you perform URL redirections or address translations then you must provide the converted URL in this variable. E.g.

      http://private-radio.ddcr.biz
      

      or

      https://beta.ddcr.biz:9001/Shampoo
      

      Default value: http://localhost:8080/Shampoo.

    • public.ws.deployment.url

      Same as

      private.ws.deployment.url
      

      except that it represents the deployment path accessible from the public webservice. If addresses are not translated or redirected then it will likely be identical with the corresponding private webservice deployment path. Explictly specify no value if you'd like to enable automatic detection. Default value: http://localhost:8080/Shampoo.

    • protected.gwt.deployment.url

      Same as

      private.ws.deployment.url
      

      except that it represents the deployment path accessible from the GWT GUI. If addresses are not translated or redirected then it will likely be identical with the corresponding private webservice deployment path. Explictly specify no value if you'd like to enable automatic detection. Default value: http://localhost:8080/Shampoo.

  • Public webservice options Maximum authorized poolable values for the public webservice.

    • public.ws.comingnext.items.max

      Maximum numbers of coming next items clients of the public webservice can pool at once. Default value: 3.

    • public.ws.archive.items.max

      Maximum numbers of history items clients of the public webservice can pool at once. Default value: 10.

    • public.ws.timetable.days.max

      Maximum numbers of timetable days clients of the public webservice can pool at once. Default value: 7.

  • Webservice security Security options for the webservices.

    • private.ws.key

      A security passphrase that only the streamers connecting to the private webservice of this instance of the application should know. Keep it secure and away from prying eyes. Specifying a non-empty value is not mandatory but recommended. Default value: hackme.

    • The following configuration options provide a way to tune or to limit the access to the Shampoo webservices to authorized IPs only (a.k.a. whitelists.) If left blank then all IPs can connect to the corresponding webservice. Both IPv4 and IPv6 should be specified at the same time.

    • private.ws.ip.access.regexp

      A regular expression that specifies which IPs can access the private webservice (i.e. the communication bridge between Shampoo and your streamers.) Default value: (127\.0\.0\.1)|(0\:0\:0\:0\:0\:0\:0\:1)|(192\.168\.[0-1]\.[0-9]+)|(2002\:[cC]0[Aa]8\:[a-fA-F0-9]+\:0\:0\:0\:0\:0).

      • If Shampoo is deployed for the Internet, and if your firewalls do not already filter out the private webservice URLs, you must secure its access using this option. The default authorization mechanism of the private webservice is almost non-existent and susceptible to DOS attacks.
      • For example, if you wish to limit the access to a few machines in your local network, use: (10.0.0.(1|3|4))
        • public.ws.ip.access.regexp

      The public webservice IP whitelist regular expression. You will likely not need to use it and wish to leave it blank. Default value: empty.

    • There is no corresponding filtering option for the GWT GUI.

  • Debugging and internal settings You should not experiment with those values. Please rely on the default values unless you're debugging the application.

    • core.threads.pool.size

      Maximum number of available threads that the application can use for performing all its asynchronous tasks. Less than 0 means unbounded. Default value: 25.

    • core.threads.queue.capacity

      Maxmimum number of items a single thread can queue-up for later processing. Less than 0 means unbounded. Default value: 500.

    • http.etag.generation

      Add an Etag HTTP header for all ressources served by both the webservices and the datastore. Default value: true.

    • http.proxied_ip.usage

      Prefer proxied IP embedded with the X-Forwarded-For HTTP header for checking for authorized access, instead of the regular IP advertised by the client. You should activate that option if your application is hidden behind a reverse proxy that doesn't advertise itself first in the IP list, for example nginx. Default value: false.

    • streamer.event.pile.watchdog.event_lifespan

      How long events coming from streamers can remain in the waiting queue for processing before being withdrawn, in milliseconds. Default value: 300000.

    • streamer.event.pile.watchdog.sleep_time

      How fast the streamer event waiting queue is polled for selected tasks to be processed, in milliseconds. Default value: 100.

    • streamer.event.pile.watchdog.retry.max

      Maximum number of entries of the streamer event waiting queue that are checked at once for the selected task to be processed. Default value: 100.

    • queue.scheduler.watchdog_iteration.max

      Maximum number of times the queue engine should try to find a new item to play corresponding to the selected criteria before giving up. Default value: 5.

    • queue.scheduler.watchdog_duration.min

      Minimum duration of an item the queue engine can pick up for playing, in milliseconds. Default value: 200.

    • public.ws.cache.auto

      If true then all data served by the public webservice will be cached. The CPU usage should fall when the webservice is under heavy load. Default value: true.

    • hibernate.schema.auto

      Options for automatic database schema regeneration on deployment. Default value: empty, feature disabled by default.

    • hibernate.cache.auto

      This setting will improve the overall reactiveness and speed of Shampoo when activated. Default value: true.

    • private.ws.download.audio.path

      private.ws.download.cover.path
      
      private.ws.download.flyer.path
      

      Relative paths from the deployment URL for track and picture downloading for the private webservice. Those values don't require to be changed in most configurations. If blanks, they will revert to their corresponding default values, which are /ws/http/public/down/media/audio, /ws/http/public/down/media/cover, and /ws/http/public/down/media/flyer, respectively. Default value: empty.

    • public.ws.download.audio.path

      public.ws.download.cover.path
      
      public.ws.download.flyer.path
      

      Relative paths from the deployment URL for track and picture downloading by public webservices. Those values don't require to be changed in most configurations. If blanks, they will revert to their corresponding default values, which are /ws/http/public/down/media/audio, /ws/http/public/down/media/cover, /ws/http/public/down/media/flyer, respectively. Default value: empty.

    • protected.gwt.download.audio.path

      protected.gwt.download.cover.path
      
      protected.gwt.download.flyer.path
      

      Relative paths from the deployment URL for track and picture downloading by the GWT GUI. Those values don't require to be changed in most configurations. If blanks, they will revert to their default corresponding values, which are /gwt/http/down/media/audio, /gwt/http/down/media/cover, /gwt/http/down/media/flyer, respectively. Default value: empty.

    • protected.gwt.upload.audio.draft.path

      protected.gwt.download.audio.draft.path
      
      protected.gwt.upload.picture.draft.path
      
      protected.gwt.download.picture.draft.path
      

      Relative paths for track and picture uploading from the GWT GUI. Those values don't require to be changed in most configurations. If blanks, they will revert to their corresponding default values, which are /gwt/http/up/media/audio, /gwt/http/down/media/audio/draft, /gwt/http/up/media/cover, /gwt/http/down/media/cover/draft, respectively. Default value: empty.

    • ws.authentication.jitter

      Maximum allowed time discrepancy between client and server clocks during HMAC authorization checks, in milliseconds. Default value: 30000.

    • ws.authentication.no_replay_interval

      Maximum time interval allowed for replaying identical HMAC hashes, in milliseconds. default value: 300000.

    • ws.authentication.debug.disable

      Disabling HMAC authorization checks. Default value: false.

    • public.ws.cache.auto

      Caching of the public webservice marshalled responses. Default value: false.

    • datastore.cache.auto

      Caching of ressources served by the datastore. Default value: false.

    • log.cleanup.period

      Recurring period when expired logs are pruned, in minutes. Default value: 720.

    • notification.cleanup.period

      Recurring period when expired notifications are pruned, in minutes. Default value: 720.

    • archive.cleanup.period

      Recurring period when expired archives are pruned, in minutes. Default value: 720.

    • report.cleanup.period

      Recurring period when expired reports are pruned, in minutes. Default value: 720.

    • webservice.cleanup.period

      Recurring period when expired pubic webservice hits used for "flood" detection are pruned, in minutes. Default value: 720.

    • queue.cleanup.period

      Recurring period when stalled or out-of-date streaming items are pruned, in minutes. Default value: 60.

    • streamer.connection.cleanup.period

      Recurring period when stalled or crashed streamers are pruned from the private webservice "heartbeat" queue, in minutes. Default value: 5.

    • streamer.event.cleanup.period

      Recurring period when expired streamer events are prunded, in minutes. Default value: 5.

    • The following attributes are specific to the localFilesystem implementation of the datastore.

      • file.datastore.localFilesystem.expose_uri_to_private_webservice

        Do only set this value to true if your streaming software is hosted on the same machine as Shampoo. Local paths to the files in the datastore will be exposed to the streaming software as paths on the local filesystem, instead of an HTTP URL. There's no authorization process anymore, your file permissions may not be compatible with the streaming software user and group, but for simple setups you can avoid the overhead associated with the HTTP protocol this way. Your Streamer must be able to read the content of those folders while your Servlet container must be given the right to both read and write in those folders. See the file.datastore.localFilesystem.chmod directive for more information on how to force file permissions. Default value: false.

      • file.datastore.localFilesystem.chmod

        The default R/W permissions to apply on new files in the datastore. See the chown utility manual page for more information. The value follows the decimal notation only. This directive has no effect on Windows-based local filesystems. Default value: 0640.

Example

#DATABASE
jdbc.username=root
jdbc.password=adminadmin
##Apache Derby database connection (network-mode)
jdbc.url=jdbc:derby://db1.ddcr.internal:1527/shampoo
jdbc.driver=org.apache.derby.jdbc.ClientDriver

#MAIL SERVER
mail.from.default=noreply@shampoo.ddcr.biz
##Remote sendmail
mail.smtp.host=mail.ddcr.internal
mail.smtp.port=25
mail.smtp.username=test123
mail.smtp.password=test123
mail.smtp.starttls.enable=true

#DATASTORE
##Local filesystem
file.datastore.localFilesystem.path=E:\\Temp\\Shampoo\\Datastore
file.datastore.localFilesystem.path.levels=1
##Temporary draft files storage
file.upload.temp.path=E:\\Temp\\Shampoo\\Temp

#WS'S AND URLS
##Autodetecting deployment URL for the public webservice
public.ws.deployment.url=
##Autodetecting deployment URL for the GWT GUI
protected.gwt.deployment.url=

##Private webservice access key
private.ws.key=hackme!
##IP whitelist for accessing the private webservice, blank equals no restriction
private.ws.ip.access.regexp=(127\.0\.0\.1)|(192\.162\.1\.[0-9]+)
##Deployment URL for the private webservice
private.ws.deployment.url=http://096shampoo.ddcr.internal/ShampooGWT

Customizing layout and messages

Please refer to the template files page

Updated