summaryrefslogtreecommitdiffstats
path: root/wp-includes/Requests/src/Response
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
commita415c29efee45520ae252d2aa28f1083a521cd7b (patch)
treef4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-includes/Requests/src/Response
parentInitial commit. (diff)
downloadwordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.tar.xz
wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.zip
Adding upstream version 6.4.3+dfsg1.upstream/6.4.3+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'wp-includes/Requests/src/Response')
-rw-r--r--wp-includes/Requests/src/Response/Headers.php127
1 files changed, 127 insertions, 0 deletions
diff --git a/wp-includes/Requests/src/Response/Headers.php b/wp-includes/Requests/src/Response/Headers.php
new file mode 100644
index 0000000..b4d0fcf
--- /dev/null
+++ b/wp-includes/Requests/src/Response/Headers.php
@@ -0,0 +1,127 @@
+<?php
+/**
+ * Case-insensitive dictionary, suitable for HTTP headers
+ *
+ * @package Requests
+ */
+
+namespace WpOrg\Requests\Response;
+
+use WpOrg\Requests\Exception;
+use WpOrg\Requests\Exception\InvalidArgument;
+use WpOrg\Requests\Utility\CaseInsensitiveDictionary;
+use WpOrg\Requests\Utility\FilteredIterator;
+
+/**
+ * Case-insensitive dictionary, suitable for HTTP headers
+ *
+ * @package Requests
+ */
+class Headers extends CaseInsensitiveDictionary {
+ /**
+ * Get the given header
+ *
+ * Unlike {@see \WpOrg\Requests\Response\Headers::getValues()}, this returns a string. If there are
+ * multiple values, it concatenates them with a comma as per RFC2616.
+ *
+ * Avoid using this where commas may be used unquoted in values, such as
+ * Set-Cookie headers.
+ *
+ * @param string $offset Name of the header to retrieve.
+ * @return string|null Header value
+ */
+ public function offsetGet($offset) {
+ if (is_string($offset)) {
+ $offset = strtolower($offset);
+ }
+
+ if (!isset($this->data[$offset])) {
+ return null;
+ }
+
+ return $this->flatten($this->data[$offset]);
+ }
+
+ /**
+ * Set the given item
+ *
+ * @param string $offset Item name
+ * @param string $value Item value
+ *
+ * @throws \WpOrg\Requests\Exception On attempting to use dictionary as list (`invalidset`)
+ */
+ public function offsetSet($offset, $value) {
+ if ($offset === null) {
+ throw new Exception('Object is a dictionary, not a list', 'invalidset');
+ }
+
+ if (is_string($offset)) {
+ $offset = strtolower($offset);
+ }
+
+ if (!isset($this->data[$offset])) {
+ $this->data[$offset] = [];
+ }
+
+ $this->data[$offset][] = $value;
+ }
+
+ /**
+ * Get all values for a given header
+ *
+ * @param string $offset Name of the header to retrieve.
+ * @return array|null Header values
+ *
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not valid as an array key.
+ */
+ public function getValues($offset) {
+ if (!is_string($offset) && !is_int($offset)) {
+ throw InvalidArgument::create(1, '$offset', 'string|int', gettype($offset));
+ }
+
+ if (is_string($offset)) {
+ $offset = strtolower($offset);
+ }
+
+ if (!isset($this->data[$offset])) {
+ return null;
+ }
+
+ return $this->data[$offset];
+ }
+
+ /**
+ * Flattens a value into a string
+ *
+ * Converts an array into a string by imploding values with a comma, as per
+ * RFC2616's rules for folding headers.
+ *
+ * @param string|array $value Value to flatten
+ * @return string Flattened value
+ *
+ * @throws \WpOrg\Requests\Exception\InvalidArgument When the passed argument is not a string or an array.
+ */
+ public function flatten($value) {
+ if (is_string($value)) {
+ return $value;
+ }
+
+ if (is_array($value)) {
+ return implode(',', $value);
+ }
+
+ throw InvalidArgument::create(1, '$value', 'string|array', gettype($value));
+ }
+
+ /**
+ * Get an iterator for the data
+ *
+ * Converts the internally stored values to a comma-separated string if there is more
+ * than one value for a key.
+ *
+ * @return \ArrayIterator
+ */
+ public function getIterator() {
+ return new FilteredIterator($this->data, [$this, 'flatten']);
+ }
+}