diff --git a/system/cookie.php b/system/cookie.php index 22a06b6a..0568aebc 100644 --- a/system/cookie.php +++ b/system/cookie.php @@ -90,7 +90,15 @@ public function send() */ public static function has($name) { - return ( ! is_null(static::get($name))); + foreach (func_get_args() as $key) + { + if (is_null(static::get($key))) + { + return false; + } + } + + return true; } /** diff --git a/system/form.php b/system/form.php index b303c0ed..7b594fc8 100644 --- a/system/form.php +++ b/system/form.php @@ -56,7 +56,7 @@ public static function open($action = null, $method = 'POST', $attributes = arra /** * Close a HTML form. * - * @return void + * @return string */ public static function close() { diff --git a/system/request.php b/system/request.php index 671de97b..dd3be314 100644 --- a/system/request.php +++ b/system/request.php @@ -36,7 +36,12 @@ public static function uri() // ------------------------------------------------------- elseif (isset($_SERVER['REQUEST_URI'])) { - $uri = str_replace('/index.php', '', $_SERVER['REQUEST_URI']); + $uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH); + + if ($uri === false) + { + throw new \Exception("Malformed request URI. Request terminated."); + } } // ------------------------------------------------------- // Neither PATH_INFO or REQUEST_URI are available. diff --git a/system/route/finder.php b/system/route/finder.php index fb932a7e..2b459e48 100644 --- a/system/route/finder.php +++ b/system/route/finder.php @@ -53,7 +53,7 @@ public static function find($name) { $route = $recursiveIterator->getSubIterator(); - if ($route['name'] == $name) + if (isset($route['name']) and $route['name'] == $name) { return static::$names[$name] = array($arrayIterator->key() => iterator_to_array($route)); } diff --git a/system/router.php b/system/router.php index 7026411c..8a2a6a30 100644 --- a/system/router.php +++ b/system/router.php @@ -55,7 +55,7 @@ public static function route($method, $uri) // -------------------------------------------------------------- // Convert the route wild-cards to regular expressions. // -------------------------------------------------------------- - $route = str_replace(':num', '[0-9]+', str_replace(':any', '.+', $route)); + $route = str_replace(':num', '[0-9]+', str_replace(':any', '[a-zA-Z0-9\-_]+', $route)); if (preg_match('#^'.$route.'$#', $method.' '.$uri)) { diff --git a/system/session.php b/system/session.php index 695b7131..8b7de15b 100644 --- a/system/session.php +++ b/system/session.php @@ -17,15 +17,13 @@ class Session { private static $session = array(); /** - * Get the session driver instance. + * Get the session driver. If the driver has already been instantiated, that + * instance will be returned. * * @return Session\Driver */ public static function driver() { - // ----------------------------------------------------- - // Create the session driver if we haven't already. - // ----------------------------------------------------- if (is_null(static::$driver)) { static::$driver = Session\Factory::make(Config::get('session.driver')); @@ -59,7 +57,7 @@ public static function load() } // ----------------------------------------------------- - // Generate a CSRF token if one does not exist. + // Create a CSRF token for the session if necessary. // ----------------------------------------------------- if ( ! static::has('csrf_token')) { @@ -70,20 +68,27 @@ public static function load() } /** - * Determine if the session contains an item. + * Determine if the session or flash data contains an item or set of items. * - * @param string $key * @return bool */ - public static function has($key) + public static function has() { - return array_key_exists($key, static::$session['data']) or - array_key_exists(':old:'.$key, static::$session['data']) or - array_key_exists(':new:'.$key, static::$session['data']); + foreach (func_get_args() as $key) + { + if ( ! array_key_exists($key, static::$session['data']) and + ! array_key_exists(':old:'.$key, static::$session['data']) and + ! array_key_exists(':new:'.$key, static::$session['data'])) + { + return false; + } + } + + return true; } /** - * Get an item from the session. + * Get an item from the session or flash data. * * @param string $key * @return mixed @@ -96,9 +101,6 @@ public static function get($key, $default = null) { return static::$session['data'][$key]; } - // ----------------------------------------------------- - // Check the flash data for the item. - // ----------------------------------------------------- elseif (array_key_exists(':old:'.$key, static::$session['data'])) { return static::$session['data'][':old:'.$key]; @@ -125,7 +127,7 @@ public static function put($key, $value) } /** - * Write a flash item to the session. + * Write an item to the session flash data. * * @param string $key * @param mixed $value @@ -176,17 +178,14 @@ public static function regenerate() public static function close() { // ----------------------------------------------------- - // Flash the old input data to the session. + // Flash the old input to the session and age the flash. // ----------------------------------------------------- - static::flash('laravel_old_input', Input::get()); + static::flash('laravel_old_input', Input::get()); - // ----------------------------------------------------- - // Age the flash data. - // ----------------------------------------------------- static::age_flash(); // ----------------------------------------------------- - // Save the session data to storage. + // Write the session data to storage. // ----------------------------------------------------- static::driver()->save(static::$session); @@ -195,8 +194,18 @@ public static function close() // ----------------------------------------------------- if ( ! headers_sent()) { - $lifetime = (Config::get('session.expire_on_close')) ? 0 : Config::get('session.lifetime'); - Cookie::put('laravel_session', static::$session['id'], $lifetime, Config::get('session.path'), Config::get('session.domain'), Config::get('session.https')); + $cookie = new Cookie('laravel_session', static::$session['id']); + + if ( ! Config::get('session.expire_on_close')) + { + $cookie->lifetime = Config::get('session.lifetime'); + } + + $cookie->path = Config::get('session.path'); + $cookie->domain = Config::get('session.domain'); + $cookie->secure = Config::get('session.https'); + + $cookie->send(); } // ----------------------------------------------------- @@ -234,12 +243,12 @@ private static function age_flash() if (strpos($key, ':new:') === 0) { // ----------------------------------------------------- - // Create an :old: flash item. + // Create an :old: item for the :new: item. // ----------------------------------------------------- static::put(':old:'.substr($key, 5), $value); // ----------------------------------------------------- - // Forget the :new: flash item. + // Forget the :new: item. // ----------------------------------------------------- static::forget($key); } diff --git a/system/str.php b/system/str.php index 17370e7f..7ab40159 100644 --- a/system/str.php +++ b/system/str.php @@ -47,20 +47,43 @@ public static function title($value) } /** - * Generate a random alpha-numeric string. + * Generate a random alpha or alpha-numeric string. + * + * Supported types: 'alnum' and 'alpha'. * * @param int $length + * @param string $type * @return string */ - public static function random($length = 16) + public static function random($length = 16, $type = 'alnum') { - $pool = str_split('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 1); - $value = ''; + // ----------------------------------------------------- + // Get the proper character pool for the type. + // ----------------------------------------------------- + switch ($type) + { + case 'alpha': + $pool = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + break; + + default: + $pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; + } + + // ----------------------------------------------------- + // Get the pool length and split the pool into an array. + // ----------------------------------------------------- + $pool_length = strlen($pool) - 1; + $pool = str_split($pool, 1); + + // ----------------------------------------------------- + // Build the random string to the specified length. + // ----------------------------------------------------- for ($i = 0; $i < $length; $i++) { - $value .= $pool[mt_rand(0, 61)]; + $value .= $pool[mt_rand(0, $pool_length)]; } return $value;