###############################################################################
# Welcome to Zope 2.
###############################################################################
#
# This is the Zope configuration file.  The Zope configuration file
# shows what the default configuration directives are, and show
# examples for each directive.  To declare a directive, make sure that
# you add it to a line that does not begin with '#'.  Note that comments 
# are only allowed at the beginning of a line: you may not add comments
# after directive text on the same line.

# ZConfig "defines" used for later textual substitution

%define INSTANCE <<INSTANCE_HOME>>
%define ZOPE <<ZOPE_HOME>>

# Directive: instancehome
#
# Description:
#     The path to the data files, local product files, import directory,
#     and Extensions directory used by Zope.
#
# Required (no default)
#
# Example:
#
#    instancehome /home/chrism/projects/sessions

instancehome $INSTANCE

# Directive: clienthome
#
# Description:
#     The directory in which a running Zope's process identifier files are
#     placed.
#
# Default: $INSTANCE/var
#
# Example:
#
#    clienthome /home/chrism/projects/sessions/var


# Directive: path
#
# Description:
#     Name of a directory which should be inserted into the
#     the beginning of Python's module search path.  This directive
#     may be specified as many times as needed to insert additional
#     directories.  The set of directories specified is inserted into the
#     beginning of the module search path in the order which they are specified
#     here.  Note that the processing of this directive may happen too late
#     under some circumstances; it is recommended that you use the PYTHONPATH
#     environment variable if using this directive doesn't work for you.
#
# Default: $INSTANCE/lib/python
#
# Example:
#
#    path $INSTANCE/mypymodules


# Directive: products
#
# Description:
#     Name of a directory that contains additional Product packages.  This
#     directive may be used as many times as needed to add additional
#     collections of products.  Each directory identified will be
#     added to the __path__ of the Products package.  All Products are
#     initialized in ascending alphabetical order by product name.  If
#     two products with the same name exist in two Products directories,
#     the order in which the packages appear here defines the load
#     order.  The master Products directory exists in Zope's software home,
#     and cannot be removed from the products path (and should not be added
#     to it here).
#
# Default: $INSTANCE/Products
#
# Example:
#
#    products /home/chrism/projects/myproducts


# Directive: environment
#
# Description:
#     A section which can be used to define arbitrary key-value pairs
#     for use as environment variables during Zope's run cycle.  It
#     is not recommended to set system-related environment variables such as
#     PYTHONPATH within this section.
#
# Default: unset
#
# Example:
#
#    <environment>
#      MY_PRODUCT_ENVVAR foobar
#    </environment>

# Directive: debug-mode
#
# Description:
#     A switch which controls several aspects of Zope operation useful for
#     developing under Zope.  When debug mode is on:
#
#     - The process will not detach from the controlling terminal
#
#     - Errors in product initialization will cause startup to fail
#       (instead of writing error messages to the event log file).
#
#     - Filesystem-based scripts such as skins, PageTemplateFiles, and
#       DTMLFiles can be edited while the server is running and the server
#       will detect these changes in real time.  When this switch is
#       off, you must restart the server to see the changes.
#
#     Setting this to 'off' when Zope is in a
#     production environment is encouraged, as it speeds execution (sometimes
#     dramatically).
#
# Default: on
#
# Example:
#
#    debug-mode on


# Directive: effective-user
#
# Description:
#     If you intend to run Zope as the "root" user, you must supply this
#     directive with an effective username or userid number to which Zope
#     will 'suid' after the server ports are bound. This directive only
#     has effect under UNIX and if Zope is started as the root user.
#
# Default: unset
#
# Example:
#
#    effective-user chrism


# Directive: enable-product-installation
#
# Description:
#     If this directive is turned on, Zope performs 'product installation'
#     (the registration of Python modules in various Products directories)
#     at startup. Turning this off can speed Zope/ZEO startup time,
#     but it can also cause your Control_Panel Product list to become
#     desynchronized with the contents of your Products
#     directories.  NOTE: Zope *must* be started at least once with
#     this directive set to "on" or you will receive an error.  If using ZEO,
#     at least one ZEO client must be run with this directive set to "on"
#     once, the others can have it turned off.
#     NOTE: If your main storage is mounted read-only, 
#     you must set this directive to "off".
#
# Default: on
#
# Example:
#
#    enable-product-installation off

