<?php
/**
 * PrivateBin
 *
 * a zero-knowledge paste bin
 *
 * @link      https://github.com/PrivateBin/PrivateBin
 * @copyright 2012 Sébastien SAUVAGE (sebsauvage.net)
 * @license   https://www.opensource.org/licenses/zlib-license.php The zlib/libpng License
 * @version   0.22
 */

/**
 * purgelimiter
 *
 * Handles purge limiting, so purging is not triggered to often.
 */
class purgelimiter extends persistence
{
    /**
     * time limit in seconds, defaults to 300s
     *
     * @access private
     * @static
     * @var    int
     */
    private static $_limit = 300;

    /**
     * set the time limit in seconds
     *
     * @access public
     * @static
     * @param  int $limit
     * @return void
     */
    public static function setLimit($limit)
    {
        self::$_limit = $limit;
    }

    /**
     * set configuration options of the traffic limiter
     *
     * @access public
     * @static
     * @param configuration $conf
     * @return void
     */
    public static function setConfiguration(configuration $conf)
    {
        self::setLimit($conf->getKey('limit', 'purge'));
        self::setPath($conf->getKey('dir', 'purge'));
    }

    /**
     * check if the purge can be performed
     *
     * @access public
     * @static
     * @throws Exception
     * @return bool
     */
    public static function canPurge()
    {
        // disable limits if set to less then 1
        if (self::$_limit < 1) return true;

        $file = 'purge_limiter.php';
        $now = time();
        if (!self::_exists($file))
        {
            self::_store(
                $file,
                '<?php' . PHP_EOL .
                '$GLOBALS[\'purge_limiter\'] = ' . $now . ';' . PHP_EOL
            );
        }

        $path = self::getPath($file);
        require $path;
        $pl = $GLOBALS['purge_limiter'];

        if ($pl + self::$_limit >= $now)
        {
            $result = false;
        }
        else
        {
            $result = true;
            self::_store(
                $file,
                '<?php' . PHP_EOL .
                '$GLOBALS[\'purge_limiter\'] = ' . $now . ';' . PHP_EOL
            );
        }
        return $result;
    }
}