Security update for permissions_by_term
[yaffs-website] / vendor / instaclick / php-webdriver / lib / WebDriver / Service / CurlService.php
diff --git a/vendor/instaclick/php-webdriver/lib/WebDriver/Service/CurlService.php b/vendor/instaclick/php-webdriver/lib/WebDriver/Service/CurlService.php
new file mode 100755 (executable)
index 0000000..99af82e
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+/**
+ * Copyright 2004-2017 Facebook. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @package WebDriver
+ *
+ * @author Justin Bishop <jubishop@gmail.com>
+ * @author Anthon Pang <apang@softwaredevelopment.ca>
+ * @author Fabrizio Branca <mail@fabrizio-branca.de>
+ */
+
+namespace WebDriver\Service;
+
+use WebDriver\Exception as WebDriverException;
+
+/**
+ * WebDriver\Service\CurlService class
+ *
+ * @package WebDriver
+ */
+class CurlService implements CurlServiceInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function execute($requestMethod, $url, $parameters = null, $extraOptions = array())
+    {
+        $customHeaders = array(
+            'Content-Type: application/json;charset=UTF-8',
+            'Accept: application/json;charset=UTF-8',
+        );
+
+        $curl = curl_init($url);
+        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+
+        switch ($requestMethod) {
+            case 'GET':
+                break;
+
+            case 'POST':
+                if ($parameters && is_array($parameters)) {
+                    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($parameters));
+                } else {
+                    $customHeaders[] = 'Content-Length: 0';
+                }
+
+                // Suppress "Expect: 100-continue" header automatically added by cURL that
+                // causes a 1 second delay if the remote server does not support Expect.
+                $customHeaders[] = 'Expect:';
+
+                curl_setopt($curl, CURLOPT_POST, true);
+                break;
+
+            case 'DELETE':
+                curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
+                break;
+
+            case 'PUT':
+                if ($parameters && is_array($parameters)) {
+                    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($parameters));
+                } else {
+                    $customHeaders[] = 'Content-Length: 0';
+                }
+
+                // Suppress "Expect: 100-continue" header automatically added by cURL that
+                // causes a 1 second delay if the remote server does not support Expect.
+                $customHeaders[] = 'Expect:';
+
+                curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
+                break;
+        }
+
+        foreach ($extraOptions as $option => $value) {
+            curl_setopt($curl, $option, $value);
+        }
+
+        curl_setopt($curl, CURLOPT_HTTPHEADER, $customHeaders);
+
+        $rawResult = trim(curl_exec($curl));
+
+        $info = curl_getinfo($curl);
+        $info['request_method'] = $requestMethod;
+
+        if (array_key_exists(CURLOPT_FAILONERROR, $extraOptions) &&
+            $extraOptions[CURLOPT_FAILONERROR] &&
+            CURLE_GOT_NOTHING !== ($errno = curl_errno($curl)) &&
+            $error = curl_error($curl)
+        ) {
+            curl_close($curl);
+
+            throw WebDriverException::factory(
+                WebDriverException::CURL_EXEC,
+                sprintf(
+                    "Curl error thrown for http %s to %s%s\n\n%s",
+                    $requestMethod,
+                    $url,
+                    $parameters && is_array($parameters) ? ' with params: ' . json_encode($parameters) : '',
+                    $error
+                ),
+                $errno,
+                null,
+                $info
+            );
+        }
+
+        curl_close($curl);
+
+        return array($rawResult, $info);
+    }
+}