# Directive: locale
#
# Description:
#     Enable locale (internationalization) support by supplying a locale
#     name to be used. See your operating system documentation for locale
#     information specific to your system. If your Python module does not
#     support the locale module, or if the requested locale is not
#     supported by your system, an error will be raised and Zope will not
#     start.
#
# Default: unset
#
# Example:
#
#    locale fr_FR


# Directives: port-base
#
# Description:
#     Offset applied to the port numbers used for ZServer
#     configurations.  For example, if the http-server port is 8080 and
#     the port-base is 1000, the HTTP server will listen on port 9080.
#     This makes it easy to change the complete set of ports used by a
#     Zope server process
#
# Default:
#
#     0
#
# Example:
#
#     port-base 1000

# Directive: datetime-format
#
# Description:
#     Set this variable either to "us" or "international" to force the
#     DateTime module to parse date strings either with
#     month-before-days-before-year ("us") or
#     days-before-month-before-year ("international").  The default
#     behaviour of DateTime (when this setting is left unset) is to
#     parse dates as US dates.
#
# Default: us
#
# Example:
#
#    datetime-format international


# Directive: zserver-threads
#
# Description:
#     Specify the number of threads that Zope's ZServer web server will use
#     to service requests. The default is 4.
#
# Default: 4
#
# Example:
#
#    zserver-threads 10


# Directive: python-check-interval
#
# Description:
#     Specify an integer representing the Python interpreter "check
#     interval" This interval determines how often the interpreter checks
#     for periodic things such as thread switches and signal handlers. The
#     Zope default is 500, but you may want to experiment with other values
#     in order to attempt to increae performance in your particular
#     environment.
#
# Default: 500
#
# Example:
#
#    python-check-interval 1000


# Directive: zserver-read-only-mode
#
# Description:
#     If this directive is set to 'on', it will cause Zope to inhibit the
#     creation of log files and pid files. Access and event log files will
#     be presented on standard output. Setting this directive 'on' causes
#     pcgi, fastcgi, and daemon-related directives to have no effect.
#
# Default: off
#
# Example:
#
#    zserver-read-only-mode on


# Directive: pid-filename
#
# Description:
#     The path to the file in which the Zope process id(s) will be written.
#     This defaults to client-home/Z2.pid.
#
# Default: CLIENT_HOME/Z2.pid
#
# Example:
#
#    pid-filename /home/chrism/projects/sessions/var/Z2.pid


# Directive: lock-filename
#
# Description:
#     The path to a "lock file" which will be locked by Zope while it's
#     running.  This file is used by zopectl.py to determine if Zope is
#     currently running.  This defaults to CLIENT_HOME/Z2.lock.
#
# Default: CLIENT_HOME/Z2.lock
#
# Example:
#
#    lock-filename /home/chrism/projects/sessions/var/Z2.lock


# Directive: mime-types
#
# Description:
#     Tells Zope about additional mime.types files that should be
#     loaded.  The files have the same format as the mime.types file
#     distributed with Apache.  The "mime-types" setting may be given
#     more than once in the configuration file.
#
# Example:
#
#     mime-types  $INSTANCE/etc/mime.types


# Directive: structured-text-header-level
#
# Description:
#     Set the default starting HTML header level for structured text
#     documents. The default is 3, which implies that top-level headers
#     will be created with an <H3> tag.
#
# Default: 3
#
# Example:
#
#    structured-text-header-level 1

# Directive: rest-input-encoding
#
# Description:
#    Specifies the input encoding of re-StructuredText documents
#    (e.g. 'utf-8', 'iso-8859-15' or any other valid encoding recognized
#    by Python).  The default is your Python's default encoding.
#
# Default: unset (uses system default)
#
# Example:
#
#    rest-input-encoding iso-8859-15

# Directive: rest-output-encoding
#
# Description:
#    Specifies the output encoding of re-StructuredText documents
#    (e.g. 'utf-8', 'iso-8859-15' or any other valid encoding recognized
#    by Python).  The default is your Python's default encoding.
#
# Default: unset (uses system default)
#
# Example:
#
#    rest-output-encoding iso-8859-15

# Directive: cgi-environment
#
# Description:
#     A section which allows a user to define arbitrary key-value pairs for
#     use as the initial CGI environment variables. This is useful
#     when you want to proxy requests from another web server to Zserver,
#     and would like Zserver's CGI environment to reflect the CGI
#     environment of the other web server.
#
# Default: unset
#
# Example:
#
# <cgi-environment>
#   HTTPS_SERVER Foobar Server 1.0
#   HTTPS_PORT 443
# </cgi-environment>



