pax_global_header00006660000000000000000000000064133213246550014516gustar00rootroot0000000000000052 comment=a59857139b9e30978b5b802b3631b5eaf34e8c66 dflydev-fig-cookies-2.0.0/000077500000000000000000000000001332132465500153475ustar00rootroot00000000000000dflydev-fig-cookies-2.0.0/CHANGELOG.md000066400000000000000000000441561332132465500171720ustar00rootroot00000000000000# Changelog All notable changes to this project will be documented in this file, in reverse chronological order by release. ## 2.0.0 - 2018-07-11 ### Added - [#32](https://github.com/dflydev/dflydev-fig-cookies/pull/32) all public API of the project now has extensive parameter and return type declarations. If you are using the library with `declare(strict_types=1);` in your codebase, you will need to run static analysis against your code to find possible type incompatibilities in method calls. If you are inheriting any of your code from this library, you will need to check that your type signatures respect variance and covariance with the symbols you are inheriting from. Here is a full list of the changes: ``` [BC] CHANGED: The parameter $name of Dflydev\FigCookies\Cookie#__construct() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $value of Dflydev\FigCookies\Cookie#__construct() changed from no type to a non-contravariant ?string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\Cookie#__construct() changed from no type to string [BC] CHANGED: The parameter $value of Dflydev\FigCookies\Cookie#__construct() changed from no type to ?string [BC] CHANGED: The return type of Dflydev\FigCookies\Cookie#getName() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\Cookie#getValue() changed from no type to ?string [BC] CHANGED: The return type of Dflydev\FigCookies\Cookie#withValue() changed from no type to Dflydev\FigCookies\Cookie [BC] CHANGED: The parameter $value of Dflydev\FigCookies\Cookie#withValue() changed from no type to a non-contravariant ?string [BC] CHANGED: The parameter $value of Dflydev\FigCookies\Cookie#withValue() changed from no type to ?string [BC] CHANGED: The return type of Dflydev\FigCookies\Cookie#__toString() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\Cookie::create() changed from no type to Dflydev\FigCookies\Cookie [BC] CHANGED: The parameter $name of Dflydev\FigCookies\Cookie::create() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $value of Dflydev\FigCookies\Cookie::create() changed from no type to a non-contravariant ?string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\Cookie::create() changed from no type to string [BC] CHANGED: The parameter $value of Dflydev\FigCookies\Cookie::create() changed from no type to ?string [BC] CHANGED: The return type of Dflydev\FigCookies\Cookie::listFromCookieString() changed from no type to array [BC] CHANGED: The parameter $string of Dflydev\FigCookies\Cookie::listFromCookieString() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $string of Dflydev\FigCookies\Cookie::listFromCookieString() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\Cookie::oneFromCookiePair() changed from no type to Dflydev\FigCookies\Cookie [BC] CHANGED: The parameter $string of Dflydev\FigCookies\Cookie::oneFromCookiePair() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $string of Dflydev\FigCookies\Cookie::oneFromCookiePair() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\FigRequestCookies::get() changed from no type to Dflydev\FigCookies\Cookie [BC] CHANGED: The parameter $name of Dflydev\FigCookies\FigRequestCookies::get() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $value of Dflydev\FigCookies\FigRequestCookies::get() changed from no type to a non-contravariant ?string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\FigRequestCookies::get() changed from no type to string [BC] CHANGED: The parameter $value of Dflydev\FigCookies\FigRequestCookies::get() changed from no type to ?string [BC] CHANGED: The return type of Dflydev\FigCookies\FigRequestCookies::set() changed from no type to Psr\Http\Message\RequestInterface [BC] CHANGED: The return type of Dflydev\FigCookies\FigRequestCookies::modify() changed from no type to Psr\Http\Message\RequestInterface [BC] CHANGED: The parameter $name of Dflydev\FigCookies\FigRequestCookies::modify() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $modify of Dflydev\FigCookies\FigRequestCookies::modify() changed from no type to a non-contravariant callable [BC] CHANGED: The parameter $name of Dflydev\FigCookies\FigRequestCookies::modify() changed from no type to string [BC] CHANGED: The parameter $modify of Dflydev\FigCookies\FigRequestCookies::modify() changed from no type to callable [BC] CHANGED: The return type of Dflydev\FigCookies\FigRequestCookies::remove() changed from no type to Psr\Http\Message\RequestInterface [BC] CHANGED: The parameter $name of Dflydev\FigCookies\FigRequestCookies::remove() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\FigRequestCookies::remove() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookies#has() changed from no type to bool [BC] CHANGED: The parameter $name of Dflydev\FigCookies\SetCookies#has() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\SetCookies#has() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookies#get() changed from no type to ?Dflydev\FigCookies\SetCookie [BC] CHANGED: The parameter $name of Dflydev\FigCookies\SetCookies#get() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\SetCookies#get() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookies#getAll() changed from no type to array [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookies#with() changed from no type to Dflydev\FigCookies\SetCookies [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookies#without() changed from no type to Dflydev\FigCookies\SetCookies [BC] CHANGED: The parameter $name of Dflydev\FigCookies\SetCookies#without() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\SetCookies#without() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookies#renderIntoSetCookieHeader() changed from no type to Psr\Http\Message\ResponseInterface [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookies::fromSetCookieStrings() changed from no type to self [BC] CHANGED: The parameter $setCookieStrings of Dflydev\FigCookies\SetCookies::fromSetCookieStrings() changed from no type to a non-contravariant array [BC] CHANGED: The parameter $setCookieStrings of Dflydev\FigCookies\SetCookies::fromSetCookieStrings() changed from no type to array [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookies::fromResponse() changed from no type to Dflydev\FigCookies\SetCookies [BC] CHANGED: The return type of Dflydev\FigCookies\StringUtil::splitOnAttributeDelimiter() changed from no type to array [BC] CHANGED: The parameter $string of Dflydev\FigCookies\StringUtil::splitOnAttributeDelimiter() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $string of Dflydev\FigCookies\StringUtil::splitOnAttributeDelimiter() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\StringUtil::splitCookiePair() changed from no type to array [BC] CHANGED: The parameter $string of Dflydev\FigCookies\StringUtil::splitCookiePair() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $string of Dflydev\FigCookies\StringUtil::splitCookiePair() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#getName() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#getValue() changed from no type to ?string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#getExpires() changed from no type to int [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#getMaxAge() changed from no type to int [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#getPath() changed from no type to ?string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#getDomain() changed from no type to ?string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#getSecure() changed from no type to bool [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#getHttpOnly() changed from no type to bool [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#withValue() changed from no type to self [BC] CHANGED: The parameter $value of Dflydev\FigCookies\SetCookie#withValue() changed from no type to a non-contravariant ?string [BC] CHANGED: The parameter $value of Dflydev\FigCookies\SetCookie#withValue() changed from no type to ?string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#withExpires() changed from no type to self [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#rememberForever() changed from no type to self [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#expire() changed from no type to self [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#withMaxAge() changed from no type to self [BC] CHANGED: The parameter $maxAge of Dflydev\FigCookies\SetCookie#withMaxAge() changed from no type to a non-contravariant ?int [BC] CHANGED: The parameter $maxAge of Dflydev\FigCookies\SetCookie#withMaxAge() changed from no type to ?int [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#withPath() changed from no type to self [BC] CHANGED: The parameter $path of Dflydev\FigCookies\SetCookie#withPath() changed from no type to a non-contravariant ?string [BC] CHANGED: The parameter $path of Dflydev\FigCookies\SetCookie#withPath() changed from no type to ?string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#withDomain() changed from no type to self [BC] CHANGED: The parameter $domain of Dflydev\FigCookies\SetCookie#withDomain() changed from no type to a non-contravariant ?string [BC] CHANGED: The parameter $domain of Dflydev\FigCookies\SetCookie#withDomain() changed from no type to ?string [BC] CHANGED: Default parameter value for for parameter $secure of Dflydev\FigCookies\SetCookie#withSecure() changed from NULL to true [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#withSecure() changed from no type to self [BC] CHANGED: The parameter $secure of Dflydev\FigCookies\SetCookie#withSecure() changed from no type to a non-contravariant bool [BC] CHANGED: The parameter $secure of Dflydev\FigCookies\SetCookie#withSecure() changed from no type to bool [BC] CHANGED: Default parameter value for for parameter $httpOnly of Dflydev\FigCookies\SetCookie#withHttpOnly() changed from NULL to true [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#withHttpOnly() changed from no type to self [BC] CHANGED: The parameter $httpOnly of Dflydev\FigCookies\SetCookie#withHttpOnly() changed from no type to a non-contravariant bool [BC] CHANGED: The parameter $httpOnly of Dflydev\FigCookies\SetCookie#withHttpOnly() changed from no type to bool [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie#__toString() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie::create() changed from no type to self [BC] CHANGED: The parameter $name of Dflydev\FigCookies\SetCookie::create() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $value of Dflydev\FigCookies\SetCookie::create() changed from no type to a non-contravariant ?string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\SetCookie::create() changed from no type to string [BC] CHANGED: The parameter $value of Dflydev\FigCookies\SetCookie::create() changed from no type to ?string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie::createRememberedForever() changed from no type to self [BC] CHANGED: The parameter $name of Dflydev\FigCookies\SetCookie::createRememberedForever() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $value of Dflydev\FigCookies\SetCookie::createRememberedForever() changed from no type to a non-contravariant ?string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\SetCookie::createRememberedForever() changed from no type to string [BC] CHANGED: The parameter $value of Dflydev\FigCookies\SetCookie::createRememberedForever() changed from no type to ?string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie::createExpired() changed from no type to self [BC] CHANGED: The parameter $name of Dflydev\FigCookies\SetCookie::createExpired() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\SetCookie::createExpired() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\SetCookie::fromSetCookieString() changed from no type to self [BC] CHANGED: The parameter $string of Dflydev\FigCookies\SetCookie::fromSetCookieString() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $string of Dflydev\FigCookies\SetCookie::fromSetCookieString() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\FigResponseCookies::get() changed from no type to Dflydev\FigCookies\SetCookie [BC] CHANGED: The parameter $name of Dflydev\FigCookies\FigResponseCookies::get() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $value of Dflydev\FigCookies\FigResponseCookies::get() changed from no type to a non-contravariant ?string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\FigResponseCookies::get() changed from no type to string [BC] CHANGED: The parameter $value of Dflydev\FigCookies\FigResponseCookies::get() changed from no type to ?string [BC] CHANGED: The return type of Dflydev\FigCookies\FigResponseCookies::set() changed from no type to Psr\Http\Message\ResponseInterface [BC] CHANGED: The return type of Dflydev\FigCookies\FigResponseCookies::expire() changed from no type to Psr\Http\Message\ResponseInterface [BC] CHANGED: The parameter $cookieName of Dflydev\FigCookies\FigResponseCookies::expire() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $cookieName of Dflydev\FigCookies\FigResponseCookies::expire() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\FigResponseCookies::modify() changed from no type to Psr\Http\Message\ResponseInterface [BC] CHANGED: The parameter $name of Dflydev\FigCookies\FigResponseCookies::modify() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $modify of Dflydev\FigCookies\FigResponseCookies::modify() changed from no type to a non-contravariant callable [BC] CHANGED: The parameter $name of Dflydev\FigCookies\FigResponseCookies::modify() changed from no type to string [BC] CHANGED: The parameter $modify of Dflydev\FigCookies\FigResponseCookies::modify() changed from no type to callable [BC] CHANGED: The return type of Dflydev\FigCookies\FigResponseCookies::remove() changed from no type to Psr\Http\Message\ResponseInterface [BC] CHANGED: The parameter $name of Dflydev\FigCookies\FigResponseCookies::remove() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\FigResponseCookies::remove() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\Cookies#has() changed from no type to bool [BC] CHANGED: The parameter $name of Dflydev\FigCookies\Cookies#has() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\Cookies#has() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\Cookies#get() changed from no type to ?Dflydev\FigCookies\Cookie [BC] CHANGED: The parameter $name of Dflydev\FigCookies\Cookies#get() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\Cookies#get() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\Cookies#getAll() changed from no type to array [BC] CHANGED: The return type of Dflydev\FigCookies\Cookies#with() changed from no type to Dflydev\FigCookies\Cookies [BC] CHANGED: The return type of Dflydev\FigCookies\Cookies#without() changed from no type to Dflydev\FigCookies\Cookies [BC] CHANGED: The parameter $name of Dflydev\FigCookies\Cookies#without() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $name of Dflydev\FigCookies\Cookies#without() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\Cookies#renderIntoCookieHeader() changed from no type to Psr\Http\Message\RequestInterface [BC] CHANGED: The return type of Dflydev\FigCookies\Cookies::fromCookieString() changed from no type to self [BC] CHANGED: The parameter $string of Dflydev\FigCookies\Cookies::fromCookieString() changed from no type to a non-contravariant string [BC] CHANGED: The parameter $string of Dflydev\FigCookies\Cookies::fromCookieString() changed from no type to string [BC] CHANGED: The return type of Dflydev\FigCookies\Cookies::fromRequest() changed from no type to Dflydev\FigCookies\Cookies ``` - [#31](https://github.com/dflydev/dflydev-fig-cookies/pull/32) A new abstraction was introduced to support `SameSite=Lax` and `SameSite=Strict` `Set-Cookie` header modifiers. ### Deprecated - Nothing. ### Removed - Nothing. ### Fixed - [#31](https://github.com/dflydev/dflydev-fig-cookies/pull/32) `SetCookie#withExpires()` will now reject any expiry time that cannot be parsed into a timestamp. - [#31](https://github.com/dflydev/dflydev-fig-cookies/pull/32) A `SetCookie` can no longer be constructed via `Dflydev\FigCookies\SetCookie::fromSetCookieString('')`: an empty string will now be rejected. dflydev-fig-cookies-2.0.0/LICENSE000066400000000000000000000020561332132465500163570ustar00rootroot00000000000000Copyright (c) 2015 Dragonfly Development Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. dflydev-fig-cookies-2.0.0/README.md000066400000000000000000000235031332132465500166310ustar00rootroot00000000000000FIG Cookies =========== Managing Cookies for PSR-7 Requests and Responses. [![Latest Stable Version](https://poser.pugx.org/dflydev/fig-cookies/v/stable)](https://packagist.org/packages/dflydev/fig-cookies) [![Total Downloads](https://poser.pugx.org/dflydev/fig-cookies/downloads)](https://packagist.org/packages/dflydev/fig-cookies) [![Latest Unstable Version](https://poser.pugx.org/dflydev/fig-cookies/v/unstable)](https://packagist.org/packages/dflydev/fig-cookies) [![License](https://poser.pugx.org/dflydev/fig-cookies/license)](https://packagist.org/packages/dflydev/fig-cookies)
[![Build Status](https://travis-ci.org/dflydev/dflydev-fig-cookies.svg?branch=master)](https://travis-ci.org/dflydev/dflydev-fig-cookies) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/dflydev/dflydev-fig-cookies/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/dflydev/dflydev-fig-cookies/?branch=master) [![Code Coverage](https://scrutinizer-ci.com/g/dflydev/dflydev-fig-cookies/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/dflydev/dflydev-fig-cookies/?branch=master) [![Code Climate](https://codeclimate.com/github/dflydev/dflydev-fig-cookies/badges/gpa.svg)](https://codeclimate.com/github/dflydev/dflydev-fig-cookies)
[![Join the chat at https://gitter.im/dflydev/dflydev-fig-cookies](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/dflydev/dflydev-fig-cookies?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Installation ------------ ```bash $> composer require dflydev/fig-cookies ``` Concepts -------- FIG Cookies tackles two problems, managing **Cookie** *Request* headers and managing **Set-Cookie** *Response* headers. It does this by way of introducing a `Cookies` class to manage collections of `Cookie` instances and a `SetCookies` class to manage collections of `SetCookie` instances. Instantiating these collections looks like this: ```php // Get a collection representing the cookies in the Cookie headers // of a PSR-7 Request. $cookies = Dflydev\FigCookies\Cookies::fromRequest($request); // Get a collection representing the cookies in the Set-Cookie headers // of a PSR-7 Response $setCookies = Dflydev\FigCookies\SetCookies::fromResponse($response); ``` After modifying these collections in some way, they are rendered into a PSR-7 Request or PSR-7 Response like this: ```php // Render the Cookie headers and add them to the headers of a // PSR-7 Request. $request = $cookies->renderIntoCookieHeader($request); // Render the Set-Cookie headers and add them to the headers of a // PSR-7 Response. $response = $setCookies->renderIntoSetCookieHeader($response); ``` Like PSR-7 Messages, `Cookie`, `Cookies`, `SetCookie`, and `SetCookies` are all represented as immutable value objects and all mutators will return new instances of the original with the requested changes. While this style of design has many benefits it can become fairly verbose very quickly. In order to get around that, FIG Cookies provides two facades in an attempt to help simply things and make the whole process less verbose. Basic Usage ----------- The easiest way to start working with FIG Cookies is by using the `FigRequestCookies` and `FigResponseCookies` classes. They are facades to the primitive FIG Cookies classes. Their jobs are to make common cookie related tasks easier and less verbose than working with the primitive classes directly. There is overhead on creating `Cookies` and `SetCookies` and rebuilding requests and responses. Each of the `FigCookies` methods will go through this process so be wary of using too many of these calls in the same section of code. In some cases it may be better to work with the primitive FIG Cookies classes directly rather than using the facades. ### Request Cookies Requests include cookie information in the **Cookie** request header. The cookies in this header are represented by the `Cookie` class. ```php use Dflydev\FigCookies\Cookie; $cookie = Cookie::create('theme', 'blue'); ``` To easily work with request cookies, use the `FigRequestCookies` facade. #### Get a Request Cookie The `get` method will return a `Cookie` instance. If no cookie by the specified name exists, the returned `Cookie` instance will have a `null` value. The optional third parameter to `get` sets the value that should be used if a cookie does not exist. ```php use Dflydev\FigCookies\FigRequestCookies; $cookie = FigRequestCookies::get($request, 'theme'); $cookie = FigRequestCookies::get($request, 'theme', 'default-theme'); ``` #### Set a Request Cookie The `set` method will either add a cookie or replace an existing cookie. The `Cookie` primitive is used as the second argument. ```php use Dflydev\FigCookies\FigRequestCookies; $request = FigRequestCookies::set($request, Cookie::create('theme', 'blue')); ``` #### Modify a Request Cookie The `modify` method allows for replacing the contents of a cookie based on the current cookie with the specified name. The third argument is a `callable` that takes a `Cookie` instance as its first argument and is expected to return a `Cookie` instance. If no cookie by the specified name exists, a new `Cookie` instance with a `null` value will be passed to the callable. ```php use Dflydev\FigCookies\FigRequestCookies; $modify = function (Cookie $cookie) { $value = $cookie->getValue(); // ... inspect current $value and determine if $value should // change or if it can stay the same. in all cases, a cookie // should be returned from this callback... return $cookie->withValue($value); } $request = FigRequestCookies::modify($request, 'theme', $modify); ``` #### Remove a Request Cookie The `remove` method removes a cookie if it exists. ```php use Dflydev\FigCookies\FigRequestCookies; $request = FigRequestCookies::remove($request, 'theme'); ``` Note that this does not cause the client to remove the cookie. Take a look at `FigResponseCookies::expire` to do that. ### Response Cookies Responses include cookie information in the **Set-Cookie** response header. The cookies in these headers are represented by the `SetCookie` class. ```php use Dflydev\FigCookies\Modifier\SameSite; use Dflydev\FigCookies\SetCookie; $setCookie = SetCookie::create('lu') ->withValue('Rg3vHJZnehYLjVg7qi3bZjzg') ->withExpires('Tue, 15-Jan-2013 21:47:38 GMT') ->withMaxAge(500) ->rememberForever() ->withPath('/') ->withDomain('.example.com') ->withSecure(true) ->withHttpOnly(true) ->withSameSite(SameSite::lax()) ; ``` To easily work with response cookies, use the `FigResponseCookies` facade. #### Get a Response Cookie The `get` method will return a `SetCookie` instance. If no cookie by the specified name exists, the returned `SetCookie` instance will have a `null` value. The optional third parameter to `get` sets the value that should be used if a cookie does not exist. ```php use Dflydev\FigCookies\FigResponseCookies; $setCookie = FigResponseCookies::get($response, 'theme'); $setCookie = FigResponseCookies::get($response, 'theme', 'simple'); ``` #### Set a Response Cookie The `set` method will either add a cookie or replace an existing cookie. The `SetCookie` primitive is used as the second argument. ```php use Dflydev\FigCookies\FigResponseCookies; $response = FigResponseCookies::set($response, SetCookie::create('token') ->withValue('a9s87dfz978a9') ->withDomain('example.com') ->withPath('/firewall') ); ``` #### Modify a Response Cookie The `modify` method allows for replacing the contents of a cookie based on the current cookie with the specified name. The third argument is a `callable` that takes a `SetCookie` instance as its first argument and is expected to return a `SetCookie` instance. If no cookie by the specified name exists, a new `SetCookie` instance with a `null` value will be passed to the callable. ```php use Dflydev\FigCookies\FigResponseCookies; $modify = function (SetCookie $setCookie) { $value = $setCookie->getValue(); // ... inspect current $value and determine if $value should // change or if it can stay the same. in all cases, a cookie // should be returned from this callback... return $setCookie ->withValue($newValue) ->withExpires($newExpires) ; } $response = FigResponseCookies::modify($response, 'theme', $modify); ``` #### Remove a Response Cookie The `remove` method removes a cookie from the response if it exists. ```php use Dflydev\FigCookies\FigResponseCookies; $response = FigResponseCookies::remove($response, 'theme'); ``` #### Expire a Response Cookie The `expire` method sets a cookie with an expiry date in the far past. This causes the client to remove the cookie. ```php use Dflydev\FigCookies\FigResponseCookies; $response = FigResponseCookies::expire($response, 'session_cookie'); ``` FAQ --- ### Do you call `setcookies`? No. Delivery of the rendered `SetCookie` instances is the responsibility of the PSR-7 client implementation. ### Do you do anything with sessions? No. It would be possible to build session handling using cookies on top of FIG Cookies but it is out of scope for this package. ### Do you read from `$_COOKIES`? No. FIG Cookies only pays attention to the `Cookie` headers on [PSR-7](https://packagist.org/packages/psr/http-message) Request instances. In the case of `ServerRequestInterface` instances, PSR-7 implementations should be including `$_COOKIES` values in the headers so in that case FIG Cookies may be interacting with `$_COOKIES` indirectly. License ------- MIT, see LICENSE. Community --------- Want to get involved? Here are a few ways: * Find us in the #dflydev IRC channel on irc.freenode.org. * Mention [@dflydev](https://twitter.com/dflydev) on Twitter. * [![Join the chat at https://gitter.im/dflydev/dflydev-fig-cookies](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/dflydev/dflydev-fig-cookies?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) dflydev-fig-cookies-2.0.0/composer.json000066400000000000000000000016271332132465500200770ustar00rootroot00000000000000{ "name": "dflydev/fig-cookies", "description": "Cookies for PSR-7 HTTP Message Interface.", "license": "MIT", "keywords": ["psr7", "psr-7", "cookies"], "authors": [ { "name": "Beau Simensen", "email": "beau@dflydev.com" } ], "require": { "php": "^7.2", "ext-pcre": "*", "psr/http-message": "^1" }, "autoload": { "psr-4": { "Dflydev\\FigCookies\\": "src/Dflydev/FigCookies" } }, "require-dev": { "phpunit/phpunit": "^7.2.6", "squizlabs/php_codesniffer": "^3.3", "doctrine/coding-standard": "^4", "phpstan/phpstan": "^0.10.1" }, "autoload-dev": { "psr-4": { "Dflydev\\FigCookies\\": "tests/Dflydev/FigCookies" } }, "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } } } dflydev-fig-cookies-2.0.0/composer.lock000066400000000000000000002710631332132465500200610ustar00rootroot00000000000000{ "_readme": [ "This file locks the dependencies of your project to a known state", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], "content-hash": "56de4a3ac9359be2740da28c02dc813b", "packages": [ { "name": "psr/http-message", "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "shasum": "" }, "require": { "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "PHP-FIG", "homepage": "http://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", "homepage": "https://github.com/php-fig/http-message", "keywords": [ "http", "http-message", "psr", "psr-7", "request", "response" ], "time": "2016-08-06T14:39:51+00:00" } ], "packages-dev": [ { "name": "composer/xdebug-handler", "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/c919dc6c62e221fc6406f861ea13433c0aa24f08", "reference": "c919dc6c62e221fc6406f861ea13433c0aa24f08", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0", "psr/log": "^1.0" }, "require-dev": { "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" }, "type": "library", "autoload": { "psr-4": { "Composer\\XdebugHandler\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "John Stevenson", "email": "john-stevenson@blueyonder.co.uk" } ], "description": "Restarts a process without xdebug.", "keywords": [ "Xdebug", "performance" ], "time": "2018-04-11T15:42:36+00:00" }, { "name": "dealerdirect/phpcodesniffer-composer-installer", "version": "v0.4.4", "source": { "type": "git", "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", "reference": "2e41850d5f7797cbb1af7b030d245b3b24e63a08" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/2e41850d5f7797cbb1af7b030d245b3b24e63a08", "reference": "2e41850d5f7797cbb1af7b030d245b3b24e63a08", "shasum": "" }, "require": { "composer-plugin-api": "^1.0", "php": "^5.3|^7", "squizlabs/php_codesniffer": "*" }, "require-dev": { "composer/composer": "*", "wimg/php-compatibility": "^8.0" }, "suggest": { "dealerdirect/qa-tools": "All the PHP QA tools you'll need" }, "type": "composer-plugin", "extra": { "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" }, "autoload": { "psr-4": { "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Franck Nijhof", "email": "f.nijhof@dealerdirect.nl", "homepage": "http://workingatdealerdirect.eu", "role": "Developer" } ], "description": "PHP_CodeSniffer Standards Composer Installer Plugin", "homepage": "http://workingatdealerdirect.eu", "keywords": [ "PHPCodeSniffer", "PHP_CodeSniffer", "code quality", "codesniffer", "composer", "installer", "phpcs", "plugin", "qa", "quality", "standard", "standards", "style guide", "stylecheck", "tests" ], "time": "2017-12-06T16:27:17+00:00" }, { "name": "doctrine/coding-standard", "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/coding-standard.git", "reference": "0469c18a1a4724c278f2879c0dd7b1fa860b52de" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/doctrine/coding-standard/zipball/0469c18a1a4724c278f2879c0dd7b1fa860b52de", "reference": "0469c18a1a4724c278f2879c0dd7b1fa860b52de", "shasum": "" }, "require": { "dealerdirect/phpcodesniffer-composer-installer": "^0.4.2", "php": "^7.1", "slevomat/coding-standard": "^4.5.0", "squizlabs/php_codesniffer": "^3.2.3" }, "type": "phpcodesniffer-standard", "extra": { "branch-alias": { "dev-master": "3.0.x-dev" } }, "autoload": { "psr-4": { "Doctrine\\Sniffs\\": "lib/Doctrine/Sniffs" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Benjamin Eberlei", "email": "kontakt@beberlei.de" }, { "name": "Steve MΓΌller", "email": "st.mueller@dzh-online.de" } ], "description": "Doctrine Coding Standard", "homepage": "http://www.doctrine-project.org", "keywords": [ "code", "coding", "cs", "doctrine", "sniffer", "standard", "style" ], "time": "2018-03-03T23:49:15+00:00" }, { "name": "doctrine/instantiator", "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", "shasum": "" }, "require": { "php": "^7.1" }, "require-dev": { "athletic/athletic": "~0.1.8", "ext-pdo": "*", "ext-phar": "*", "phpunit/phpunit": "^6.2.3", "squizlabs/php_codesniffer": "^3.0.2" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.2.x-dev" } }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", "homepage": "http://ocramius.github.com/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", "homepage": "https://github.com/doctrine/instantiator", "keywords": [ "constructor", "instantiate" ], "time": "2017-07-22T11:58:36+00:00" }, { "name": "jean85/pretty-package-versions", "version": "1.2", "source": { "type": "git", "url": "https://github.com/Jean85/pretty-package-versions.git", "reference": "75c7effcf3f77501d0e0caa75111aff4daa0dd48" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/75c7effcf3f77501d0e0caa75111aff4daa0dd48", "reference": "75c7effcf3f77501d0e0caa75111aff4daa0dd48", "shasum": "" }, "require": { "ocramius/package-versions": "^1.2.0", "php": "^7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { "Jean85\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Alessandro Lai", "email": "alessandro.lai85@gmail.com" } ], "description": "A wrapper for ocramius/package-versions to get pretty versions strings", "keywords": [ "composer", "package", "release", "versions" ], "time": "2018-06-13T13:22:40+00:00" }, { "name": "myclabs/deep-copy", "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", "shasum": "" }, "require": { "php": "^7.1" }, "replace": { "myclabs/deep-copy": "self.version" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { "psr-4": { "DeepCopy\\": "src/DeepCopy/" }, "files": [ "src/DeepCopy/deep_copy.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "Create deep copies (clones) of your objects", "keywords": [ "clone", "copy", "duplicate", "object", "object graph" ], "time": "2018-06-11T23:09:50+00:00" }, { "name": "nette/bootstrap", "version": "v2.4.6", "source": { "type": "git", "url": "https://github.com/nette/bootstrap.git", "reference": "268816e3f1bb7426c3a4ceec2bd38a036b532543" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/nette/bootstrap/zipball/268816e3f1bb7426c3a4ceec2bd38a036b532543", "reference": "268816e3f1bb7426c3a4ceec2bd38a036b532543", "shasum": "" }, "require": { "nette/di": "~2.4.7", "nette/utils": "~2.4", "php": ">=5.6.0" }, "conflict": { "nette/nette": "<2.2" }, "require-dev": { "latte/latte": "~2.2", "nette/application": "~2.3", "nette/caching": "~2.3", "nette/database": "~2.3", "nette/forms": "~2.3", "nette/http": "~2.4.0", "nette/mail": "~2.3", "nette/robot-loader": "^2.4.2 || ^3.0", "nette/safe-stream": "~2.2", "nette/security": "~2.3", "nette/tester": "~2.0", "tracy/tracy": "^2.4.1" }, "suggest": { "nette/robot-loader": "to use Configurator::createRobotLoader()", "tracy/tracy": "to use Configurator::enableTracy()" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.4-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause", "GPL-2.0", "GPL-3.0" ], "authors": [ { "name": "David Grudl", "homepage": "https://davidgrudl.com" }, { "name": "Nette Community", "homepage": "https://nette.org/contributors" } ], "description": "πŸ…± Nette Bootstrap: the simple way to configure and bootstrap your Nette application.", "homepage": "https://nette.org", "keywords": [ "bootstrapping", "configurator", "nette" ], "time": "2018-05-17T12:52:20+00:00" }, { "name": "nette/di", "version": "v2.4.13", "source": { "type": "git", "url": "https://github.com/nette/di.git", "reference": "3f8f212b02d5c17feb97a7e0a39ab306f40c06ca" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/nette/di/zipball/3f8f212b02d5c17feb97a7e0a39ab306f40c06ca", "reference": "3f8f212b02d5c17feb97a7e0a39ab306f40c06ca", "shasum": "" }, "require": { "ext-tokenizer": "*", "nette/neon": "^2.3.3 || ~3.0.0", "nette/php-generator": "^2.6.1 || ~3.0.0", "nette/utils": "^2.4.3 || ~3.0.0", "php": ">=5.6.0" }, "conflict": { "nette/bootstrap": "<2.4", "nette/nette": "<2.2" }, "require-dev": { "nette/tester": "^2.0", "tracy/tracy": "^2.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.4-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause", "GPL-2.0", "GPL-3.0" ], "authors": [ { "name": "David Grudl", "homepage": "https://davidgrudl.com" }, { "name": "Nette Community", "homepage": "https://nette.org/contributors" } ], "description": "πŸ’Ž Nette Dependency Injection Container: Flexible, compiled and full-featured DIC with perfectly usable autowiring and support for all new PHP 7.1 features.", "homepage": "https://nette.org", "keywords": [ "compiled", "di", "dic", "factory", "ioc", "nette", "static" ], "time": "2018-06-11T08:46:01+00:00" }, { "name": "nette/finder", "version": "v2.4.2", "source": { "type": "git", "url": "https://github.com/nette/finder.git", "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/nette/finder/zipball/ee951a656cb8ac622e5dd33474a01fd2470505a0", "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0", "shasum": "" }, "require": { "nette/utils": "~2.4", "php": ">=5.6.0" }, "conflict": { "nette/nette": "<2.2" }, "require-dev": { "nette/tester": "~2.0", "tracy/tracy": "^2.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.4-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause", "GPL-2.0", "GPL-3.0" ], "authors": [ { "name": "David Grudl", "homepage": "https://davidgrudl.com" }, { "name": "Nette Community", "homepage": "https://nette.org/contributors" } ], "description": "πŸ” Nette Finder: find files and directories with an intuitive API.", "homepage": "https://nette.org", "keywords": [ "filesystem", "glob", "iterator", "nette" ], "time": "2018-06-28T11:49:23+00:00" }, { "name": "nette/neon", "version": "v2.4.3", "source": { "type": "git", "url": "https://github.com/nette/neon.git", "reference": "5e72b1dd3e2d34f0863c5561139a19df6a1ef398" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/nette/neon/zipball/5e72b1dd3e2d34f0863c5561139a19df6a1ef398", "reference": "5e72b1dd3e2d34f0863c5561139a19df6a1ef398", "shasum": "" }, "require": { "ext-iconv": "*", "ext-json": "*", "php": ">=5.6.0" }, "require-dev": { "nette/tester": "~2.0", "tracy/tracy": "^2.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.4-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause", "GPL-2.0", "GPL-3.0" ], "authors": [ { "name": "David Grudl", "homepage": "https://davidgrudl.com" }, { "name": "Nette Community", "homepage": "https://nette.org/contributors" } ], "description": "🍸 Nette NEON: encodes and decodes NEON file format.", "homepage": "http://ne-on.org", "keywords": [ "export", "import", "neon", "nette", "yaml" ], "time": "2018-03-21T12:12:21+00:00" }, { "name": "nette/php-generator", "version": "v3.0.4", "source": { "type": "git", "url": "https://github.com/nette/php-generator.git", "reference": "b381ecacbf5a0b5f99cc0b303d5b0578d409f446" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/nette/php-generator/zipball/b381ecacbf5a0b5f99cc0b303d5b0578d409f446", "reference": "b381ecacbf5a0b5f99cc0b303d5b0578d409f446", "shasum": "" }, "require": { "nette/utils": "^2.4.2 || ~3.0.0", "php": ">=7.0" }, "conflict": { "nette/nette": "<2.2" }, "require-dev": { "nette/tester": "^2.0", "tracy/tracy": "^2.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause", "GPL-2.0", "GPL-3.0" ], "authors": [ { "name": "David Grudl", "homepage": "https://davidgrudl.com" }, { "name": "Nette Community", "homepage": "https://nette.org/contributors" } ], "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 7.2 features.", "homepage": "https://nette.org", "keywords": [ "code", "nette", "php", "scaffolding" ], "time": "2018-04-26T16:48:20+00:00" }, { "name": "nette/robot-loader", "version": "v3.0.4", "source": { "type": "git", "url": "https://github.com/nette/robot-loader.git", "reference": "3cf88781a05e0bf4618ae605361afcbaa4d5b392" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/nette/robot-loader/zipball/3cf88781a05e0bf4618ae605361afcbaa4d5b392", "reference": "3cf88781a05e0bf4618ae605361afcbaa4d5b392", "shasum": "" }, "require": { "ext-tokenizer": "*", "nette/finder": "^2.3 || ^3.0", "nette/utils": "^2.4 || ^3.0", "php": ">=5.6.0" }, "conflict": { "nette/nette": "<2.2" }, "require-dev": { "nette/tester": "^2.0", "tracy/tracy": "^2.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause", "GPL-2.0", "GPL-3.0" ], "authors": [ { "name": "David Grudl", "homepage": "https://davidgrudl.com" }, { "name": "Nette Community", "homepage": "https://nette.org/contributors" } ], "description": "πŸ€ Nette RobotLoader: high performance and comfortable autoloader that will search and autoload classes within your application.", "homepage": "https://nette.org", "keywords": [ "autoload", "class", "interface", "nette", "trait" ], "time": "2018-06-22T09:34:04+00:00" }, { "name": "nette/utils", "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/nette/utils.git", "reference": "183069866dc477fcfbac393ed486aaa6d93d19a5" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/nette/utils/zipball/183069866dc477fcfbac393ed486aaa6d93d19a5", "reference": "183069866dc477fcfbac393ed486aaa6d93d19a5", "shasum": "" }, "require": { "php": ">=5.6.0" }, "conflict": { "nette/nette": "<2.2" }, "require-dev": { "nette/tester": "~2.0", "tracy/tracy": "^2.3" }, "suggest": { "ext-gd": "to use Image", "ext-iconv": "to use Strings::webalize() and toAscii()", "ext-intl": "for script transliteration in Strings::webalize() and toAscii()", "ext-json": "to use Nette\\Utils\\Json", "ext-mbstring": "to use Strings::lower() etc...", "ext-xml": "to use Strings::length() etc. when mbstring is not available" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.5-dev" } }, "autoload": { "classmap": [ "src/" ], "files": [ "src/loader.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause", "GPL-2.0", "GPL-3.0" ], "authors": [ { "name": "David Grudl", "homepage": "https://davidgrudl.com" }, { "name": "Nette Community", "homepage": "https://nette.org/contributors" } ], "description": "πŸ›  Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", "homepage": "https://nette.org", "keywords": [ "array", "core", "datetime", "images", "json", "nette", "paginator", "password", "slugify", "string", "unicode", "utf-8", "utility", "validation" ], "time": "2018-05-02T17:16:08+00:00" }, { "name": "nikic/php-parser", "version": "v4.0.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", "reference": "35b8caf75e791ba1b2d24fec1552168d72692b12" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/35b8caf75e791ba1b2d24fec1552168d72692b12", "reference": "35b8caf75e791ba1b2d24fec1552168d72692b12", "shasum": "" }, "require": { "ext-tokenizer": "*", "php": ">=7.0" }, "require-dev": { "phpunit/phpunit": "^6.5 || ^7.0" }, "bin": [ "bin/php-parse" ], "type": "library", "extra": { "branch-alias": { "dev-master": "4.0-dev" } }, "autoload": { "psr-4": { "PhpParser\\": "lib/PhpParser" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Nikita Popov" } ], "description": "A PHP parser written in PHP", "keywords": [ "parser", "php" ], "time": "2018-06-03T11:33:10+00:00" }, { "name": "ocramius/package-versions", "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/Ocramius/PackageVersions.git", "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/4489d5002c49d55576fa0ba786f42dbb009be46f", "reference": "4489d5002c49d55576fa0ba786f42dbb009be46f", "shasum": "" }, "require": { "composer-plugin-api": "^1.0.0", "php": "^7.1.0" }, "require-dev": { "composer/composer": "^1.6.3", "ext-zip": "*", "infection/infection": "^0.7.1", "phpunit/phpunit": "^7.0.0" }, "type": "composer-plugin", "extra": { "class": "PackageVersions\\Installer", "branch-alias": { "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { "PackageVersions\\": "src/PackageVersions" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Marco Pivetta", "email": "ocramius@gmail.com" } ], "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", "time": "2018-02-05T13:05:30+00:00" }, { "name": "phar-io/manifest", "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", "phar-io/version": "^1.0.1", "php": "^5.6 || ^7.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" }, { "name": "Sebastian Heuer", "email": "sebastian@phpeople.de", "role": "Developer" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "Developer" } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "time": "2017-03-05T18:14:27+00:00" }, { "name": "phar-io/version", "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", "shasum": "" }, "require": { "php": "^5.6 || ^7.0" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" }, { "name": "Sebastian Heuer", "email": "sebastian@phpeople.de", "role": "Developer" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "Developer" } ], "description": "Library for handling version information and constraints", "time": "2017-03-05T17:38:23+00:00" }, { "name": "phpdocumentor/reflection-common", "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { "php": ">=5.5" }, "require-dev": { "phpunit/phpunit": "^4.6" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ "src" ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Jaap van Otterdijk", "email": "opensource@ijaap.nl" } ], "description": "Common reflection classes used by phpdocumentor to reflect the code structure", "homepage": "http://www.phpdoc.org", "keywords": [ "FQSEN", "phpDocumentor", "phpdoc", "reflection", "static analysis" ], "time": "2017-09-11T18:02:19+00:00" }, { "name": "phpdocumentor/reflection-docblock", "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", "reference": "94fd0001232e47129dd3504189fa1c7225010d08" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", "reference": "94fd0001232e47129dd3504189fa1c7225010d08", "shasum": "" }, "require": { "php": "^7.0", "phpdocumentor/reflection-common": "^1.0.0", "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { "doctrine/instantiator": "~1.0.5", "mockery/mockery": "^1.0", "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { "dev-master": "4.x-dev" } }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ "src/" ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Mike van Riel", "email": "me@mikevanriel.com" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "time": "2017-11-30T07:14:17+00:00" }, { "name": "phpdocumentor/type-resolver", "version": "0.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", "shasum": "" }, "require": { "php": "^5.5 || ^7.0", "phpdocumentor/reflection-common": "^1.0" }, "require-dev": { "mockery/mockery": "^0.9.4", "phpunit/phpunit": "^5.2||^4.8.24" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ "src/" ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Mike van Riel", "email": "me@mikevanriel.com" } ], "time": "2017-07-14T14:27:02+00:00" }, { "name": "phpspec/prophecy", "version": "1.7.6", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", "sebastian/comparator": "^1.1|^2.0|^3.0", "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { "phpspec/phpspec": "^2.5|^3.2", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.7.x-dev" } }, "autoload": { "psr-0": { "Prophecy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Konstantin Kudryashov", "email": "ever.zet@gmail.com", "homepage": "http://everzet.com" }, { "name": "Marcello Duarte", "email": "marcello.duarte@gmail.com" } ], "description": "Highly opinionated mocking framework for PHP 5.3+", "homepage": "https://github.com/phpspec/prophecy", "keywords": [ "Double", "Dummy", "fake", "mock", "spy", "stub" ], "time": "2018-04-18T13:57:24+00:00" }, { "name": "phpstan/phpdoc-parser", "version": "0.3", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", "reference": "ed3223362174b8067729930439e139794e9e514a" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/ed3223362174b8067729930439e139794e9e514a", "reference": "ed3223362174b8067729930439e139794e9e514a", "shasum": "" }, "require": { "php": "~7.1" }, "require-dev": { "consistence/coding-standard": "^2.0.0", "jakub-onderka/php-parallel-lint": "^0.9.2", "phing/phing": "^2.16.0", "phpstan/phpstan": "^0.10@dev", "phpunit/phpunit": "^6.3", "slevomat/coding-standard": "^3.3.0", "symfony/process": "^3.4 || ^4.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "0.3-dev" } }, "autoload": { "psr-4": { "PHPStan\\PhpDocParser\\": [ "src/" ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "PHPDoc parser with support for nullable, intersection and generic types", "time": "2018-06-20T17:48:01+00:00" }, { "name": "phpstan/phpstan", "version": "0.10.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", "reference": "3179cf27542e9e47acb548150e7ca21ca5ab92d6" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpstan/phpstan/zipball/3179cf27542e9e47acb548150e7ca21ca5ab92d6", "reference": "3179cf27542e9e47acb548150e7ca21ca5ab92d6", "shasum": "" }, "require": { "composer/xdebug-handler": "^1.0", "jean85/pretty-package-versions": "^1.0.3", "nette/bootstrap": "^2.4 || ^3.0", "nette/di": "^2.4.7 || ^3.0", "nette/robot-loader": "^3.0.1", "nette/utils": "^2.4.5 || ^3.0", "nikic/php-parser": "^4.0.2", "php": "~7.1", "phpstan/phpdoc-parser": "^0.3", "symfony/console": "~3.2 || ~4.0", "symfony/finder": "~3.2 || ~4.0" }, "require-dev": { "brianium/paratest": "^2.0", "consistence/coding-standard": "^3.3", "dealerdirect/phpcodesniffer-composer-installer": "^0.4.4", "ext-gd": "*", "ext-intl": "*", "ext-mysqli": "*", "ext-zip": "*", "jakub-onderka/php-parallel-lint": "^1.0", "phing/phing": "^2.16.0", "phpstan/phpstan-deprecation-rules": "^0.10.2", "phpstan/phpstan-php-parser": "^0.10", "phpstan/phpstan-phpunit": "^0.10", "phpstan/phpstan-strict-rules": "^0.10", "phpunit/phpunit": "^7.0", "slevomat/coding-standard": "^4.6.2" }, "bin": [ "bin/phpstan" ], "type": "library", "extra": { "branch-alias": { "dev-master": "0.10-dev" } }, "autoload": { "psr-4": { "PHPStan\\": [ "src/", "build/PHPStan" ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "PHPStan - PHP Static Analysis Tool", "time": "2018-07-01T18:22:12+00:00" }, { "name": "phpunit/php-code-coverage", "version": "6.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/865662550c384bc1db7e51d29aeda1c2c161d69a", "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", "php": "^7.1", "phpunit/php-file-iterator": "^2.0", "phpunit/php-text-template": "^1.2.1", "phpunit/php-token-stream": "^3.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", "sebastian/environment": "^3.1", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1" }, "require-dev": { "phpunit/phpunit": "^7.0" }, "suggest": { "ext-xdebug": "^2.6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "6.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ "coverage", "testing", "xunit" ], "time": "2018-06-01T07:51:50+00:00" }, { "name": "phpunit/php-file-iterator", "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", "reference": "cecbc684605bb0cc288828eb5d65d93d5c676d3c" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cecbc684605bb0cc288828eb5d65d93d5c676d3c", "reference": "cecbc684605bb0cc288828eb5d65d93d5c676d3c", "shasum": "" }, "require": { "php": "^7.1" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "FilterIterator implementation that filters files based on a list of suffixes.", "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ "filesystem", "iterator" ], "time": "2018-06-11T11:44:00+00:00" }, { "name": "phpunit/php-text-template", "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { "php": ">=5.3.3" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Simple template engine.", "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ "template" ], "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b8454ea6958c3dee38453d3bd571e023108c91f", "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f", "shasum": "" }, "require": { "php": "^7.1" }, "require-dev": { "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Utility class for timing", "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ "timer" ], "time": "2018-02-01T13:07:23+00:00" }, { "name": "phpunit/php-token-stream", "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/21ad88bbba7c3d93530d93994e0a33cd45f02ace", "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace", "shasum": "" }, "require": { "ext-tokenizer": "*", "php": "^7.1" }, "require-dev": { "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Wrapper around PHP's tokenizer extension.", "homepage": "https://github.com/sebastianbergmann/php-token-stream/", "keywords": [ "tokenizer" ], "time": "2018-02-01T13:16:43+00:00" }, { "name": "phpunit/phpunit", "version": "7.2.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", "reference": "400a3836ee549ae6f665323ac3f21e27eac7155f" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/400a3836ee549ae6f665323ac3f21e27eac7155f", "reference": "400a3836ee549ae6f665323ac3f21e27eac7155f", "shasum": "" }, "require": { "doctrine/instantiator": "^1.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "myclabs/deep-copy": "^1.7", "phar-io/manifest": "^1.0.1", "phar-io/version": "^1.0", "php": "^7.1", "phpspec/prophecy": "^1.7", "phpunit/php-code-coverage": "^6.0.7", "phpunit/php-file-iterator": "^2.0.1", "phpunit/php-text-template": "^1.2.1", "phpunit/php-timer": "^2.0", "sebastian/comparator": "^3.0", "sebastian/diff": "^3.0", "sebastian/environment": "^3.1", "sebastian/exporter": "^3.1", "sebastian/global-state": "^2.0", "sebastian/object-enumerator": "^3.0.3", "sebastian/resource-operations": "^1.0", "sebastian/version": "^2.0.1" }, "conflict": { "phpunit/phpunit-mock-objects": "*" }, "require-dev": { "ext-pdo": "*" }, "suggest": { "ext-soap": "*", "ext-xdebug": "*", "phpunit/php-invoker": "^2.0" }, "bin": [ "phpunit" ], "type": "library", "extra": { "branch-alias": { "dev-master": "7.2-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "The PHP Unit Testing framework.", "homepage": "https://phpunit.de/", "keywords": [ "phpunit", "testing", "xunit" ], "time": "2018-06-21T13:13:39+00:00" }, { "name": "psr/log", "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", "shasum": "" }, "require": { "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { "Psr\\Log\\": "Psr/Log/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "PHP-FIG", "homepage": "http://www.php-fig.org/" } ], "description": "Common interface for logging libraries", "homepage": "https://github.com/php-fig/log", "keywords": [ "log", "psr", "psr-3" ], "time": "2016-10-10T12:19:37+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { "php": "^5.6 || ^7.0" }, "require-dev": { "phpunit/phpunit": "^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "time": "2017-03-04T06:30:41+00:00" }, { "name": "sebastian/comparator", "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", "reference": "591a30922f54656695e59b1f39501aec513403da" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/591a30922f54656695e59b1f39501aec513403da", "reference": "591a30922f54656695e59b1f39501aec513403da", "shasum": "" }, "require": { "php": "^7.1", "sebastian/diff": "^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], "time": "2018-06-14T15:05:28+00:00" }, { "name": "sebastian/diff", "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", "reference": "366541b989927187c4ca70490a35615d3fef2dce" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/366541b989927187c4ca70490a35615d3fef2dce", "reference": "366541b989927187c4ca70490a35615d3fef2dce", "shasum": "" }, "require": { "php": "^7.1" }, "require-dev": { "phpunit/phpunit": "^7.0", "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Kore Nordmann", "email": "mail@kore-nordmann.de" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ "diff", "udiff", "unidiff", "unified diff" ], "time": "2018-06-10T07:54:39+00:00" }, { "name": "sebastian/environment", "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", "shasum": "" }, "require": { "php": "^7.0" }, "require-dev": { "phpunit/phpunit": "^6.1" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.1.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Provides functionality to handle HHVM/PHP environments", "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", "hhvm" ], "time": "2017-07-01T08:51:00+00:00" }, { "name": "sebastian/exporter", "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", "shasum": "" }, "require": { "php": "^7.0", "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-mbstring": "*", "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.1.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Volker Dusch", "email": "github@wallbash.com" }, { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Adam Harvey", "email": "aharvey@php.net" } ], "description": "Provides the functionality to export PHP variables for visualization", "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "time": "2017-04-03T13:19:02+00:00" }, { "name": "sebastian/global-state", "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", "shasum": "" }, "require": { "php": "^7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "suggest": { "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Snapshotting of global state", "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "time": "2017-04-27T15:39:26+00:00" }, { "name": "sebastian/object-enumerator", "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", "shasum": "" }, "require": { "php": "^7.0", "sebastian/object-reflector": "^1.1.1", "sebastian/recursion-context": "^3.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "time": "2017-08-03T12:35:26+00:00" }, { "name": "sebastian/object-reflector", "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", "reference": "773f97c67f28de00d397be301821b06708fca0be" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", "reference": "773f97c67f28de00d397be301821b06708fca0be", "shasum": "" }, "require": { "php": "^7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.1-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Allows reflection of object attributes, including inherited and non-public ones", "homepage": "https://github.com/sebastianbergmann/object-reflector/", "time": "2017-03-29T09:07:27+00:00" }, { "name": "sebastian/recursion-context", "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", "shasum": "" }, "require": { "php": "^7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "3.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" }, { "name": "Adam Harvey", "email": "aharvey@php.net" } ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "time": "2017-03-03T06:23:57+00:00" }, { "name": "sebastian/resource-operations", "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", "shasum": "" }, "require": { "php": ">=5.6.0" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "time": "2015-07-28T20:34:47+00:00" }, { "name": "sebastian/version", "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { "php": ">=5.6" }, "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de", "role": "lead" } ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", "time": "2016-10-03T07:35:21+00:00" }, { "name": "slevomat/coding-standard", "version": "4.6.3", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", "reference": "76e31b7cb2ce1de53b36430a332daae2db0be549" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/76e31b7cb2ce1de53b36430a332daae2db0be549", "reference": "76e31b7cb2ce1de53b36430a332daae2db0be549", "shasum": "" }, "require": { "php": "^7.1", "squizlabs/php_codesniffer": "^3.2.3" }, "require-dev": { "jakub-onderka/php-parallel-lint": "1.0.0", "phing/phing": "2.16.1", "phpstan/phpstan": "0.9.2", "phpstan/phpstan-phpunit": "0.9.4", "phpstan/phpstan-strict-rules": "0.9", "phpunit/phpunit": "7.2.4" }, "type": "phpcodesniffer-standard", "autoload": { "psr-4": { "SlevomatCodingStandard\\": "SlevomatCodingStandard" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", "time": "2018-06-29T20:25:43+00:00" }, { "name": "squizlabs/php_codesniffer", "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", "reference": "d86873af43b4aa9d1f39a3601cc0cfcf02b25266" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/d86873af43b4aa9d1f39a3601cc0cfcf02b25266", "reference": "d86873af43b4aa9d1f39a3601cc0cfcf02b25266", "shasum": "" }, "require": { "ext-simplexml": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", "php": ">=5.4.0" }, "require-dev": { "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "bin": [ "bin/phpcs", "bin/phpcbf" ], "type": "library", "extra": { "branch-alias": { "dev-master": "3.x-dev" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Greg Sherwood", "role": "lead" } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", "homepage": "http://www.squizlabs.com/php-codesniffer", "keywords": [ "phpcs", "standards" ], "time": "2018-06-06T23:58:19+00:00" }, { "name": "symfony/console", "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", "reference": "70591cda56b4b47c55776ac78e157c4bb6c8b43f" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/console/zipball/70591cda56b4b47c55776ac78e157c4bb6c8b43f", "reference": "70591cda56b4b47c55776ac78e157c4bb6c8b43f", "shasum": "" }, "require": { "php": "^7.1.3", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { "symfony/dependency-injection": "<3.4", "symfony/process": "<3.3" }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", "symfony/event-dispatcher": "~3.4|~4.0", "symfony/lock": "~3.4|~4.0", "symfony/process": "~3.4|~4.0" }, "suggest": { "psr/log-implementation": "For using the console logger", "symfony/event-dispatcher": "", "symfony/lock": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { "dev-master": "4.1-dev" } }, "autoload": { "psr-4": { "Symfony\\Component\\Console\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony Console Component", "homepage": "https://symfony.com", "time": "2018-05-31T10:17:53+00:00" }, { "name": "symfony/finder", "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", "reference": "84714b8417d19e4ba02ea78a41a975b3efaafddb" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/finder/zipball/84714b8417d19e4ba02ea78a41a975b3efaafddb", "reference": "84714b8417d19e4ba02ea78a41a975b3efaafddb", "shasum": "" }, "require": { "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { "dev-master": "4.1-dev" } }, "autoload": { "psr-4": { "Symfony\\Component\\Finder\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", "time": "2018-06-19T21:38:16+00:00" }, { "name": "symfony/polyfill-mbstring", "version": "v1.8.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", "reference": "3296adf6a6454a050679cde90f95350ad604b171" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/3296adf6a6454a050679cde90f95350ad604b171", "reference": "3296adf6a6454a050679cde90f95350ad604b171", "shasum": "" }, "require": { "php": ">=5.3.3" }, "suggest": { "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.8-dev" } }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, "files": [ "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", "mbstring", "polyfill", "portable", "shim" ], "time": "2018-04-26T10:06:28+00:00" }, { "name": "theseer/tokenizer", "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", "php": "^7.0" }, "type": "library", "autoload": { "classmap": [ "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Arne Blankerts", "email": "arne@blankerts.de", "role": "Developer" } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "time": "2017-04-07T12:08:54+00:00" }, { "name": "webmozart/assert", "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", "reference": "0df1908962e7a3071564e857d86874dad1ef204a" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", "reference": "0df1908962e7a3071564e857d86874dad1ef204a", "shasum": "" }, "require": { "php": "^5.3.3 || ^7.0" }, "require-dev": { "phpunit/phpunit": "^4.6", "sebastian/version": "^1.0.1" }, "type": "library", "extra": { "branch-alias": { "dev-master": "1.3-dev" } }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" } ], "description": "Assertions to validate method input/output with nice error messages.", "keywords": [ "assert", "check", "validate" ], "time": "2018-01-29T19:49:41+00:00" } ], "aliases": [], "minimum-stability": "stable", "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { "php": "^7.2", "ext-pcre": "*" }, "platform-dev": [] } dflydev-fig-cookies-2.0.0/phpcs.xml.dist000066400000000000000000000012231332132465500201460ustar00rootroot00000000000000 ./src ./tests dflydev-fig-cookies-2.0.0/phpstan.neon000066400000000000000000000000461332132465500177050ustar00rootroot00000000000000parameters: level: 7 paths: - src dflydev-fig-cookies-2.0.0/phpstan.tests.neon000066400000000000000000000000501332132465500210410ustar00rootroot00000000000000parameters: level: 4 paths: - tests dflydev-fig-cookies-2.0.0/src/000077500000000000000000000000001332132465500161365ustar00rootroot00000000000000dflydev-fig-cookies-2.0.0/src/Dflydev/000077500000000000000000000000001332132465500175335ustar00rootroot00000000000000dflydev-fig-cookies-2.0.0/src/Dflydev/FigCookies/000077500000000000000000000000001332132465500215555ustar00rootroot00000000000000dflydev-fig-cookies-2.0.0/src/Dflydev/FigCookies/Cookie.php000066400000000000000000000036071332132465500235050ustar00rootroot00000000000000name = $name; $this->value = $value; } public function getName() : string { return $this->name; } public function getValue() : ?string { return $this->value; } public function withValue(?string $value = null) : Cookie { $clone = clone($this); $clone->value = $value; return $clone; } /** * Render Cookie as a string. * */ public function __toString() : string { return urlencode($this->name) . '=' . urlencode((string) $this->value); } /** * Create a Cookie. * */ public static function create(string $name, ?string $value = null) : Cookie { return new static($name, $value); } /** * Create a list of Cookies from a Cookie header value string. * * @return Cookie[] */ public static function listFromCookieString(string $string) : array { $cookies = StringUtil::splitOnAttributeDelimiter($string); return array_map(function ($cookiePair) { return static::oneFromCookiePair($cookiePair); }, $cookies); } /** * Create one Cookie from a cookie key/value header value string. * */ public static function oneFromCookiePair(string $string) : Cookie { list ($cookieName, $cookieValue) = StringUtil::splitCookiePair($string); /** @var Cookie $cookie */ $cookie = new static($cookieName); if ($cookieValue !== null) { $cookie = $cookie->withValue($cookieValue); } return $cookie; } } dflydev-fig-cookies-2.0.0/src/Dflydev/FigCookies/Cookies.php000066400000000000000000000041071332132465500236640ustar00rootroot00000000000000cookies[$cookie->getName()] = $cookie; } } public function has(string $name) : bool { return isset($this->cookies[$name]); } public function get(string $name) : ?Cookie { if (! $this->has($name)) { return null; } return $this->cookies[$name]; } /** @return Cookie[] */ public function getAll() : array { return array_values($this->cookies); } public function with(Cookie $cookie) : Cookies { $clone = clone($this); $clone->cookies[$cookie->getName()] = $cookie; return $clone; } public function without(string $name) : Cookies { $clone = clone($this); if (! $clone->has($name)) { return $clone; } unset($clone->cookies[$name]); return $clone; } /** * Render Cookies into a Request. */ public function renderIntoCookieHeader(RequestInterface $request) : RequestInterface { $cookieString = implode('; ', $this->cookies); $request = $request->withHeader(static::COOKIE_HEADER, $cookieString); return $request; } /** * Create Cookies from a Cookie header value string. * * @return static */ public static function fromCookieString(string $string) : self { return new static(Cookie::listFromCookieString($string)); } public static function fromRequest(RequestInterface $request) : Cookies { $cookieString = $request->getHeaderLine(static::COOKIE_HEADER); return static::fromCookieString($cookieString); } } dflydev-fig-cookies-2.0.0/src/Dflydev/FigCookies/FigRequestCookies.php000066400000000000000000000027521332132465500256670ustar00rootroot00000000000000get($name); if ($cookie) { return $cookie; } return Cookie::create($name, $value); } public static function set(RequestInterface $request, Cookie $cookie) : RequestInterface { return Cookies::fromRequest($request) ->with($cookie) ->renderIntoCookieHeader($request) ; } public static function modify(RequestInterface $request, string $name, callable $modify) : RequestInterface { if (! is_callable($modify)) { throw new InvalidArgumentException('$modify must be callable.'); } $cookies = Cookies::fromRequest($request); $cookie = $modify($cookies->has($name) ? $cookies->get($name) : Cookie::create($name)); return $cookies ->with($cookie) ->renderIntoCookieHeader($request) ; } public static function remove(RequestInterface $request, string $name) : RequestInterface { return Cookies::fromRequest($request) ->without($name) ->renderIntoCookieHeader($request) ; } } dflydev-fig-cookies-2.0.0/src/Dflydev/FigCookies/FigResponseCookies.php000066400000000000000000000034061332132465500260320ustar00rootroot00000000000000get($name); if ($cookie) { return $cookie; } return SetCookie::create($name, $value); } public static function set(ResponseInterface $response, SetCookie $setCookie) : ResponseInterface { return SetCookies::fromResponse($response) ->with($setCookie) ->renderIntoSetCookieHeader($response) ; } public static function expire(ResponseInterface $response, string $cookieName) : ResponseInterface { return static::set($response, SetCookie::createExpired($cookieName)); } public static function modify(ResponseInterface $response, string $name, callable $modify) : ResponseInterface { if (! is_callable($modify)) { throw new InvalidArgumentException('$modify must be callable.'); } $setCookies = SetCookies::fromResponse($response); $setCookie = $modify($setCookies->has($name) ? $setCookies->get($name) : SetCookie::create($name)); return $setCookies ->with($setCookie) ->renderIntoSetCookieHeader($response) ; } public static function remove(ResponseInterface $response, string $name) : ResponseInterface { return SetCookies::fromResponse($response) ->without($name) ->renderIntoSetCookieHeader($response) ; } } dflydev-fig-cookies-2.0.0/src/Dflydev/FigCookies/Modifier/000077500000000000000000000000001332132465500233135ustar00rootroot00000000000000dflydev-fig-cookies-2.0.0/src/Dflydev/FigCookies/Modifier/SameSite.php000066400000000000000000000021761332132465500255440ustar00rootroot00000000000000strict = $strict; } public static function strict() : self { return new self(true); } public static function lax() : self { return new self(false); } /** * @throws \InvalidArgumentException If the given SameSite string is neither strict nor lax. */ public static function fromString(string $sameSite) : self { $lowerCaseSite = strtolower($sameSite); if ($lowerCaseSite === 'strict') { return self::strict(); } if ($lowerCaseSite === 'lax') { return self::lax(); } throw new \InvalidArgumentException(sprintf( 'Expected modifier value to be either "strict" or "lax", "%s" given', $sameSite )); } public function asString() : string { return 'SameSite=' . ($this->strict ? 'Strict' : 'Lax'); } } dflydev-fig-cookies-2.0.0/src/Dflydev/FigCookies/SetCookie.php000066400000000000000000000232451332132465500241610ustar00rootroot00000000000000name = $name; $this->value = $value; } public function getName() : string { return $this->name; } public function getValue() : ?string { return $this->value; } public function getExpires() : int { return $this->expires; } public function getMaxAge() : int { return $this->maxAge; } public function getPath() : ?string { return $this->path; } public function getDomain() : ?string { return $this->domain; } public function getSecure() : bool { return $this->secure; } public function getHttpOnly() : bool { return $this->httpOnly; } public function getSameSite() : ?SameSite { return $this->sameSite; } public function withValue(?string $value = null) : self { $clone = clone($this); $clone->value = $value; return $clone; } /** @param int|\DateTimeInterface|string|null $expires */ private function resolveExpires($expires = null) : int { if ($expires === null) { return 0; } if ($expires instanceof DateTimeInterface) { return $expires->getTimestamp(); } if (is_numeric($expires)) { return (int) $expires; } $time = strtotime($expires); if (! is_int($time)) { throw new \InvalidArgumentException(sprintf('Invalid expires "%s" provided', $expires)); } return $time; } /** @param int|string|\DateTimeInterface|null $expires */ public function withExpires($expires = null) : self { $expires = $this->resolveExpires($expires); $clone = clone($this); $clone->expires = $expires; return $clone; } public function rememberForever() : self { return $this->withExpires(new DateTime('+5 years')); } public function expire() : self { return $this->withExpires(new DateTime('-5 years')); } public function withMaxAge(?int $maxAge = null) : self { $clone = clone($this); $clone->maxAge = (int) $maxAge; return $clone; } public function withPath(?string $path = null) : self { $clone = clone($this); $clone->path = $path; return $clone; } public function withDomain(?string $domain = null) : self { $clone = clone($this); $clone->domain = $domain; return $clone; } public function withSecure(bool $secure = true) : self { $clone = clone($this); $clone->secure = $secure; return $clone; } public function withHttpOnly(bool $httpOnly = true) : self { $clone = clone($this); $clone->httpOnly = $httpOnly; return $clone; } public function withSameSite(SameSite $sameSite) : self { $clone = clone($this); $clone->sameSite = $sameSite; return $clone; } public function withoutSameSite() : self { $clone = clone($this); $clone->sameSite = null; return $clone; } public function __toString() : string { $cookieStringParts = [ urlencode($this->name) . '=' . urlencode((string) $this->value), ]; $cookieStringParts = $this->appendFormattedDomainPartIfSet($cookieStringParts); $cookieStringParts = $this->appendFormattedPathPartIfSet($cookieStringParts); $cookieStringParts = $this->appendFormattedExpiresPartIfSet($cookieStringParts); $cookieStringParts = $this->appendFormattedMaxAgePartIfSet($cookieStringParts); $cookieStringParts = $this->appendFormattedSecurePartIfSet($cookieStringParts); $cookieStringParts = $this->appendFormattedHttpOnlyPartIfSet($cookieStringParts); $cookieStringParts = $this->appendFormattedSameSitePartIfSet($cookieStringParts); return implode('; ', $cookieStringParts); } public static function create(string $name, ?string $value = null) : self { return new static($name, $value); } public static function createRememberedForever(string $name, ?string $value = null) : self { return static::create($name, $value)->rememberForever(); } public static function createExpired(string $name) : self { return static::create($name)->expire(); } public static function fromSetCookieString(string $string) : self { $rawAttributes = StringUtil::splitOnAttributeDelimiter($string); $rawAttribute = array_shift($rawAttributes); if (! is_string($rawAttribute)) { throw new \InvalidArgumentException(sprintf( 'The provided cookie string "%s" must have at least one attribute', $string )); } list ($cookieName, $cookieValue) = StringUtil::splitCookiePair($rawAttribute); /** @var SetCookie $setCookie */ $setCookie = new static($cookieName); if ($cookieValue !== null) { $setCookie = $setCookie->withValue($cookieValue); } while ($rawAttribute = array_shift($rawAttributes)) { $rawAttributePair = explode('=', $rawAttribute, 2); $attributeKey = $rawAttributePair[0]; $attributeValue = count($rawAttributePair) > 1 ? $rawAttributePair[1] : null; $attributeKey = strtolower($attributeKey); switch ($attributeKey) { case 'expires': $setCookie = $setCookie->withExpires($attributeValue); break; case 'max-age': $setCookie = $setCookie->withMaxAge((int) $attributeValue); break; case 'domain': $setCookie = $setCookie->withDomain($attributeValue); break; case 'path': $setCookie = $setCookie->withPath($attributeValue); break; case 'secure': $setCookie = $setCookie->withSecure(true); break; case 'httponly': $setCookie = $setCookie->withHttpOnly(true); break; case 'samesite': $setCookie = $setCookie->withSameSite(SameSite::fromString((string) $attributeValue)); break; } } return $setCookie; } /** * @param string[] $cookieStringParts * * @return string[] */ private function appendFormattedDomainPartIfSet(array $cookieStringParts) : array { if ($this->domain) { $cookieStringParts[] = sprintf('Domain=%s', $this->domain); } return $cookieStringParts; } /** * @param string[] $cookieStringParts * * @return string[] */ private function appendFormattedPathPartIfSet(array $cookieStringParts) : array { if ($this->path) { $cookieStringParts[] = sprintf('Path=%s', $this->path); } return $cookieStringParts; } /** * @param string[] $cookieStringParts * * @return string[] */ private function appendFormattedExpiresPartIfSet(array $cookieStringParts) : array { if ($this->expires) { $cookieStringParts[] = sprintf('Expires=%s', gmdate('D, d M Y H:i:s T', $this->expires)); } return $cookieStringParts; } /** * @param string[] $cookieStringParts * * @return string[] */ private function appendFormattedMaxAgePartIfSet(array $cookieStringParts) : array { if ($this->maxAge) { $cookieStringParts[] = sprintf('Max-Age=%s', $this->maxAge); } return $cookieStringParts; } /** * @param string[] $cookieStringParts * * @return string[] */ private function appendFormattedSecurePartIfSet(array $cookieStringParts) : array { if ($this->secure) { $cookieStringParts[] = 'Secure'; } return $cookieStringParts; } /** * @param string[] $cookieStringParts * * @return string[] */ private function appendFormattedHttpOnlyPartIfSet(array $cookieStringParts) : array { if ($this->httpOnly) { $cookieStringParts[] = 'HttpOnly'; } return $cookieStringParts; } /** * @param string[] $cookieStringParts * * @return string[] */ private function appendFormattedSameSitePartIfSet(array $cookieStringParts) : array { if ($this->sameSite === null) { return $cookieStringParts; } $cookieStringParts[] = $this->sameSite->asString(); return $cookieStringParts; } } dflydev-fig-cookies-2.0.0/src/Dflydev/FigCookies/SetCookies.php000066400000000000000000000051651332132465500243450ustar00rootroot00000000000000setCookies[$setCookie->getName()] = $setCookie; } } public function has(string $name) : bool { return isset($this->setCookies[$name]); } public function get(string $name) : ?SetCookie { if (! $this->has($name)) { return null; } return $this->setCookies[$name]; } /** @return SetCookie[] */ public function getAll() : array { return array_values($this->setCookies); } public function with(SetCookie $setCookie) : SetCookies { $clone = clone($this); $clone->setCookies[$setCookie->getName()] = $setCookie; return $clone; } public function without(string $name) : SetCookies { $clone = clone($this); if (! $clone->has($name)) { return $clone; } unset($clone->setCookies[$name]); return $clone; } /** * Render SetCookies into a Response. * */ public function renderIntoSetCookieHeader(ResponseInterface $response) : ResponseInterface { $response = $response->withoutHeader(static::SET_COOKIE_HEADER); foreach ($this->setCookies as $setCookie) { $response = $response->withAddedHeader(static::SET_COOKIE_HEADER, (string) $setCookie); } return $response; } /** * Create SetCookies from a collection of SetCookie header value strings. * * @param string[] $setCookieStrings * @return static */ public static function fromSetCookieStrings(array $setCookieStrings) : self { return new static(array_map(function (string $setCookieString) : SetCookie { return SetCookie::fromSetCookieString($setCookieString); }, $setCookieStrings)); } /** * Create SetCookies from a Response. * */ public static function fromResponse(ResponseInterface $response) : SetCookies { return new static(array_map(function (string $setCookieString) : SetCookie { return SetCookie::fromSetCookieString($setCookieString); }, $response->getHeader(static::SET_COOKIE_HEADER))); } } dflydev-fig-cookies-2.0.0/src/Dflydev/FigCookies/StringUtil.php000066400000000000000000000013641332132465500243760ustar00rootroot00000000000000