<?php
/**
 * SimpleID configuration file.
 *
 * @package simpleid
 *
 */
/*
 * $Id$
 *
 */


/**
 * Base URL.
 *
 * This is the URL of the location you want to place your SimpleID
 * distribution.  It becomes the URL of the SimpleID server.
 *
 * It is not allowed to have a trailing slash; SimpleID will add it
 * for you.
 *
 * Examples:
 * <code>
 *   define('SIMPLEID_BASE_URL', 'http://www.example.com');
 *   define('SIMPLEID_BASE_URL', 'http://www.example.com:8888');
 *   define('SIMPLEID_BASE_URL', 'http://www.example.com/simpleid');
 *   define('SIMPLEID_BASE_URL', 'https://www.example.com:8888/simpleid');
 * </code>
 *
 */
define('SIMPLEID_BASE_URL', 'http://www.example.com');

/**
 * Allow clean URLs.
 *
 * URLs used in SimpleID are normally in the form
 * http://www.example.com/index.php?q=foo.  Enabling clean URLs will allow for
 * SimpleID URLs to be in the form http://www.example.com/foo
 *
 * In order to support clean URLs, you must be using Apache with mod_rewrite
 * enabled.  You will need to rename .htaccess.dist in the SimpleID web directory
 * to .htaccess
 *
 * @since 0.8
 *
 */
define('SIMPLEID_CLEAN_URL', false);

/**
 * Directory to store identity information.
 *
 * This directory must exist and be readable by the web server.
 *
 * For maximum security, it is highly recommended to place this
 * directory outside your web browser's document root directory, so
 * that it is not visible to user agents.
 *
 */
define('SIMPLEID_IDENTITIES_DIR', '../identities');

/**
 * Directory to store cache data.
 *
 * This directory must exist and be readable and writable by the
 * web server.
 *
 * For maximum security, it is highly recommended to place this
 * directory outside your web browser's document root directory, so
 * that it is not visible to user agents.
 *
 */
define('SIMPLEID_CACHE_DIR', '../cache');

/**
 * Persistent data storage mechanism.
 *
 * SimpleID provides flexible methods to store and retrieve persistent data.
 * By default, SimpleID uses the file system to store this data, implemented
 * in filesystem.store.inc.  Users can implement other methods by creating
 * a file with extension .store.inc and specifying the file through this
 * setting.
 * 
 * Generally you do not need to change this setting.
 *
 */
define('SIMPLEID_STORE', 'filesystem');

/**
 * Directory to store persistent data.
 *
 * This directory must exist and be readable and writable by the
 * web server.
 *
 * For maximum security, it is highly recommended to place this
 * directory outside your web browser's document root directory, so
 * that it is not visible to user agents.
 *
 */
define('SIMPLEID_STORE_DIR', '../store');

/**
 * Allows use of unencrypted connections.
 *
 * Between versions 0.6 and 0.8 (inclusive), SimpleID uses either HTTPS or 
 * a form of digest authentication for its login system.  This allows passwords
 * and other secure information not to be sent to the server as plaintext.
 *
 * From version 0.9, SimpleID mandates the use of HTTPS for all connections
 * (other than direct connections between SimpleID and an OpenID relying
 * party).  However, for debug purposes, it may be necessary to allow
 * unencrypted connections to SimpleID.
 *
 * It is strongly recommended that this is set to false.  Setting this to true
 * will allow passwords to be sent as plaintext.  You should not change this
 * value unless it is absolutely necessary.
 *
 * @since 0.9
 */
define('SIMPLEID_ALLOW_PLAINTEXT', false);

/**
 * Allows web browsers to save passwords.
 *
 * SimpleID prevents web browsers from saving user passwords entered in a user
 * logs into SimpleID.  Setting this value to true will allow browsers to
 * ask the user whether the password should be saved in the browser's password
 * store.
 *
 * The default is set to false for security reasons.  You should not change
 * this value unless you are certain regarding the security of your browser's
 * password store.
 *
 * @since 0.8
 */
define('SIMPLEID_ALLOW_AUTOCOMPLETE', false);

/**
 * Performs additional verification of relying party return URLs.
 *
 * When authenticating using OpenID version 2, SimpleID version 0.7 or later
 * can perform additional verification of the relying party's return URLs under
 * section 9.2.1 of the OpenID specification.
 *
 * The default is set to true for security reasons.  However, if your web server
 * is blocked by your web hosting provider's firewall from accessing outside
 * servers, then set this to false.
 *
 * @since 0.7
 *
 */
define('SIMPLEID_VERIFY_RETURN_URL_USING_REALM', true);


/**
 * The locale for the SimpleID user interface.
 *
 * @since 0.9
 */
define('SIMPLEID_LOCALE', 'en');

/**
 * Date and time format.
 *
 * The date and time format specified using the strftime() syntax.
 *
 * See http://www.php.net/strftime for details.
 * 
 */
define('SIMPLEID_DATE_TIME_FORMAT', '%Y-%m-%d %H:%M:%S %Z');

/**
 * The number of seconds before associations expire.  This is an advanced
 * option, for which the default setting should work fine.
 *
 * Note that for ICAM compliance, this number must be less than 86400.
 */
define('SIMPLEID_ASSOC_EXPIRES_IN', 3600);

/**
 * SimpleID extensions.
 *
 * The SimpleID extensions you wish to load.  You should separate the
 * extensions you wish to load with a comma.
 *
 */
define('SIMPLEID_EXTENSIONS', 'sreg,ui');

/**
 * Log file.
 *
 * You can specify a file into which SimpleID will log various diagnostic
 * messages.
 *
 * The log file's directory must exist and must be writable by the web server.
 *
 * To disable logging, set this as an empty string.
 *
 * @since 0.7
 *
 */
define('SIMPLEID_LOGFILE', '');

/**
 * The level of detail for log messages.
 *
 * You can determine which messages are captured in the log file by specifying
 * a number between 0 and 5. The higher the number, the more messages are
 * logged.
 *
 * WARNING: Setting the log level to 5 will result in security sensitive
 * information also being logged.
 *
 * This has effect only if logging is enabled.
 *
 * @since 0.7
 *
 */
define('SIMPLEID_LOGLEVEL', 4);
?>