# Directive: dns-server
#
# Description:
#     Specify the IP address of your DNS server in order to cause resolved
#     hostnames to be written to Zope's access log. By default, Zope will
#     not resolve hostnames unless this is set.
#
# Default: unset
#
# Example:
#
#    dns-server 127.0.0.1


# Directive: ip-address
#
# Description:
#     The default IP address on which Zope's various server protocol
#     implementations will listen for requests. If this is unset, Zope
#     will listen on all IP addresses supported by the machine. This
#     directive can be overridden on a per-server basis in the servers
#     section.
#
# Default: unset
#
# Example:
#
#    ip-address 127.0.0.1


# Directive: http-realm
#
# Description:
#     The HTTP "Realm" header value sent by this Zope instance. This value
#     often shows up in basic authentication dialogs.
#
# Default: Zope
#
# Example:
#
#    http-realm Slipknot


# Directive: automatically-quote-dtml-request-data
#
# Description:
#     Set this directive to 'off' in order to disable the autoquoting of
#     implicitly retrieved REQUEST data by DTML code which contains a '<'
#     when used in <dtml-var> construction. When this directive is 'on',
#     all data implicitly retrieved from the REQUEST in DTML (as opposed to
#     addressing REQUEST.somevarname directly) that contains a '<' will be
#     HTML-quoted when interpolated via a <dtml-var> or &dtml- construct. This
#     mitigates the possibility that DTML programmers will leave their
#     sites open to a "client-side trojan" attack.
#
# Default: on
#
# Example:
#
#    automatically-quote-dtml-request-data on

# Directive: trusted-proxy
#
# Description:
#     Define one or more 'trusted-proxies' directives, each of which is a
#     hostname or an IP address.  The set of definitions comprises a list
#     of front-end proxies that are trusted to supply an accurate
#     X-Forwarded-For header to Zope.  If a connection comes from
#     a trusted proxy, Zope will trust any X-Forwarded header to contain
#     the user's real IP address for the purposes of address-based
#     authentication restriction.
#
# Default: unset
#
# Example:
#
#    trusted-proxy www.example.com
#    trusted-proxy 192.168.1.1

# Directive: publisher-profile-file
#
# Description:
#    Names a file on the filesystem which causes Zope's Python
#    profiling capabilities to be enabled.  For more information, see
#    the Debug Information - > Profiling tab of Zope's Control_Panel
#    via the Zope Management Interface.  IMPORTANT: setting this
#    filename will cause Zope code to be executed much more slowly
#    than normal.  This should not be enabled in production.
#
# Default: unset
#
# Example:
#
#    publisher-profile-file $INSTANCE/var/profile.dat


# Directive: security-policy-implementation
#
# Description:
#     The default Zope security machinery is implemented in C.
#     Change this to "python" to use the Python version of the
#     Zope security machinery.  This impacts performance but
#     is useful for debugging purposes and required by Products such as
#     VerboseSecurity, which need to "monkey-patch" the security
#     machinery.
#
# Default: C
#
# Example:
#
#    security-policy-implementation python

# Directive: skip-authentication-checking
#
# Description:
#     Set this directive to 'on' to cause Zope to skip checks related
#     to authentication, for servers which serve only anonymous content.
#     Only works if security-policy-implementation is 'C'.
#
# Default: off
#
# Example:
#
#    skip-authentication-checking on


# Directive: skip-ownership-checking
#
# Description:
#     Set this directive to 'on' to cause Zope to ignore ownership checking
#     when attempting to execute "through the web" code. By default, this
#     directive is on in order to prevent 'trojan horse' security problems
#     whereby a user with less privilege can cause a user with more
#     privilege to execute dangerous code.
#
# Default: off
#
# Example:
#
#    skip-ownership-checking on


# Directive: maximum-number-of-session-objects
#
# Description:
#     An integer value representing the number of items to use as a
#     "maximum number of subobjects" value of the
#     '/temp_folder/session_data' transient object container.
#
# Default: 1000
#
# Example:
#
#    maximum-number-of-session-objects 10000


