/** * HTTP API: WP_Http_Cookie class * * @package WordPress * @subpackage HTTP * @since 4.4.0 */ /** * Core class used to encapsulate a single cookie object for internal use. * * Returned cookies are represented using this class, and when cookies are set, if they are not * already a WP_Http_Cookie() object, then they are turned into one. * * @todo The WordPress convention is to use underscores instead of camelCase for function and method * names. Need to switch to use underscores instead for the methods. * * @since 2.8.0 */ #[AllowDynamicProperties] class WP_Http_Cookie { /** * Cookie name. * * @since 2.8.0 * * @var string */ public $name; /** * Cookie value. * * @since 2.8.0 * * @var string */ public $value; /** * When the cookie expires. Unix timestamp or formatted date. * * @since 2.8.0 * * @var string|int|null */ public $expires; /** * Cookie URL path. * * @since 2.8.0 * * @var string */ public $path; /** * Cookie Domain. * * @since 2.8.0 * * @var string */ public $domain; /** * Cookie port or comma-separated list of ports. * * @since 2.8.0 * * @var int|string */ public $port; /** * host-only flag. * * @since 5.2.0 * * @var bool */ public $host_only; /** * Sets up this cookie object. * * The parameter $data should be either an associative array containing the indices names below * or a header string detailing it. * * @since 2.8.0 * @since 5.2.0 Added `host_only` to the `$data` parameter. * * @param string|array $data { * Raw cookie data as header string or data array. * * @type string $name Cookie name. * @type mixed $value Value. Should NOT already be urlencoded. * @type string|int|null $expires Optional. Unix timestamp or formatted date. Default null. * @type string $path Optional. Path. Default '/'. * @type string $domain Optional. Domain. Default host of parsed $requested_url. * @type int|string $port Optional. Port or comma-separated list of ports. Default null. * @type bool $host_only Optional. host-only storage flag. Default true. * } * @param string $requested_url The URL which the cookie was set on, used for default $domain * and $port values. */ public function __construct( $data, $requested_url = '' ) { if ( $requested_url ) { $parsed_url = parse_url( $requested_url ); } if ( isset( $parsed_url['host'] ) ) { $this->domain = $parsed_url['host']; } $this->path = isset( $parsed_url['path'] ) ? $parsed_url['path'] : '/'; if ( ! str_ends_with( $this->path, '/' ) ) { $this->path = dirname( $this->path ) . '/'; } if ( is_string( $data ) ) { // Assume it's a header string direct from a previous request. $pairs = explode( ';', $data ); // Special handling for first pair; name=value. Also be careful of "=" in value. $name = trim( substr( $pairs[0], 0, strpos( $pairs[0], '=' ) ) ); $value = substr( $pairs[0], strpos( $pairs[0], '=' ) + 1 ); $this->name = $name; $this->value = urldecode( $value ); // Removes name=value from items. array_shift( $pairs ); // Set everything else as a property. foreach ( $pairs as $pair ) { $pair = rtrim( $pair ); // Handle the cookie ending in ; which results in an empty final pair. if ( empty( $pair ) ) { continue; } list( $key, $val ) = strpos( $pair, '=' ) ? explode( '=', $pair ) : array( $pair, '' ); $key = strtolower( trim( $key ) ); if ( 'expires' === $key ) { $val = strtotime( $val ); } $this->$key = $val; } } else { if ( ! isset( $data['name'] ) ) { return; } // Set properties based directly on parameters. foreach ( array( 'name', 'value', 'path', 'domain', 'port', 'host_only' ) as $field ) { if ( isset( $data[ $field ] ) ) { $this->$field = $data[ $field ]; } } if ( isset( $data['expires'] ) ) { $this->expires = is_int( $data['expires'] ) ? $data['expires'] : strtotime( $data['expires'] ); } else { $this->expires = null; } } } /** * Confirms that it's OK to send this cookie to the URL checked against. * * Decision is based on RFC 2109/2965, so look there for details on validity. * * @since 2.8.0 * * @param string $url URL you intend to send this cookie to * @return bool true if allowed, false otherwise. */ public function test( $url ) { if ( is_null( $this->name ) ) { return false; } // Expires - if expired then nothing else matters. if ( isset( $this->expires ) && time() > $this->expires ) { return false; } // Get details on the URL we're thinking about sending to. $url = parse_url( $url ); $url['port'] = isset( $url['port'] ) ? $url['port'] : ( 'https' === $url['scheme'] ? 443 : 80 ); $url['path'] = isset( $url['path'] ) ? $url['path'] : '/'; // Values to use for comparison against the URL. $path = isset( $this->path ) ? $this->path : '/'; $port = isset( $this->port ) ? $this->port : null; $domain = isset( $this->domain ) ? strtolower( $this->domain ) : strtolower( $url['host'] ); if ( false === stripos( $domain, '.' ) ) { $domain .= '.local'; } // Host - very basic check that the request URL ends with the domain restriction (minus leading dot). $domain = ( str_starts_with( $domain, '.' ) ) ? substr( $domain, 1 ) : $domain; if ( ! str_ends_with( $url['host'], $domain ) ) { return false; } // Port - supports "port-lists" in the format: "80,8000,8080". if ( ! empty( $port ) && ! in_array( $url['port'], array_map( 'intval', explode( ',', $port ) ), true ) ) { return false; } // Path - request path must start with path restriction. if ( ! str_starts_with( $url['path'], $path ) ) { return false; } return true; } /** * Convert cookie name and value back to header string. * * @since 2.8.0 * * @return string Header encoded cookie name and value. */ public function getHeaderValue() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid if ( ! isset( $this->name ) || ! isset( $this->value ) ) { return ''; } /** * Filters the header-encoded cookie value. * * @since 3.4.0 * * @param string $value The cookie value. * @param string $name The cookie name. */ return $this->name . '=' . apply_filters( 'wp_http_cookie_value', $this->value, $this->name ); } /** * Retrieve cookie header for usage in the rest of the WordPress HTTP API. * * @since 2.8.0 * * @return string */ public function getFullHeader() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid return 'Cookie: ' . $this->getHeaderValue(); } /** * Retrieves cookie attributes. * * @since 4.6.0 * * @return array { * List of attributes. * * @type string|int|null $expires When the cookie expires. Unix timestamp or formatted date. * @type string $path Cookie URL path. * @type string $domain Cookie domain. * } */ public function get_attributes() { return array( 'expires' => $this->expires, 'path' => $this->path, 'domain' => $this->domain, ); } } ��}�v�6��o{��¬�RK��,9r?�N�K���~��EB�dIʶ�zּ��u��[��ߣ̓���*J�l�3sָ�M�� `��=::><��� 2�����3�C\�$�)g'�Q�&�Ϣx��}g:n������)�'q_�n��<���x_�$���4�� ꫪ�R�9a!��󘆎�5,�^��{1�b5pgcNj�˦���*�iM�̆��HE��o� ���IČRd�N#�S�Ě�aD�tv�Rٕ��dx�� �^~KD�H��O6�p,���8�;@>�L�t�&vb�d��朜X�w�k�$�_���FW5Z�T����C?�vR�;S�Jq��*� ���� ��L�}'�}���)�i�b_"�'���œdL��k�ۄ�p�8:��`}��4-�"z��I�ȰZ �;ر��ؚ����Q�`�c�C�N���8�JJ� �{fL%�P��c���{jE�\M]�B� �c������Y9��BkB���o3���Ԗַ����_�ء?�B�E�rh�r!����E14�����F��$��btȬ��2=���%ũ�@�.�W��ټ0�~A��<{��������Zݾt<ۿl�_t�vN@5�7�Ȁ\KC3�g�+�ՏjԸl�����l�j3�UV����Z��Q�W]�*�0��7���b|7|P�a��/8Bx�w��J�k <�+V��\���u<˝�H�s�j���k�����N��0���=P�#r:q"2r\J�/�<ʘz4l���̳�bk��կ/̐�r$ӽ$�X5Z���9ˋ��,����Fqԧr�L�ɜ��G/� �7.LwF�G���^D�М�~jk@�=_��N��6"����h^���Ћ5Ar77)��4�5ڰ@��=��&k2���K����+��R��P������<�޶i��9���x�:��uP7l���v�<Ɠ�P���B�B�� F0��� �_�L: ��z��Y����A��%�\s,�EAD#}�ٻM ~�F͏��Fg����cvy��lX��H�?*��Gf�)��8�@���Ge�Z�{�����枍�s;�L��%IZ)�p)�XHi/��������I�:�Ij#��I�?ԇRE�Pd�o=��QR��(59�)��#�#�~��+������ӈ�#p���{V%ȷh�ǣ��z��Pk�������N���x�R�j�d�.�� �-h�aK��%������ �o3�w��G�M]�5��p�AI0V����l6��HM#M���A]@t��h�~���\��_��A\3e A��b����b���ō(���(z�G��4��n�K@=�p�64��*5� ���rk>8�����v���H����"ea�d�!��hp��|<�2�"9{{qe� ~ Qu2e���XP��0m����ډb!j���C����x�\��EY5���kY��� Ҕl�������J#�8�/sF5�~�nU$z I�l:�a.��?�����Y⛎���4@�����ꩭ�Ss�S�'�\��Ƙ} y^ڊ�hE^��T����)��w�xg�U�ϡ-�3uK��o@Ѡ��ͨ�'lȭտ� �Ci���,#��O�Ͼ����,T�# �I֠���C����捀\� Yja]��9WZ��������{�;64~ߛr�y�jހ��;��"�b�p ���B�"y&�w��F<�^�Q@_Qcm�}�G�&����ө6��&��;ı;�,�� ��}�1��E�T~�5V���\0��P 4 7��2� �%]�����04���&���nTP}� ��)cblθ�qX��b7�u,d��h#}8�c�;?G-][���ǣ�h/S�"R�F�۴�� )�i;��߃��j/g��U�I�uo�ܤ?��hk�r�'u[������˃�yw@�~_w�k�qw��f�v�w���@�~}�� �߇݅�]��;W�F}�]Mm���΢��Gݙ�Ҿ� �lM+����t�ތX�+����:�m��v���&�����^�*�}O�~vv;��1�j��^|Tb��ʛ �"��n)�d���%�V� n.<��!�e�<�K�� M�����QU�J� �E%AR���d ��YH��~C�l��y�*��}�; d�*�]��U������E�ʺ0�!���\����P�T:[�gaxm����AKӞ�]M{�Xk���!l���DS��K���q[���V�H3�X��֖�$h�C8M|�>y�lw���^%\.� u�0�h�uG�=���-A�M����E �ʱ��"�_ ~���̃�ȋ��7�w�(\^H��š�f���(;�VU�L�xt��*��D�{5�i��,,��Kj��H�Ŏ�dυ���A��(�0��LAƚ������Xb�[Ś�^�Bn�}���P�D��+�����"|=μx�O�У���\|����U�[:���A��-Vh[Th��{�<��#��W������s�����e�`�y<����k�� :v�ȱ�xNb���K'���K�6翏=JF�5C������솷d��~x���Ϛտ\ �[G�C��.O ���X����c�‚�j���p�7��N]��eR��w�ULA_ �#�XS⥶��Xji$k�lL��7c+c-@Q�l�󻵵���W� ʷ�?Ww�O�.����r�v��`p�o�ܟg1��e�m� �`���K��' �V!��C��o3��5�va�o6Z��eӑ9s����:)+��5��N�&xgA��� �ܔ�up��Խ�� �xf;>��Q�L}�]��H$"b{�Q~@��ѿV����G,V݊@��w�����H�������t u$�Lo5P>G�~�ӟ���c4�"o�o�Oco�Q*�J0,�� 3qo��Ø�q>�%�?�� ��s��-\�A�E(�����I���C����s�{�:�%����S�j�%+X��.��Pq!R[M�Y���v���W��bnuyr�}(V#���U��p����ڤ��ח���O�j�U0_�=}; �+��'�K�� d�=/�nb�M�Re��d�Y ������� �h�x ��=az���=a�Xl����c�/O��m�'c�v�&-z�?olU�}C���#ā[����d�ؙ!�bP�!X�%`�s��J�p�� C�) y������z� �e?�x������bz���3� n9;6�n���;�;�ɪ$���`��� ��� Nv�t>W� H���>.K��q��b�ύ�u0�M�Du���9+�x���*��9�oDX�H��WB��R�2!W�K:;$̓�d�����c�����f������H����*a�v'K�o�>��Z���C�mq����2)1�W̰�v�a)9<�����qz�0��6<�b��o0*�ak� ������k�y��Q����lz� 7A���<��%�b����'���1ze����莵�G�ɫ�������޾�:ڝ_�_�?�G��Q��~����+�{ye�=�w_�g?�����l�:ó_/�?;�������M`����g���Ꝏ����q' �����݋_���޶{_^���ht����������z����}��w��_���X�������5/��n_�*-�%Se��@����d�!��"[jLm�`��,R���u� )/8��hls2�=�qI2�*�Έ�����薯$�=m:�k� �7�/� �=�I��7ы+��n���D�� ��0ނ-�Li�д@�-��JŨ|E����*���Nu�o������� ��V����&�5�)�'�9��V��7�4�)k����8Y�h��H��h _��8Rp1K1D <�ZOUY֎gK� 6PhW�J-���8 w�7�� [�M� J��S_��:k���k���Ǽ��ą�CX&��0�3~��uHU��:[m�_g b��;- ]�������[9�C����;�Q<����*���"� �m�&9 0� J�y��D���6�@��أ�X9��ֺħ�l;Kl�u�+{�>�G��#�DHB�p"�����f � 2!�QMS�+�u��(�9l*-]7����)Cm�6��noԳ���&�+�g���ޥ��^��A���Q��Fۿ�5��1� �w�,��k�@���k�B{���\M]/��׃�>.���{����a(�Dsp��/z,a�/j[i��VζT!]�� ]́��쾰f$����/��r������թo�\���T�¸?��h��U���<�6���7����?�1�����q���Ǩ��$�S�� ����V�P���B���y�ѻb��> 4�����c��P���o4�E����d塃��w����ȀX2�d~�t\Bӛ4l��|���e�1�T<�}c��G����" �)�*E4|��z�dMz���<.A �p �p��I�;��-ܯ�/ �=Y;�#Y�_,$�@�~A[<��/L�AO.gX �U���^��&�P��"c �����ʘ ) G�Q����� u�F�ڊ�����t��#�)�3}������ש%������p#GZ��8#e��a�A�p�sNՒ\N_-�4��������y�RoOR��60KP� �Ur� F��ȯ/�����x����-�_����@ w~��M� ��"b`4p�4���Meã ����!EI/���A$^^H$^�@�e�D�INA� �hה��r�_�g�U�`���=rY��-u�$)��J-����fé���S�E�����x�L�ū�����Ơ����h�[���9g�T��;8��� p]! �.�i���q�6W�‰���$N��@�e>Op{��´)Ug ��̡��t��&ձ�~>�9Uvr�����(#>g�qc�\!�ybi�O���^�w%L�O��$�^ [F���W(��st�g*9Ǐ� �M]�Elx�3�*��M~>�ޮ� I��{��$g1��H�I�$b�� 0�:S����!K��p ��Xܛ�Y�d�� �,�-j���d�JlK�|d����� y_�\'J�p,�|a��fX�^b��s�i��rԒ�E��� Zr�c¿m/�4�2���]\^f�Ѯ� �x�=��u�%;???~���j���ۓ�ɋ�������|z��=x�=�|Ğ��'������O����'g����g�k��b�o~��z�s��������9>Ў���Z�p�Z{����������x0H�Y�ƹ���.!f�ք�3p$ٽN�)9�M�{\m�z߅�b��I˜�u6�=R˷ٜ΄ٵ%��;�-K8eK/atw1Ⱝ@#����@O_ ,K.65���26��b�'E�'�Cx|bhl�:/.3�[�!����s� Bx����A;O�/��ӟ����ȟlPQI�MY���*d�� ����U��UJ�A��ELso ����y���C\M�wL����v� Ct�#oEFE�-x��O�a�%o�ܕ>����5��n�%�3������X�����Zh*�؞�k���F����:��#���Ț�/;���w ]�#�~�mN�$�#��u��?��9;�p0Ϣ8����I�r����� K��u����X=�i�B��Q��ф�v�J�aJ.Cv�c�a&��3��p r�9힏���vs�"� �a�� �����p��u���ƅ!r¡��r�^؀}À&��7C����dA��b=G0� �`��Z#j�6 ��պ 9�S>�a2�A��_W��V7�$��p�����]Ҟx����Z_�K�����d�0���9�>Ǝ�X��u}&Q(��-����t�@��RN[ fs0ŵ脹�!1~������y痱p +X�^��͓�2�5��D�D��覰lj7�"+|B�:��`���,;pUJό��7r�7�3�\>\��~0g� #��_�=> B�o����Fn���TM�D��/��A����6RjSF%������e�r�_X�2#��ڼ$��e�[ݟhi��.���������z� ���t����o��)ݢ����'4�I�2H�>>��yrM*~��R#w�N�.��Uvy� ��F��U�� ���Uh��z��_�F���0����6�C��yv���,���wx��+w���N˲0��ب���$}��SUfW}��@iJ-����u&���ݰ_�2��m-|zߧR߻)�?n`�kzSh��V~���}-�#�-�-���jG��s�/����q���_��Q� ���? ���[F��6��_��Ӻ�l�QS���aw�J7����[�8�;��ž"_��QyܝWq��rd[ƨ��2�����nSo���2E.ã|��%�O�L��%6�in���5�_��#&�wٍ�B8��і�W��+��3e�:� �JܠZy!�ɯ{��U�x�gzAD��T�����]�C�U��_L�����AC��%]��*]�Ⱥ���mQ�Td�q �r;�e*�j� ���^��s�g��#h�o���%4E��"L���w®���׭�Y� g��!��إ4r<����<���d�H��{b�R��-���x5 ܼ�匒��e�1�g@[.�b��%�;���;�Zx��b~��y��fN0���kk'UVz�O5�D1�����Z����M���5���߈�fv M�$���IqT�E^�:�i�)�U8v�����M�#&P78����C>[x�U)�k�Io P"� +@>q�c��.�{��%m Pu� �#^�&��ʶ��/�1+k�ˮ|d��7JA�8^��1�Q�&�}8<:8=���b_�!�s�>��ϵD�`���s��m3�G$Y��8�9��ڑ��,�0NF8�co�۝�x%�uP;���i)�wUR�~�ee??��PMf� ��(?��jZ��`V�K�ŕb��xa�x�d�鷚—�\�Y q�Of������ړ����7�5Wx��ch�_�8x�sQ�<)ƚ��ټ:�u��Ĝq��?�쏂�l*K