# Directive: session-add-notify-script-path
#
# Description:
#     An optional fill Zope path name of a callable object to be set as the
#     "script to call on object addition" of the sessioN_data transient
#     object container created in the /temp_folder folder at startup.
#
# Default: unset
#
# Example:
#
#    session-add-notify-script-path /scripts/add_notifier


# Directive: session-delete-notify-script-path
#
# Description:
#     An optional fill Zope path name of a callable object to be set as the
#     "script to call on object deletion" of the sessioN_data transient
#     object container created in the /temp_folder folder at startup.
#
# Default: unset
#
# Example:
#
#    session-delete-notify-script-path /scripts/del_notifier


# Directive: session-timeout-minutes
#
# Description:
#     An integer value representing the number of minutes to be used as the
#     "data object timeout" of the '/temp_folder/session_data' transient
#     object container.
#
# Default: 20
#
# Example:
#
#    session-timeout-minutes 30


# Directive: session-resolution-seconds
#
# Description:
#    An integer value representing the number of seconds to be used as the
#    "timeout resolution" of the '/temp_folder/session_data' transient
#    object container.
#
# Default: 20
#
# Example:
#
#    session-resolution-seconds 60


# Directive: suppress-all-access-rules
#
# Description:
#     If this directive is set to on, no access rules in your Zope site
#     will be executed. This is useful if you "lock yourself out" of a
#     particular part of your site by setting an improper access rule.
#
# Default: off
#
# Example:
#
#    suppress-all-access-rules on


# Directive: suppress-all-site-roots
#
# Description:
#     If this directive is set to on, no site roots in your Zope site will
#     be effective. This is useful if you "lock yourself out" of a
#     particular part of your site by setting an improper site root.
#
# Default: off
#
# Example:
#
#    suppress-all-site-roots on


# Directive: database-quota-size
#
# Description:
#     Set this directive to an integer in bytes in order to place a hard
#     limit on the size which the default FileStorage-backed Zope database
#     can grow. Additions to the database will not be permitted once this
#     filesize is exceeded.
#
# Default: unset
#
# Example:
#
#    database-quota-size 1000000


# Directive: read-only-database
#
# Description:
#     This causes the main Zope FileStorage-backed ZODB to be opened in
#     read-only mode.
#
# Default: off
#
# Example:
#
#    read-only-database on


# Directive: zeo-client-name
#
# Description:
#     If you want a persistent ZEO client cache which retains cache
#     contents across ClientStorage restarts, you need to define a
#     zeo-client-name.  If you use ZEO and you don't set a
#     zeo-client-name, the client cache is stored in temporary files
#     which are removed when the ClientStorage shuts down.  The value
#     of zeo-client-name is used to uniquely identify the local cache
#     files created if this Zope is a ZEO client.
#
# Default: unset
#
# Example:
#
#    zeo-client-name zeo1


# Directives: logger
#
# Description:
#     This area should define one or more "logger" sections of the
#     names "access", "event", and "trace".  The "access" logger logs
#     Zope server access.  The "event" logger logs Zope event
#     information.  The "trace" logger logs detailed server request
#     information (for debugging purposes only).  Each logger section
#     may contain a "level" name/value pair which indicates the level
#     of logging detail to capture for this logger.  The default level
#     is INFO.  Level may be any of "CRITICAL", 'ERROR", WARN", "INFO",
#     "DEBUG", and "ALL".  Each logger section may additionally contain
#     one or more "handler" sections which indicates a types of log
#     "handlers" (file, syslog, NT event log, etc) to be used for the
#     logger being defined.  There are 5 types of handlers: logfile,
#     syslog, win32-eventlog, http-handler, email-notifier.  Each
#     handler type has its own set of allowable subkeys which define
#     aspects of the handler.  All handler sections also allow for the
#     specification of a "format" (the log message format string), a
#     "dateformat" (the log message format for date strings), and a
#     "level", which has the same semantics of the overall logger
#     level but overrides the logger's level for the handler it's
#     defined upon.  XXXX much more detail necessary here
#
# Default:
#
#     The access log will log to the file <instancehome>/log/Z2.log at
#     level INFO, the event log will log to the file
#     <instancehome>/log/event.log at level INFO, and the trace log
#     will not be written anywhere.

<eventlog>
  level all
  <logfile>
    path $INSTANCE/log/event.log
    level info
  </logfile>
</eventlog>

<logger access>
  level WARN
  <logfile>
    path $INSTANCE/log/Z2.log
    format %(message)s
  </logfile>
</logger>

# <logger trace>
#   level WARN
#   <syslog-handler>
#     host localhost
#     port 514
#   </syslog-handler>
#   <nteventlog-handler>
#     appname Zope
#   </nteventlog-handler>
# </logger>

# Directive: warnfilter
#
# Description:
#     A section that allows you to define a warning filter.
#     The following keys are valid within a warnfilter section:
#
#      action:  one of the following strings:
#
#           "error"   turn matching warnings into exceptions
#           "ignore"  never print matching warnings
#           "always"  always print matching warnings
#           "default" print the first occurrence of matching warnings
#                     for each location where the warning is issued
#           "module"  print the first occurrence of matching warnings
#                     for each module where the warning is issued
#           "once"    print only the first occurrence of matching
#                     warnings, regardless of location
#
#      message:  a string containing a regular expression that the
#                warning message must match (the match is compiled to
#                always be case-insensitive)
#
#      category: a Python dotted-path classname (must be a subclass of
#                Warning) of which the warning category must be a subclass in
#                order to match
#
#      module:   a string containing a regular expression that the
#                module name must match (the match is compiled to be
#                case-sensitive)
#
#      lineno:   an integer that the line number where the warning
#                occurred must match, or 0 to match all line numbers
#
#     All keys within a warnfilter section are optional.  More than
#     one warnfilter section may be specified.
#
# Default: unset
#
# Example:
#
#    <warnfilter>
#       action ignore
#       category exceptions.DeprecationWarning
#    </warnfilter>


# Directive: max-listen-sockets
#
# Description:
#     The maximum number of sockets that ZServer will attempt to open
#     in order to service incoming connections.
#
# Default: 1000
#
# Example:
#
#    max-listen-sockets 500



# Directives: servers
#
# Description:
#     A set of sections which allow the specification of Zope's various
#     ZServer servers.  7 different server types may be defined:
#     http-server, ftp-server, webdav-source-server, persistent-cgi,
#     fast-cgi, monitor-server, and icp-server.  If no servers are
#     defined, the default servers are used.
#
#     Ports may be specified either in simple form (80) or in
#     complex form including hostname 127.0.0.1:80.  If the hostname
#     is "left off", the default-ip-address is used as the hostname.
#
#     Port numbers are offset by the setting of port-base, which
#     defaults to 8000.
#
# Default:
#
#     An HTTP server starts on port 8080, an FTP server starts on port
#     8021.

<http-server>
  # valid keys are "address" and "force-connection-close"
  address 8080
  # force-connection-close on
</http-server>

<ftp-server>
  # valid key is "address"
  address 8021
</ftp-server>

# Examples:
#
#  <webdav-source-server>
#    # valid keys are "address" and "force-connection-close"
#    address 1980
#    force-connection-close off
#  </webdav-source-server>
#
#  <persistent-cgi>
#    # valid key is "path"
#    path somefile
#  </persistent-cgi>
#
#  <fast-cgi>
#    # valid key is "address"; the address may be hostname:port, port,
#    # or a path for a Unix-domain socket
#    address somefile
#  </fast-cgi>
#
#  <monitor-server>
#    # valid keys are "address"
#    address 99
#  </monitor-server>
#
#  <icp-server>
#    # valid key is "address"
#    address 888
#  </icp-server>


# Database (zodb_db) section
#
# Description:
#     A database section allows the definition of custom database and
#     storage types.  More than one zodb_db section can be defined.
#
# Default: unset.
#          IMPORTANT: At least one database with a mount-point of "/"
#          must be specified for Zope to start properly.

<zodb_db main>
    # Main FileStorage database
    <filestorage>
      path $INSTANCE/var/Data.fs
    </filestorage>
    mount-point /
</zodb_db>

<zodb_db temporary>
    # Temporary storage database (for sessions)
    <temporarystorage>
      name temporary storage for sessioning
    </temporarystorage>
    mount-point /temp_folder
    container-class Products.TemporaryFolder.TemporaryContainer
</zodb_db>

# Other storage examples
#
# ZEO client storage:
#
# <zodb_db main>
#   mount-point /
#   <zeoclient>
#     server localhost:8100
#     storage 1
#     name zeostorage
#     var $INSTANCE/var
#   </zeoclient>
# </zodb_db>