This commit is contained in:
Chris 2018-10-18 15:59:38 +01:00
parent 4f6a0cb7c6
commit 380a0e8623
352 changed files with 32929 additions and 3604 deletions

10
app/Application.php Normal file
View file

@ -0,0 +1,10 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Application extends Model
{
//
}

View file

@ -2,11 +2,12 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Application;
use App\Item;
use App\Setting;
use App\User;
use App\SupportedApps\Nzbget;
use GrahamCampbell\GitHub\Facades\GitHub;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class ItemController extends Controller
@ -42,7 +43,6 @@ class ItemController extends Controller
}
}
/**
* Pin item on the dashboard.
*
@ -339,4 +339,24 @@ class ItemController extends Controller
}
public function checkAppList()
{
$localapps = Application::all()->pluck('name');
$allapps = GitHub::connection('none')->repo()->contents()->show('linuxserver', 'Heimdall-Apps');
$applist = collect($allapps)->pluck('name');
$diff = $applist->diff($localapps);
print_r($diff->all());
foreach($allapps as $app) {
}
$files = GitHub::connection('none')->gitData()->trees()->show('linuxserver', 'Heimdall-Apps', 'eaf3659bbbc25e41501f3c540fcc7fe5da3e45c2');
print_r($localapps);
//print_r($appcheck);
}
}

View file

@ -7,10 +7,12 @@
"require": {
"php": ">=7.0.0",
"fideloper/proxy": "^4.0",
"graham-campbell/github": "^7.5",
"guzzlehttp/guzzle": "^6.3",
"laravel/framework": "5.7.*",
"laravel/tinker": "~1.0",
"laravelcollective/html": "^5.5"
"laravelcollective/html": "^5.5",
"php-http/guzzle6-adapter": "^1.1"
},
"require-dev": {
"filp/whoops": "~2.0",

880
composer.lock generated
View file

@ -4,8 +4,60 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"content-hash": "bf16de2ee67c686f3b454d56cd12d6d6",
"content-hash": "375f1aa6db349f949ad13cdbe9ddb275",
"packages": [
{
"name": "clue/stream-filter",
"version": "v1.4.0",
"source": {
"type": "git",
"url": "https://github.com/clue/php-stream-filter.git",
"reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/clue/php-stream-filter/zipball/d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0",
"reference": "d80fdee9b3a7e0d16fc330a22f41f3ad0eeb09d0",
"shasum": ""
},
"require": {
"php": ">=5.3"
},
"require-dev": {
"phpunit/phpunit": "^5.0 || ^4.8"
},
"type": "library",
"autoload": {
"psr-4": {
"Clue\\StreamFilter\\": "src/"
},
"files": [
"src/functions.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Christian Lück",
"email": "christian@lueck.tv"
}
],
"description": "A simple and modern approach to stream filtering in PHP",
"homepage": "https://github.com/clue/php-stream-filter",
"keywords": [
"bucket brigade",
"callback",
"filter",
"php_user_filter",
"stream",
"stream_filter_append",
"stream_filter_register"
],
"time": "2017-08-18T09:54:01+00:00"
},
{
"name": "dnoegel/php-xdg-base-dir",
"version": "0.1",
@ -366,6 +418,198 @@
],
"time": "2018-02-07T20:20:57+00:00"
},
{
"name": "graham-campbell/cache-plugin",
"version": "v1.0.0",
"source": {
"type": "git",
"url": "https://github.com/GrahamCampbell/Cache-Plugin.git",
"reference": "f1a3c5c95e9734e3653fa4bba43800ee41c79484"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/GrahamCampbell/Cache-Plugin/zipball/f1a3c5c95e9734e3653fa4bba43800ee41c79484",
"reference": "f1a3c5c95e9734e3653fa4bba43800ee41c79484",
"shasum": ""
},
"require": {
"php": "^7.0",
"php-http/cache-plugin": "^1.5",
"php-http/client-common": "^1.7",
"php-http/message-factory": "^1.0",
"psr/cache": "^1.0"
},
"require-dev": {
"graham-campbell/analyzer": "^2.0",
"phpunit/phpunit": "^6.5|^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"psr-4": {
"GrahamCampbell\\CachePlugin\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "graham@alt-three.com"
}
],
"description": "Provides A Simple HTTP Cache Plugin With Good Defaults",
"keywords": [
"Cache Plugin",
"Cache-Plugin",
"Graham Campbell",
"GrahamCampbell",
"cache",
"http"
],
"time": "2018-03-17T14:01:43+00:00"
},
{
"name": "graham-campbell/github",
"version": "v7.5.0",
"source": {
"type": "git",
"url": "https://github.com/GrahamCampbell/Laravel-GitHub.git",
"reference": "bed9ac8adfd14be344fb8ac3ab2f7ef1910b841e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/GrahamCampbell/Laravel-GitHub/zipball/bed9ac8adfd14be344fb8ac3ab2f7ef1910b841e",
"reference": "bed9ac8adfd14be344fb8ac3ab2f7ef1910b841e",
"shasum": ""
},
"require": {
"graham-campbell/cache-plugin": "^1.0",
"graham-campbell/manager": "^4.1",
"illuminate/contracts": "5.5.*|5.6.*|5.7.*",
"illuminate/support": "5.5.*|5.6.*|5.7.*",
"knplabs/github-api": "2.7.*|2.8.*|2.9.*|2.10.*",
"php": "^7.1.3"
},
"require-dev": {
"graham-campbell/analyzer": "^2.1",
"graham-campbell/testbench": "^5.1",
"madewithlove/illuminate-psr-cache-bridge": "^1.0",
"mockery/mockery": "^1.0",
"php-http/guzzle6-adapter": "^1.0",
"phpunit/phpunit": "^6.5|^7.0"
},
"suggest": {
"madewithlove/illuminate-psr-cache-bridge": "Allows caching GitHub HTTP requests"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "7.5-dev"
},
"laravel": {
"providers": [
"GrahamCampbell\\GitHub\\GitHubServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"GrahamCampbell\\GitHub\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "graham@alt-three.com"
}
],
"description": "GitHub Is A GitHub Bridge For Laravel 5",
"keywords": [
"Bridge",
"Graham Campbell",
"GrahamCampbell",
"Laravel GitHub",
"Laravel-GitHub",
"PHP GitHub API",
"framework",
"github",
"github bridge",
"laravel",
"php-github-api"
],
"time": "2018-09-04T08:45:47+00:00"
},
{
"name": "graham-campbell/manager",
"version": "v4.1.0",
"source": {
"type": "git",
"url": "https://github.com/GrahamCampbell/Laravel-Manager.git",
"reference": "9aff87cb08fa57a1b471bd74d84317c2abfc0f6b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/GrahamCampbell/Laravel-Manager/zipball/9aff87cb08fa57a1b471bd74d84317c2abfc0f6b",
"reference": "9aff87cb08fa57a1b471bd74d84317c2abfc0f6b",
"shasum": ""
},
"require": {
"illuminate/contracts": "5.5.*|5.6.*|5.7.*",
"illuminate/support": "5.5.*|5.6.*|5.7.*",
"php": "^7.1.3"
},
"require-dev": {
"graham-campbell/analyzer": "^2.1",
"graham-campbell/testbench-core": "^3.0",
"mockery/mockery": "^1.0",
"phpunit/phpunit": "^6.5|^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.1-dev"
}
},
"autoload": {
"psr-4": {
"GrahamCampbell\\Manager\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "graham@alt-three.com"
}
],
"description": "Manager Provides Some Manager Functionality For Laravel 5",
"keywords": [
"Graham Campbell",
"GrahamCampbell",
"Laravel Manager",
"Laravel-Manager",
"connector",
"framework",
"interface",
"laravel",
"manager"
],
"time": "2018-08-23T10:42:08+00:00"
},
{
"name": "guzzlehttp/guzzle",
"version": "6.3.3",
@ -635,6 +879,73 @@
"description": "Highlight PHP code in terminal",
"time": "2018-09-29T18:48:56+00:00"
},
{
"name": "knplabs/github-api",
"version": "2.10.1",
"source": {
"type": "git",
"url": "https://github.com/KnpLabs/php-github-api.git",
"reference": "493423ae7ad1fa9075924cdfb98537828b9e80b5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/493423ae7ad1fa9075924cdfb98537828b9e80b5",
"reference": "493423ae7ad1fa9075924cdfb98537828b9e80b5",
"shasum": ""
},
"require": {
"php": "^5.6 || ^7.0",
"php-http/cache-plugin": "^1.4",
"php-http/client-common": "^1.6",
"php-http/client-implementation": "^1.0",
"php-http/discovery": "^1.0",
"php-http/httplug": "^1.1",
"psr/cache": "^1.0",
"psr/http-message": "^1.0"
},
"require-dev": {
"cache/array-adapter": "^0.4",
"guzzlehttp/psr7": "^1.2",
"php-http/guzzle6-adapter": "^1.0",
"php-http/mock-client": "^1.0",
"phpunit/phpunit": "^5.5 || ^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.10.x-dev"
}
},
"autoload": {
"psr-4": {
"Github\\": "lib/Github/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Thibault Duplessis",
"email": "thibault.duplessis@gmail.com",
"homepage": "http://ornicar.github.com"
},
{
"name": "KnpLabs Team",
"homepage": "http://knplabs.com"
}
],
"description": "GitHub API v3 client",
"homepage": "https://github.com/KnpLabs/php-github-api",
"keywords": [
"api",
"gh",
"gist",
"github"
],
"time": "2018-09-05T19:12:14+00:00"
},
{
"name": "laravel/framework",
"version": "v5.7.9",
@ -1282,6 +1593,519 @@
],
"time": "2018-07-02T15:55:56+00:00"
},
{
"name": "php-http/cache-plugin",
"version": "v1.5.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/cache-plugin.git",
"reference": "c573ac6ea9b4e33fad567f875b844229d18000b9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/cache-plugin/zipball/c573ac6ea9b4e33fad567f875b844229d18000b9",
"reference": "c573ac6ea9b4e33fad567f875b844229d18000b9",
"shasum": ""
},
"require": {
"php": "^5.4 || ^7.0",
"php-http/client-common": "^1.1",
"php-http/message-factory": "^1.0",
"psr/cache": "^1.0",
"symfony/options-resolver": "^2.6 || ^3.0 || ^4.0"
},
"require-dev": {
"henrikbjorn/phpspec-code-coverage": "^1.0",
"phpspec/phpspec": "^2.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.5-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Client\\Common\\Plugin\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "PSR-6 Cache plugin for HTTPlug",
"homepage": "http://httplug.io",
"keywords": [
"cache",
"http",
"httplug",
"plugin"
],
"time": "2017-11-29T20:45:41+00:00"
},
{
"name": "php-http/client-common",
"version": "1.8.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/client-common.git",
"reference": "0b9ce659aa46aee106f8c66597ea0c070fcd9dff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/client-common/zipball/0b9ce659aa46aee106f8c66597ea0c070fcd9dff",
"reference": "0b9ce659aa46aee106f8c66597ea0c070fcd9dff",
"shasum": ""
},
"require": {
"php": "^5.4 || ^7.0",
"php-http/httplug": "^1.1",
"php-http/message": "^1.6",
"php-http/message-factory": "^1.0",
"symfony/options-resolver": "^2.6 || ^3.0 || ^4.0"
},
"require-dev": {
"guzzlehttp/psr7": "^1.4",
"phpspec/phpspec": "^2.5 || ^3.4 || ^4.2"
},
"suggest": {
"php-http/cache-plugin": "PSR-6 Cache plugin",
"php-http/logger-plugin": "PSR-3 Logger plugin",
"php-http/stopwatch-plugin": "Symfony Stopwatch plugin"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.8-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Client\\Common\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "Common HTTP Client implementations and tools for HTTPlug",
"homepage": "http://httplug.io",
"keywords": [
"client",
"common",
"http",
"httplug"
],
"time": "2018-10-09T06:46:29+00:00"
},
{
"name": "php-http/discovery",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/discovery.git",
"reference": "9a6cb24de552bfe1aa9d7d1569e2d49c5b169a33"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/discovery/zipball/9a6cb24de552bfe1aa9d7d1569e2d49c5b169a33",
"reference": "9a6cb24de552bfe1aa9d7d1569e2d49c5b169a33",
"shasum": ""
},
"require": {
"php": "^5.5 || ^7.0"
},
"require-dev": {
"henrikbjorn/phpspec-code-coverage": "^2.0.2",
"php-http/httplug": "^1.0",
"php-http/message-factory": "^1.0",
"phpspec/phpspec": "^2.4",
"puli/composer-plugin": "1.0.0-beta10"
},
"suggest": {
"php-http/message": "Allow to use Guzzle, Diactoros or Slim Framework factories",
"puli/composer-plugin": "Sets up Puli which is recommended for Discovery to work. Check http://docs.php-http.org/en/latest/discovery.html for more details."
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Discovery\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "Finds installed HTTPlug implementations and PSR-7 message factories",
"homepage": "http://php-http.org",
"keywords": [
"adapter",
"client",
"discovery",
"factory",
"http",
"message",
"psr7"
],
"time": "2018-02-06T10:55:24+00:00"
},
{
"name": "php-http/guzzle6-adapter",
"version": "v1.1.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/guzzle6-adapter.git",
"reference": "a56941f9dc6110409cfcddc91546ee97039277ab"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/guzzle6-adapter/zipball/a56941f9dc6110409cfcddc91546ee97039277ab",
"reference": "a56941f9dc6110409cfcddc91546ee97039277ab",
"shasum": ""
},
"require": {
"guzzlehttp/guzzle": "^6.0",
"php": ">=5.5.0",
"php-http/httplug": "^1.0"
},
"provide": {
"php-http/async-client-implementation": "1.0",
"php-http/client-implementation": "1.0"
},
"require-dev": {
"ext-curl": "*",
"php-http/adapter-integration-tests": "^0.4"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Adapter\\Guzzle6\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
},
{
"name": "David de Boer",
"email": "david@ddeboer.nl"
}
],
"description": "Guzzle 6 HTTP Adapter",
"homepage": "http://httplug.io",
"keywords": [
"Guzzle",
"http"
],
"time": "2016-05-10T06:13:32+00:00"
},
{
"name": "php-http/httplug",
"version": "v1.1.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/httplug.git",
"reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/httplug/zipball/1c6381726c18579c4ca2ef1ec1498fdae8bdf018",
"reference": "1c6381726c18579c4ca2ef1ec1498fdae8bdf018",
"shasum": ""
},
"require": {
"php": ">=5.4",
"php-http/promise": "^1.0",
"psr/http-message": "^1.0"
},
"require-dev": {
"henrikbjorn/phpspec-code-coverage": "^1.0",
"phpspec/phpspec": "^2.4"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Client\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Eric GELOEN",
"email": "geloen.eric@gmail.com"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "HTTPlug, the HTTP client abstraction for PHP",
"homepage": "http://httplug.io",
"keywords": [
"client",
"http"
],
"time": "2016-08-31T08:30:17+00:00"
},
{
"name": "php-http/message",
"version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/message.git",
"reference": "741f2266a202d59c4ed75436671e1b8e6f475ea3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/message/zipball/741f2266a202d59c4ed75436671e1b8e6f475ea3",
"reference": "741f2266a202d59c4ed75436671e1b8e6f475ea3",
"shasum": ""
},
"require": {
"clue/stream-filter": "^1.4",
"php": "^5.4 || ^7.0",
"php-http/message-factory": "^1.0.2",
"psr/http-message": "^1.0"
},
"provide": {
"php-http/message-factory-implementation": "1.0"
},
"require-dev": {
"akeneo/phpspec-skip-example-extension": "^1.0",
"coduo/phpspec-data-provider-extension": "^1.0",
"ext-zlib": "*",
"guzzlehttp/psr7": "^1.0",
"henrikbjorn/phpspec-code-coverage": "^1.0",
"phpspec/phpspec": "^2.4",
"slim/slim": "^3.0",
"zendframework/zend-diactoros": "^1.0"
},
"suggest": {
"ext-zlib": "Used with compressor/decompressor streams",
"guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories",
"slim/slim": "Used with Slim Framework PSR-7 implementation",
"zendframework/zend-diactoros": "Used with Diactoros Factories"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.6-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Message\\": "src/"
},
"files": [
"src/filters.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "HTTP Message related tools",
"homepage": "http://php-http.org",
"keywords": [
"http",
"message",
"psr-7"
],
"time": "2018-08-15T06:37:30+00:00"
},
{
"name": "php-http/message-factory",
"version": "v1.0.2",
"source": {
"type": "git",
"url": "https://github.com/php-http/message-factory.git",
"reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1",
"reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1",
"shasum": ""
},
"require": {
"php": ">=5.4",
"psr/http-message": "^1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Message\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
}
],
"description": "Factory interfaces for PSR-7 HTTP Message",
"homepage": "http://php-http.org",
"keywords": [
"factory",
"http",
"message",
"stream",
"uri"
],
"time": "2015-12-19T14:08:53+00:00"
},
{
"name": "php-http/promise",
"version": "v1.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-http/promise.git",
"reference": "dc494cdc9d7160b9a09bd5573272195242ce7980"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-http/promise/zipball/dc494cdc9d7160b9a09bd5573272195242ce7980",
"reference": "dc494cdc9d7160b9a09bd5573272195242ce7980",
"shasum": ""
},
"require-dev": {
"henrikbjorn/phpspec-code-coverage": "^1.0",
"phpspec/phpspec": "^2.4"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
}
},
"autoload": {
"psr-4": {
"Http\\Promise\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com"
},
{
"name": "Joel Wurtz",
"email": "joel.wurtz@gmail.com"
}
],
"description": "Promise used for asynchronous HTTP requests",
"homepage": "http://httplug.io",
"keywords": [
"promise"
],
"time": "2016-01-26T13:27:02+00:00"
},
{
"name": "psr/cache",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/cache.git",
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8",
"reference": "d11b50ad223250cf17b86e38383413f5a6764bf8",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Cache\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common interface for caching libraries",
"keywords": [
"cache",
"psr",
"psr-6"
],
"time": "2016-08-06T20:24:11+00:00"
},
{
"name": "psr/container",
"version": "1.0.0",
@ -2121,6 +2945,60 @@
"homepage": "https://symfony.com",
"time": "2018-10-03T12:53:38+00:00"
},
{
"name": "symfony/options-resolver",
"version": "v4.1.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
"reference": "40f0e40d37c1c8a762334618dea597d64bbb75ff"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/40f0e40d37c1c8a762334618dea597d64bbb75ff",
"reference": "40f0e40d37c1c8a762334618dea597d64bbb75ff",
"shasum": ""
},
"require": {
"php": "^7.1.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.1-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\OptionsResolver\\": ""
},
"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 OptionsResolver Component",
"homepage": "https://symfony.com",
"keywords": [
"config",
"configuration",
"options"
],
"time": "2018-09-18T12:45:12+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.9.0",

View file

@ -14,7 +14,7 @@ return [
*/
'name' => env('APP_NAME', 'Heimdall'),
'version' => '2.0.2',
'version' => '2.0.100',
/*
|--------------------------------------------------------------------------

91
config/github.php Normal file
View file

@ -0,0 +1,91 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
/*
|--------------------------------------------------------------------------
| Default Connection Name
|--------------------------------------------------------------------------
|
| Here you may specify which of the connections below you wish to use as
| your default connection for all work. Of course, you may use many
| connections at once using the manager class.
|
*/
'default' => 'main',
/*
|--------------------------------------------------------------------------
| GitHub Connections
|--------------------------------------------------------------------------
|
| Here are each of the connections setup for your application. Example
| configuration has been included, but you may add as many connections as
| you would like. Note that the 5 supported authentication methods are:
| "application", "jwt", "none", "password", and "token".
|
*/
'connections' => [
'main' => [
'token' => 'your-token',
'method' => 'token',
// 'backoff' => false,
// 'cache' => false,
// 'version' => 'v3',
// 'enterprise' => false,
],
'app' => [
'clientId' => 'your-client-id',
'clientSecret' => 'your-client-secret',
'method' => 'application',
// 'backoff' => false,
// 'cache' => false,
// 'version' => 'v3',
// 'enterprise' => false,
],
'jwt' => [
'token' => 'your-jwt-token',
'method' => 'jwt',
// 'backoff' => false,
// 'cache' => false,
// 'version' => 'v3',
// 'enterprise' => false,
],
'other' => [
'username' => 'your-username',
'password' => 'your-password',
'method' => 'password',
// 'backoff' => false,
// 'cache' => false,
// 'version' => 'v3',
// 'enterprise' => false,
],
'none' => [
'method' => 'none',
// 'backoff' => false,
// 'cache' => false,
// 'version' => 'v3',
// 'enterprise' => false,
],
],
];

View file

@ -0,0 +1,39 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateApplicationsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('applications', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('sha');
$table->string('icon')->nullable();
$table->string('website')->nullable();
$table->string('license')->nullable();
$table->mediumText('description')->nullable();
$table->boolean('enhanced')->default(false);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('applications');
}
}

View file

@ -16,12 +16,15 @@ Route::get('/userselect', 'UserController@selectUser')->name('user.select');
Route::get('/autologin/{uuid}', 'Auth\LoginController@autologin')->name('user.autologin');
Route::get('/', 'ItemController@dash')->name('dash');
Route::get('check_app_list', 'ItemController@checkAppList')->name('applist');
Route::resources([
'items' => 'ItemController',
'tags' => 'TagController',
]);
Route::get('tag/{slug}', 'TagController@show')->name('tags.show');
Route::get('tag/add/{tag}/{item}', 'TagController@add')->name('tags.add');

2
vendor/clue/stream-filter/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/vendor
/composer.lock

26
vendor/clue/stream-filter/.travis.yml vendored Normal file
View file

@ -0,0 +1,26 @@
language: php
php:
# - 5.3 # requires old distro, see below
- 5.4
- 5.5
- 5.6
- 7.0
- 7.1
- hhvm # ignore errors, see below
# lock distro so new future defaults will not break the build
dist: trusty
matrix:
include:
- php: 5.3
dist: precise
allow_failures:
- php: hhvm
install:
- composer install --no-interaction
script:
- vendor/bin/phpunit --coverage-text

54
vendor/clue/stream-filter/CHANGELOG.md vendored Normal file
View file

@ -0,0 +1,54 @@
# Changelog
## 1.4.0 (2017-08-18)
* Feature / Fix: The `fun()` function does not pass filter parameter `null`
to underlying `stream_filter_append()` by default
(#15 by @Nyholm)
Certain filters (such as `convert.quoted-printable-encode`) do not accept
a filter parameter at all. If no explicit filter parameter is given, we no
longer pass a default `null` value.
```php
$encode = Filter\fun('convert.quoted-printable-encode');
assert('t=C3=A4st' === $encode('täst'));
```
* Add examples and improve documentation
(#13 and #20 by @clue and #18 by @Nyholm)
* Improve test suite by adding PHPUnit to require-dev,
fix HHVM build for now again and ignore future HHVM build errors,
lock Travis distro so new future defaults will not break the build
and test on PHP 7.1
(#12, #14 and #19 by @clue and #16 by @Nyholm)
## 1.3.0 (2015-11-08)
* Feature: Support accessing built-in filters as callbacks
(#5 by @clue)
```php
$fun = Filter\fun('zlib.deflate');
$ret = $fun('hello') . $fun('world') . $fun();
assert('helloworld' === gzinflate($ret));
```
## 1.2.0 (2015-10-23)
* Feature: Invoke close event when closing filter (flush buffer)
(#9 by @clue)
## 1.1.0 (2015-10-22)
* Feature: Abort filter operation when catching an Exception
(#10 by @clue)
* Feature: Additional safeguards to prevent filter state corruption
(#7 by @clue)
## 1.0.0 (2015-10-18)
* First tagged release

21
vendor/clue/stream-filter/LICENSE vendored Normal file
View file

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2015 Christian Lück
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.

297
vendor/clue/stream-filter/README.md vendored Normal file
View file

@ -0,0 +1,297 @@
# clue/stream-filter [![Build Status](https://travis-ci.org/clue/php-stream-filter.svg?branch=master)](https://travis-ci.org/clue/php-stream-filter)
A simple and modern approach to stream filtering in PHP
**Table of contents**
* [Why?](#why)
* [Usage](#usage)
* [append()](#append)
* [prepend()](#prepend)
* [fun()](#fun)
* [remove()](#remove)
* [Install](#install)
* [Tests](#tests)
* [License](#license)
## Why?
PHP's stream filtering system is great!
It offers very powerful stream filtering options and comes with a useful set of built-in filters.
These filters can be used to easily and efficiently perform various transformations on-the-fly, such as:
* read from a gzip'ed input file,
* transcode from ISO-8859-1 (Latin1) to UTF-8,
* write to a bzip output file
* and much more.
But let's face it:
Its API is [*difficult to work with*](http://php.net/manual/en/php-user-filter.filter.php)
and its documentation is [*subpar*](http://stackoverflow.com/questions/27103269/what-is-a-bucket-brigade).
This combined means its powerful features are often neglected.
This project aims to make these features more accessible to a broader audience.
* **Lightweight, SOLID design** -
Provides a thin abstraction that is [*just good enough*](http://en.wikipedia.org/wiki/Principle_of_good_enough)
and does not get in your way.
Custom filters require trivial effort.
* **Good test coverage** -
Comes with an automated tests suite and is regularly tested in the *real world*
## Usage
This lightweight library consists only of a few simple functions.
All functions reside under the `Clue\StreamFilter` namespace.
The below examples assume you use an import statement similar to this:
```php
use Clue\StreamFilter as Filter;
Filter\append(…);
```
Alternatively, you can also refer to them with their fully-qualified name:
```php
\Clue\StreamFilter\append(…);
```
### append()
The `append($stream, $callback, $read_write = STREAM_FILTER_ALL)` function can be used to
append a filter callback to the given stream.
Each stream can have a list of filters attached.
This function appends a filter to the end of this list.
This function returns a filter resource which can be passed to [`remove()`](#remove).
If the given filter can not be added, it throws an `Exception`.
The `$stream` can be any valid stream resource, such as:
```php
$stream = fopen('demo.txt', 'w+');
```
The `$callback` should be a valid callable function which accepts an individual chunk of data
and should return the updated chunk:
```php
$filter = Filter\append($stream, function ($chunk) {
// will be called each time you read or write a $chunk to/from the stream
return $chunk;
});
```
As such, you can also use native PHP functions or any other `callable`:
```php
Filter\append($stream, 'strtoupper');
// will write "HELLO" to the underlying stream
fwrite($stream, 'hello');
```
If the `$callback` accepts invocation without parameters, then this signature
will be invoked once ending (flushing) the filter:
```php
Filter\append($stream, function ($chunk = null) {
if ($chunk === null) {
// will be called once ending the filter
return 'end';
}
// will be called each time you read or write a $chunk to/from the stream
return $chunk;
});
fclose($stream);
```
> Note: Legacy PHP versions (PHP < 5.4) do not support passing additional data
from the end signal handler if the stream is being closed.
If your callback throws an `Exception`, then the filter process will be aborted.
In order to play nice with PHP's stream handling, the `Exception` will be
transformed to a PHP warning instead:
```php
Filter\append($stream, function ($chunk) {
throw new \RuntimeException('Unexpected chunk');
});
// raises an E_USER_WARNING with "Error invoking filter: Unexpected chunk"
fwrite($stream, 'hello');
```
The optional `$read_write` parameter can be used to only invoke the `$callback` when either writing to the stream or only when reading from the stream:
```php
Filter\append($stream, function ($chunk) {
// will be called each time you write to the stream
return $chunk;
}, STREAM_FILTER_WRITE);
Filter\append($stream, function ($chunk) {
// will be called each time you read from the stream
return $chunk;
}, STREAM_FILTER_READ);
```
> Note that once a filter has been added to stream, the stream can no longer be passed to
> [`stream_select()`](http://php.net/manual/en/function.stream-select.php)
> (and family).
>
> > Warning: stream_select(): cannot cast a filtered stream on this system in {file} on line {line}
>
> This is due to limitations of PHP's stream filter support, as it can no longer reliably
> tell when the underlying stream resource is actually ready.
> As an alternative, consider calling `stream_select()` on the unfiltered stream and
> then pass the unfiltered data through the [`fun()`](#fun) function.
### prepend()
The `prepend($stream, $callback, $read_write = STREAM_FILTER_ALL)` function can be used to
prepend a filter callback to the given stream.
Each stream can have a list of filters attached.
This function prepends a filter to the start of this list.
This function returns a filter resource which can be passed to [`remove()`](#remove).
If the given filter can not be added, it throws an `Exception`.
```php
$filter = Filter\prepend($stream, function ($chunk) {
// will be called each time you read or write a $chunk to/from the stream
return $chunk;
});
```
Except for the position in the list of filters, this function behaves exactly
like the [`append()`](#append) function.
For more details about its behavior, see also the [`append()`](#append) function.
### fun()
The `fun($filter, $parameters = null)` function can be used to
create a filter function which uses the given built-in `$filter`.
PHP comes with a useful set of [built-in filters](http://php.net/manual/en/filters.php).
Using `fun()` makes accessing these as easy as passing an input string to filter
and getting the filtered output string.
```php
$fun = Filter\fun('string.rot13');
assert('grfg' === $fun('test'));
assert('test' === $fun($fun('test'));
```
Please note that not all filter functions may be available depending on installed
PHP extensions and the PHP version in use.
In particular, [HHVM](http://hhvm.com/) may not offer the same filter functions
or parameters as Zend PHP.
Accessing an unknown filter function will result in a `RuntimeException`:
```php
Filter\fun('unknown'); // throws RuntimeException
```
Some filters may accept or require additional filter parameters most
filters do not require filter parameters.
If given, the optional `$parameters` argument will be passed to the
underlying filter handler as-is.
In particular, note how *not passing* this parameter at all differs from
explicitly passing a `null` value (which many filters do not accept).
Please refer to the individual filter definition for more details.
For example, the `string.strip_tags` filter can be invoked like this:
```php
$fun = Filter\fun('string.strip_tags', '<a><b>');
$ret = $fun('<b>h<br>i</b>');
assert('<b>hi</b>' === $ret);
```
Under the hood, this function allocates a temporary memory stream, so it's
recommended to clean up the filter function after use.
Also, some filter functions (in particular the
[zlib compression filters](http://php.net/manual/en/filters.compression.php))
may use internal buffers and may emit a final data chunk on close.
The filter function can be closed by invoking without any arguments:
```php
$fun = Filter\fun('zlib.deflate');
$ret = $fun('hello') . $fun('world') . $fun();
assert('helloworld' === gzinflate($ret));
```
The filter function must not be used anymore after it has been closed.
Doing so will result in a `RuntimeException`:
```php
$fun = Filter\fun('string.rot13');
$fun();
$fun('test'); // throws RuntimeException
```
> Note: If you're using the zlib compression filters, then you should be wary
about engine inconsistencies between different PHP versions and HHVM.
These inconsistencies exist in the underlying PHP engines and there's little we
can do about this in this library.
[Our test suite](tests/) contains several test cases that exhibit these issues.
If you feel some test case is missing or outdated, we're happy to accept PRs! :)
### remove()
The `remove($filter)` function can be used to
remove a filter previously added via [`append()`](#append) or [`prepend()`](#prepend).
```php
$filter = Filter\append($stream, function () {
// …
});
Filter\remove($filter);
```
## Install
The recommended way to install this library is [through Composer](https://getcomposer.org).
[New to Composer?](https://getcomposer.org/doc/00-intro.md)
This will install the latest supported version:
```bash
$ composer require clue/stream-filter:^1.4
```
See also the [CHANGELOG](CHANGELOG.md) for details about version upgrades.
This project aims to run on any platform and thus does not require any PHP
extensions and supports running on legacy PHP 5.3 through current PHP 7+ and
HHVM.
It's *highly recommended to use PHP 7+* for this project.
Older PHP versions may suffer from a number of inconsistencies documented above.
## Tests
To run the test suite, you first need to clone this repo and then install all
dependencies [through Composer](http://getcomposer.org):
```bash
$ composer install
```
To run the test suite, go to the project root and run:
```bash
$ php vendor/bin/phpunit
```
## License
MIT

23
vendor/clue/stream-filter/composer.json vendored Normal file
View file

@ -0,0 +1,23 @@
{
"name": "clue/stream-filter",
"description": "A simple and modern approach to stream filtering in PHP",
"keywords": ["stream", "callback", "filter", "php_user_filter", "stream_filter_append", "stream_filter_register", "bucket brigade"],
"homepage": "https://github.com/clue/php-stream-filter",
"license": "MIT",
"authors": [
{
"name": "Christian Lück",
"email": "christian@lueck.tv"
}
],
"require": {
"php": ">=5.3"
},
"require-dev": {
"phpunit/phpunit": "^5.0 || ^4.8"
},
"autoload": {
"psr-4": { "Clue\\StreamFilter\\": "src/" },
"files": [ "src/functions.php" ]
}
}

View file

@ -0,0 +1,29 @@
<?php
// $ echo test | php examples/base64_encode.php | php examples/base64_decode.php
require __DIR__ . '/../vendor/autoload.php';
// decoding requires buffering in chunks of 4 bytes each
$buffer = '';
Clue\StreamFilter\append(STDIN, function ($chunk = null) use (&$buffer) {
if ($chunk === null) {
if (strlen($buffer) % 4 !== 0) {
throw new \UnexpectedValueException('Invalid length');
}
$chunk = $buffer;
} else {
$buffer .= $chunk;
$len = strlen($buffer) - (strlen($buffer) % 4);
$chunk = (string)substr($buffer, 0, $len);
$buffer = (string)substr($buffer, $len);
}
$ret = base64_decode($chunk, true);
if ($ret === false) {
throw new \UnexpectedValueException('Not a valid base64 encoded chunk');
}
return $ret;
}, STREAM_FILTER_READ);
fpassthru(STDIN);

View file

@ -0,0 +1,21 @@
<?php
// $ echo test | php examples/base64_encode.php | base64 --decode
require __DIR__ . '/../vendor/autoload.php';
// encoding requires buffering in chunks of 3 bytes each
$buffer = '';
Clue\StreamFilter\append(STDIN, function ($chunk = null) use (&$buffer) {
if ($chunk === null) {
return base64_encode($buffer);
}
$buffer .= $chunk;
$len = strlen($buffer) - (strlen($buffer) % 3);
$chunk = substr($buffer, 0, $len);
$buffer = substr($buffer, $len);
return base64_encode($chunk);
}, STREAM_FILTER_READ);
fpassthru(STDIN);

View file

@ -0,0 +1,9 @@
<?php
// $ echo test | php examples/uppercase.php
require __DIR__ . '/../vendor/autoload.php';
Clue\StreamFilter\append(STDIN, 'strtoupper');
fpassthru(STDIN);

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
>
<testsuites>
<testsuite>
<directory>./tests/</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory>./src/</directory>
</whitelist>
</filter>
</phpunit>

View file

@ -0,0 +1,120 @@
<?php
namespace Clue\StreamFilter;
use php_user_filter;
use InvalidArgumentException;
use ReflectionFunction;
use Exception;
/**
*
* @internal
* @see append()
* @see prepend()
*/
class CallbackFilter extends php_user_filter
{
private $callback;
private $closed = true;
private $supportsClose = false;
public function onCreate()
{
$this->closed = false;
if (!is_callable($this->params)) {
throw new InvalidArgumentException('No valid callback parameter given to stream_filter_(append|prepend)');
}
$this->callback = $this->params;
// callback supports end event if it accepts invocation without arguments
$ref = new ReflectionFunction($this->callback);
$this->supportsClose = ($ref->getNumberOfRequiredParameters() === 0);
return true;
}
public function onClose()
{
$this->closed = true;
// callback supports closing and is not already closed
if ($this->supportsClose) {
$this->supportsClose = false;
// invoke without argument to signal end and discard resulting buffer
try {
call_user_func($this->callback);
} catch (Exception $ignored) {
// this might be called during engine shutdown, so it's not safe
// to raise any errors or exceptions here
// trigger_error('Error closing filter: ' . $ignored->getMessage(), E_USER_WARNING);
}
}
$this->callback = null;
}
public function filter($in, $out, &$consumed, $closing)
{
// concatenate whole buffer from input brigade
$data = '';
while ($bucket = stream_bucket_make_writeable($in)) {
$consumed += $bucket->datalen;
$data .= $bucket->data;
}
// skip processing callback that already ended
if ($this->closed) {
return PSFS_FEED_ME;
}
// only invoke filter function if buffer is not empty
// this may skip flushing a closing filter
if ($data !== '') {
try {
$data = call_user_func($this->callback, $data);
} catch (Exception $e) {
// exception should mark filter as closed
$this->onClose();
trigger_error('Error invoking filter: ' . $e->getMessage(), E_USER_WARNING);
return PSFS_ERR_FATAL;
}
}
// mark filter as closed after processing closing chunk
if ($closing) {
$this->closed = true;
// callback supports closing and is not already closed
if ($this->supportsClose) {
$this->supportsClose = false;
// invoke without argument to signal end and append resulting buffer
try {
$data .= call_user_func($this->callback);
} catch (Exception $e) {
trigger_error('Error ending filter: ' . $e->getMessage(), E_USER_WARNING);
return PSFS_ERR_FATAL;
}
}
}
if ($data !== '') {
// create a new bucket for writing the resulting buffer to the output brigade
// reusing an existing bucket turned out to be bugged in some environments (ancient PHP versions and HHVM)
$bucket = @stream_bucket_new($this->stream, $data);
// legacy PHP versions (PHP < 5.4) do not support passing data from the event signal handler
// because closing the stream invalidates the stream and its stream bucket brigade before
// invoking the filter close handler.
if ($bucket !== false) {
stream_bucket_append($out, $bucket);
}
}
return PSFS_PASS_ON;
}
}

View file

@ -0,0 +1,146 @@
<?php
namespace Clue\StreamFilter;
use RuntimeException;
/**
* append a callback filter to the given stream
*
* @param resource $stream
* @param callable $callback
* @param int $read_write
* @return resource filter resource which can be used for `remove()`
* @throws Exception on error
* @uses stream_filter_append()
*/
function append($stream, $callback, $read_write = STREAM_FILTER_ALL)
{
$ret = @stream_filter_append($stream, register(), $read_write, $callback);
if ($ret === false) {
$error = error_get_last() + array('message' => '');
throw new RuntimeException('Unable to append filter: ' . $error['message']);
}
return $ret;
}
/**
* prepend a callback filter to the given stream
*
* @param resource $stream
* @param callable $callback
* @param int $read_write
* @return resource filter resource which can be used for `remove()`
* @throws Exception on error
* @uses stream_filter_prepend()
*/
function prepend($stream, $callback, $read_write = STREAM_FILTER_ALL)
{
$ret = @stream_filter_prepend($stream, register(), $read_write, $callback);
if ($ret === false) {
$error = error_get_last() + array('message' => '');
throw new RuntimeException('Unable to prepend filter: ' . $error['message']);
}
return $ret;
}
/**
* Creates filter fun (function) which uses the given built-in $filter
*
* Some filters may accept or require additional filter parameters most
* filters do not require filter parameters.
* If given, the optional `$parameters` argument will be passed to the
* underlying filter handler as-is.
* In particular, note how *not passing* this parameter at all differs from
* explicitly passing a `null` value (which many filters do not accept).
* Please refer to the individual filter definition for more details.
*
* @param string $filter built-in filter name. See stream_get_filters() or http://php.net/manual/en/filters.php
* @param mixed $parameters (optional) parameters to pass to the built-in filter as-is
* @return callable a filter callback which can be append()'ed or prepend()'ed
* @throws RuntimeException on error
* @link http://php.net/manual/en/filters.php
* @see stream_get_filters()
* @see append()
*/
function fun($filter, $parameters = null)
{
$fp = fopen('php://memory', 'w');
if (func_num_args() === 1) {
$filter = @stream_filter_append($fp, $filter, STREAM_FILTER_WRITE);
} else {
$filter = @stream_filter_append($fp, $filter, STREAM_FILTER_WRITE, $parameters);
}
if ($filter === false) {
fclose($fp);
$error = error_get_last() + array('message' => '');
throw new RuntimeException('Unable to access built-in filter: ' . $error['message']);
}
// append filter function which buffers internally
$buffer = '';
append($fp, function ($chunk) use (&$buffer) {
$buffer .= $chunk;
// always return empty string in order to skip actually writing to stream resource
return '';
}, STREAM_FILTER_WRITE);
$closed = false;
return function ($chunk = null) use ($fp, $filter, &$buffer, &$closed) {
if ($closed) {
throw new \RuntimeException('Unable to perform operation on closed stream');
}
if ($chunk === null) {
$closed = true;
$buffer = '';
fclose($fp);
return $buffer;
}
// initialize buffer and invoke filters by attempting to write to stream
$buffer = '';
fwrite($fp, $chunk);
// buffer now contains everything the filter function returned
return $buffer;
};
}
/**
* remove a callback filter from the given stream
*
* @param resource $filter
* @return boolean true on success or false on error
* @throws Exception on error
* @uses stream_filter_remove()
*/
function remove($filter)
{
if (@stream_filter_remove($filter) === false) {
throw new RuntimeException('Unable to remove given filter');
}
}
/**
* registers the callback filter and returns the resulting filter name
*
* There should be little reason to call this function manually.
*
* @return string filter name
* @uses CallbackFilter
*/
function register()
{
static $registered = null;
if ($registered === null) {
$registered = 'stream-callback';
stream_filter_register($registered, __NAMESPACE__ . '\CallbackFilter');
}
return $registered;
}

View file

@ -0,0 +1,386 @@
<?php
use Clue\StreamFilter;
class FilterTest extends PHPUnit_Framework_TestCase
{
public function testAppendSimpleCallback()
{
$stream = $this->createStream();
StreamFilter\append($stream, function ($chunk) {
return strtoupper($chunk);
});
fwrite($stream, 'hello');
fwrite($stream, 'world');
rewind($stream);
$this->assertEquals('HELLOWORLD', stream_get_contents($stream));
fclose($stream);
}
public function testAppendNativePhpFunction()
{
$stream = $this->createStream();
StreamFilter\append($stream, 'strtoupper');
fwrite($stream, 'hello');
fwrite($stream, 'world');
rewind($stream);
$this->assertEquals('HELLOWORLD', stream_get_contents($stream));
fclose($stream);
}
public function testAppendChangingChunkSize()
{
$stream = $this->createStream();
StreamFilter\append($stream, function ($chunk) {
return str_replace(array('a','e','i','o','u'), '', $chunk);
});
fwrite($stream, 'hello');
fwrite($stream, 'world');
rewind($stream);
$this->assertEquals('hllwrld', stream_get_contents($stream));
fclose($stream);
}
public function testAppendReturningEmptyStringWillNotPassThrough()
{
$stream = $this->createStream();
StreamFilter\append($stream, function ($chunk) {
return '';
});
fwrite($stream, 'hello');
fwrite($stream, 'world');
rewind($stream);
$this->assertEquals('', stream_get_contents($stream));
fclose($stream);
}
public function testAppendEndEventCanBeBufferedOnClose()
{
if (PHP_VERSION < 5.4) $this->markTestSkipped('Not supported on legacy PHP');
$stream = $this->createStream();
StreamFilter\append($stream, function ($chunk = null) {
if ($chunk === null) {
// this signals the end event
return '!';
}
return $chunk . ' ';
}, STREAM_FILTER_WRITE);
$buffered = '';
StreamFilter\append($stream, function ($chunk) use (&$buffered) {
$buffered .= $chunk;
return '';
});
fwrite($stream, 'hello');
fwrite($stream, 'world');
fclose($stream);
$this->assertEquals('hello world !', $buffered);
}
public function testAppendEndEventWillBeCalledOnRemove()
{
$stream = $this->createStream();
$ended = false;
$filter = StreamFilter\append($stream, function ($chunk = null) use (&$ended) {
if ($chunk === null) {
$ended = true;
}
return $chunk;
}, STREAM_FILTER_WRITE);
$this->assertEquals(0, $ended);
StreamFilter\remove($filter);
$this->assertEquals(1, $ended);
}
public function testAppendEndEventWillBeCalledOnClose()
{
$stream = $this->createStream();
$ended = false;
StreamFilter\append($stream, function ($chunk = null) use (&$ended) {
if ($chunk === null) {
$ended = true;
}
return $chunk;
}, STREAM_FILTER_WRITE);
$this->assertEquals(0, $ended);
fclose($stream);
$this->assertEquals(1, $ended);
}
public function testAppendWriteOnly()
{
$stream = $this->createStream();
$invoked = 0;
StreamFilter\append($stream, function ($chunk) use (&$invoked) {
++$invoked;
return $chunk;
}, STREAM_FILTER_WRITE);
fwrite($stream, 'a');
fwrite($stream, 'b');
fwrite($stream, 'c');
rewind($stream);
$this->assertEquals(3, $invoked);
$this->assertEquals('abc', stream_get_contents($stream));
fclose($stream);
}
public function testAppendReadOnly()
{
$stream = $this->createStream();
$invoked = 0;
StreamFilter\append($stream, function ($chunk) use (&$invoked) {
++$invoked;
return $chunk;
}, STREAM_FILTER_READ);
fwrite($stream, 'a');
fwrite($stream, 'b');
fwrite($stream, 'c');
rewind($stream);
$this->assertEquals(0, $invoked);
$this->assertEquals('abc', stream_get_contents($stream));
$this->assertEquals(1, $invoked);
fclose($stream);
}
public function testOrderCallingAppendAfterPrepend()
{
$stream = $this->createStream();
StreamFilter\append($stream, function ($chunk) {
return '[' . $chunk . ']';
}, STREAM_FILTER_WRITE);
StreamFilter\prepend($stream, function ($chunk) {
return '(' . $chunk . ')';
}, STREAM_FILTER_WRITE);
fwrite($stream, 'hello');
rewind($stream);
$this->assertEquals('[(hello)]', stream_get_contents($stream));
fclose($stream);
}
public function testRemoveFilter()
{
$stream = $this->createStream();
$first = StreamFilter\append($stream, function ($chunk) {
return $chunk . '?';
}, STREAM_FILTER_WRITE);
StreamFilter\append($stream, function ($chunk) {
return $chunk . '!';
}, STREAM_FILTER_WRITE);
StreamFilter\remove($first);
fwrite($stream, 'hello');
rewind($stream);
$this->assertEquals('hello!', stream_get_contents($stream));
fclose($stream);
}
public function testAppendFunDechunk()
{
if (defined('HHVM_VERSION')) $this->markTestSkipped('Not supported on HHVM (dechunk filter does not exist)');
$stream = $this->createStream();
StreamFilter\append($stream, StreamFilter\fun('dechunk'), STREAM_FILTER_WRITE);
fwrite($stream, "2\r\nhe\r\n");
fwrite($stream, "3\r\nllo\r\n");
fwrite($stream, "0\r\n\r\n");
rewind($stream);
$this->assertEquals('hello', stream_get_contents($stream));
fclose($stream);
}
public function testAppendThrows()
{
$this->createErrorHandler($errors);
$stream = $this->createStream();
$this->createErrorHandler($errors);
StreamFilter\append($stream, function ($chunk) {
throw new \DomainException($chunk);
});
fwrite($stream, 'test');
$this->removeErrorHandler();
$this->assertCount(1, $errors);
$this->assertContains('test', $errors[0]);
}
public function testAppendThrowsDuringEnd()
{
$stream = $this->createStream();
$this->createErrorHandler($errors);
StreamFilter\append($stream, function ($chunk = null) {
if ($chunk === null) {
throw new \DomainException('end');
}
return $chunk;
});
fclose($stream);
$this->removeErrorHandler();
// We can only assert we're not seeing an exception here…
// * php 5.3-5.6 sees one error here
// * php 7 does not see any error here
// * hhvm sees the same error twice
//
// If you're curious:
//
// var_dump($errors);
// $this->assertCount(1, $errors);
// $this->assertContains('end', $errors[0]);
}
public function testAppendThrowsShouldTriggerEnd()
{
$stream = $this->createStream();
$this->createErrorHandler($errors);
$ended = false;
StreamFilter\append($stream, function ($chunk = null) use (&$ended) {
if ($chunk === null) {
$ended = true;
return '';
}
throw new \DomainException($chunk);
});
$this->assertEquals(false, $ended);
fwrite($stream, 'test');
$this->assertEquals(true, $ended);
$this->removeErrorHandler();
$this->assertCount(1, $errors);
$this->assertContains('test', $errors[0]);
}
public function testAppendThrowsShouldTriggerEndButIgnoreExceptionDuringEnd()
{
//$this->markTestIncomplete();
$stream = $this->createStream();
$this->createErrorHandler($errors);
StreamFilter\append($stream, function ($chunk = null) {
if ($chunk === null) {
$chunk = 'end';
//return '';
}
throw new \DomainException($chunk);
});
fwrite($stream, 'test');
$this->removeErrorHandler();
$this->assertCount(1, $errors);
$this->assertContains('test', $errors[0]);
}
/**
* @expectedException RuntimeException
*/
public function testAppendInvalidStreamIsRuntimeError()
{
if (defined('HHVM_VERSION')) $this->markTestSkipped('Not supported on HHVM (does not reject invalid stream)');
StreamFilter\append(false, function () { });
}
/**
* @expectedException RuntimeException
*/
public function testPrependInvalidStreamIsRuntimeError()
{
if (defined('HHVM_VERSION')) $this->markTestSkipped('Not supported on HHVM (does not reject invalid stream)');
StreamFilter\prepend(false, function () { });
}
/**
* @expectedException RuntimeException
*/
public function testRemoveInvalidFilterIsRuntimeError()
{
if (defined('HHVM_VERSION')) $this->markTestSkipped('Not supported on HHVM (does not reject invalid filters)');
StreamFilter\remove(false);
}
/**
* @expectedException InvalidArgumentException
*/
public function testInvalidCallbackIsInvalidArgument()
{
$stream = $this->createStream();
StreamFilter\append($stream, 'a-b-c');
}
private function createStream()
{
return fopen('php://memory', 'r+');
}
private function createErrorHandler(&$errors)
{
$errors = array();
set_error_handler(function ($_, $message) use (&$errors) {
$errors []= $message;
});
}
private function removeErrorHandler()
{
restore_error_handler();
}
}

View file

@ -0,0 +1,44 @@
<?php
use Clue\StreamFilter as Filter;
class FunTest extends PHPUnit_Framework_TestCase
{
public function testFunInRot13()
{
$rot = Filter\fun('string.rot13');
$this->assertEquals('grfg', $rot('test'));
$this->assertEquals('test', $rot($rot('test')));
$this->assertEquals(null, $rot());
}
public function testFunInQuotedPrintable()
{
$encode = Filter\fun('convert.quoted-printable-encode');
$decode = Filter\fun('convert.quoted-printable-decode');
$this->assertEquals('t=C3=A4st', $encode('täst'));
$this->assertEquals('täst', $decode($encode('täst')));
$this->assertEquals(null, $encode());
}
/**
* @expectedException RuntimeException
*/
public function testFunWriteAfterCloseRot13()
{
$rot = Filter\fun('string.rot13');
$this->assertEquals(null, $rot());
$rot('test');
}
/**
* @expectedException RuntimeException
*/
public function testFunInvalid()
{
Filter\fun('unknown');
}
}

View file

@ -0,0 +1,79 @@
<?php
use Clue\StreamFilter;
class BuiltInZlibTest extends PHPUnit_Framework_TestCase
{
public function testFunZlibDeflateHelloWorld()
{
$deflate = StreamFilter\fun('zlib.deflate');
$data = $deflate('hello') . $deflate(' ') . $deflate('world') . $deflate();
$this->assertEquals(gzdeflate('hello world'), $data);
}
public function testFunZlibDeflateEmpty()
{
if (PHP_VERSION >= 7) $this->markTestSkipped('Not supported on PHP7 (empty string does not invoke filter)');
$deflate = StreamFilter\fun('zlib.deflate');
//$data = gzdeflate('');
$data = $deflate();
$this->assertEquals("\x03\x00", $data);
}
public function testFunZlibDeflateBig()
{
$deflate = StreamFilter\fun('zlib.deflate');
$n = 1000;
$expected = str_repeat('hello', $n);
$bytes = '';
for ($i = 0; $i < $n; ++$i) {
$bytes .= $deflate('hello');
}
$bytes .= $deflate();
$this->assertEquals($expected, gzinflate($bytes));
}
public function testFunZlibInflateHelloWorld()
{
$inflate = StreamFilter\fun('zlib.inflate');
$data = $inflate(gzdeflate('hello world')) . $inflate();
$this->assertEquals('hello world', $data);
}
public function testFunZlibInflateEmpty()
{
$inflate = StreamFilter\fun('zlib.inflate');
$data = $inflate("\x03\x00") . $inflate();
$this->assertEquals('', $data);
}
public function testFunZlibInflateBig()
{
if (defined('HHVM_VERSION')) $this->markTestSkipped('Not supported on HHVM (final chunk will not be emitted)');
$inflate = StreamFilter\fun('zlib.inflate');
$expected = str_repeat('hello', 10);
$bytes = gzdeflate($expected);
$ret = '';
foreach (str_split($bytes, 2) as $chunk) {
$ret .= $inflate($chunk);
}
$ret .= $inflate();
$this->assertEquals($expected, $ret);
}
}

View file

@ -379,9 +379,9 @@ class ClassLoader
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath.'\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
$length = $this->prefixLengthsPsr4[$first][$search];
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}

View file

@ -1,21 +1,56 @@
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: Composer
Upstream-Contact: Jordi Boggiano <j.boggiano@seld.be>
Source: https://github.com/composer/composer
Copyright (c) Nils Adermann, Jordi Boggiano
Files: *
Copyright: 2016, Nils Adermann <naderman@naderman.de>
2016, Jordi Boggiano <j.boggiano@seld.be>
License: Expat
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:
Files: src/Composer/Util/TlsHelper.php
Copyright: 2016, Nils Adermann <naderman@naderman.de>
2016, Jordi Boggiano <j.boggiano@seld.be>
2013, Evan Coury <me@evancoury.com>
License: Expat and BSD-2-Clause
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.
License: BSD-2-Clause
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
.
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
License: Expat
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.

View file

@ -6,6 +6,7 @@ $vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'App\\Application' => $baseDir . '/app/Application.php',
'App\\Console\\Kernel' => $baseDir . '/app/Console/Kernel.php',
'App\\Exceptions\\Handler' => $baseDir . '/app/Exceptions/Handler.php',
'App\\Http\\Controllers\\Auth\\ForgotPasswordController' => $baseDir . '/app/Http/Controllers/Auth/ForgotPasswordController.php',
@ -34,73 +35,7 @@ return array(
'App\\Setting' => $baseDir . '/app/Setting.php',
'App\\SettingGroup' => $baseDir . '/app/SettingGroup.php',
'App\\SettingUser' => $baseDir . '/app/SettingUser.php',
'App\\SupportedApps\\AirSonic' => $baseDir . '/app/SupportedApps/AirSonic.php',
'App\\SupportedApps\\Bazarr' => $baseDir . '/app/SupportedApps/Bazarr.php',
'App\\SupportedApps\\Bitwarden' => $baseDir . '/app/SupportedApps/Bitwarden.php',
'App\\SupportedApps\\BookStack' => $baseDir . '/app/SupportedApps/BookStack.php',
'App\\SupportedApps\\Booksonic' => $baseDir . '/app/SupportedApps/Booksonic.php',
'App\\SupportedApps\\Cardigann' => $baseDir . '/app/SupportedApps/Cardigann.php',
'App\\SupportedApps\\Contracts\\Applications' => $baseDir . '/app/SupportedApps/Contracts/Applications.php',
'App\\SupportedApps\\Contracts\\Livestats' => $baseDir . '/app/SupportedApps/Contracts/Livestats.php',
'App\\SupportedApps\\CouchPotato' => $baseDir . '/app/SupportedApps/CouchPotato.php',
'App\\SupportedApps\\Deluge' => $baseDir . '/app/SupportedApps/Deluge.php',
'App\\SupportedApps\\Dokuwiki' => $baseDir . '/app/SupportedApps/Dokuwiki.php',
'App\\SupportedApps\\Duplicati' => $baseDir . '/app/SupportedApps/Duplicati.php',
'App\\SupportedApps\\Emby' => $baseDir . '/app/SupportedApps/Emby.php',
'App\\SupportedApps\\Flood' => $baseDir . '/app/SupportedApps/Flood.php',
'App\\SupportedApps\\FreshRSS' => $baseDir . '/app/SupportedApps/FreshRSS.php',
'App\\SupportedApps\\Gitea' => $baseDir . '/app/SupportedApps/Gitea.php',
'App\\SupportedApps\\Glances' => $baseDir . '/app/SupportedApps/Glances.php',
'App\\SupportedApps\\Grafana' => $baseDir . '/app/SupportedApps/Grafana.php',
'App\\SupportedApps\\Graylog' => $baseDir . '/app/SupportedApps/Graylog.php',
'App\\SupportedApps\\Headphones' => $baseDir . '/app/SupportedApps/Headphones.php',
'App\\SupportedApps\\HomeAssistant' => $baseDir . '/app/SupportedApps/HomeAssistant.php',
'App\\SupportedApps\\Jackett' => $baseDir . '/app/SupportedApps/Jackett.php',
'App\\SupportedApps\\Jdownloader' => $baseDir . '/app/SupportedApps/Jdownloader.php',
'App\\SupportedApps\\Krusader' => $baseDir . '/app/SupportedApps/Krusader.php',
'App\\SupportedApps\\Lidarr' => $baseDir . '/app/SupportedApps/Lidarr.php',
'App\\SupportedApps\\Mailcow' => $baseDir . '/app/SupportedApps/Mailcow.php',
'App\\SupportedApps\\Mcmyadmin' => $baseDir . '/app/SupportedApps/Mcmyadmin.php',
'App\\SupportedApps\\Medusa' => $baseDir . '/app/SupportedApps/Medusa.php',
'App\\SupportedApps\\Monica' => $baseDir . '/app/SupportedApps/Monica.php',
'App\\SupportedApps\\MusicBrainz' => $baseDir . '/app/SupportedApps/MusicBrainz.php',
'App\\SupportedApps\\Mylar' => $baseDir . '/app/SupportedApps/Mylar.php',
'App\\SupportedApps\\Netdata' => $baseDir . '/app/SupportedApps/Netdata.php',
'App\\SupportedApps\\Nextcloud' => $baseDir . '/app/SupportedApps/Nextcloud.php',
'App\\SupportedApps\\NowShowing' => $baseDir . '/app/SupportedApps/NowShowing.php',
'App\\SupportedApps\\Nzbget' => $baseDir . '/app/SupportedApps/Nzbget.php',
'App\\SupportedApps\\Nzbhydra' => $baseDir . '/app/SupportedApps/Nzbhydra.php',
'App\\SupportedApps\\Ombi' => $baseDir . '/app/SupportedApps/Ombi.php',
'App\\SupportedApps\\OpenMediaVault' => $baseDir . '/app/SupportedApps/OpenMediaVault.php',
'App\\SupportedApps\\Openhab' => $baseDir . '/app/SupportedApps/Openhab.php',
'App\\SupportedApps\\Opnsense' => $baseDir . '/app/SupportedApps/Opnsense.php',
'App\\SupportedApps\\Pfsense' => $baseDir . '/app/SupportedApps/Pfsense.php',
'App\\SupportedApps\\Pihole' => $baseDir . '/app/SupportedApps/Pihole.php',
'App\\SupportedApps\\Plex' => $baseDir . '/app/SupportedApps/Plex.php',
'App\\SupportedApps\\Plexpy' => $baseDir . '/app/SupportedApps/Plexpy.php',
'App\\SupportedApps\\Plexrequests' => $baseDir . '/app/SupportedApps/Plexrequests.php',
'App\\SupportedApps\\Portainer' => $baseDir . '/app/SupportedApps/Portainer.php',
'App\\SupportedApps\\Proxmox' => $baseDir . '/app/SupportedApps/Proxmox.php',
'App\\SupportedApps\\Radarr' => $baseDir . '/app/SupportedApps/Radarr.php',
'App\\SupportedApps\\Rancher' => $baseDir . '/app/SupportedApps/Rancher.php',
'App\\SupportedApps\\Runeaudio' => $baseDir . '/app/SupportedApps/Runeaudio.php',
'App\\SupportedApps\\Sabnzbd' => $baseDir . '/app/SupportedApps/Sabnzbd.php',
'App\\SupportedApps\\Sickrage' => $baseDir . '/app/SupportedApps/Sickrage.php',
'App\\SupportedApps\\Sonarr' => $baseDir . '/app/SupportedApps/Sonarr.php',
'App\\SupportedApps\\Syncthing' => $baseDir . '/app/SupportedApps/Syncthing.php',
'App\\SupportedApps\\TVheadend' => $baseDir . '/app/SupportedApps/TVheadend.php',
'App\\SupportedApps\\Tautulli' => $baseDir . '/app/SupportedApps/Tautulli.php',
'App\\SupportedApps\\Traefik' => $baseDir . '/app/SupportedApps/Traefik.php',
'App\\SupportedApps\\Transmission' => $baseDir . '/app/SupportedApps/Transmission.php',
'App\\SupportedApps\\Ttrss' => $baseDir . '/app/SupportedApps/Ttrss.php',
'App\\SupportedApps\\Unifi' => $baseDir . '/app/SupportedApps/Unifi.php',
'App\\SupportedApps\\Unraid' => $baseDir . '/app/SupportedApps/Unraid.php',
'App\\SupportedApps\\Virtualmin' => $baseDir . '/app/SupportedApps/Virtualmin.php',
'App\\SupportedApps\\Watcher3' => $baseDir . '/app/SupportedApps/Watcher3.php',
'App\\SupportedApps\\WebTools' => $baseDir . '/app/SupportedApps/WebTools.php',
'App\\SupportedApps\\Webmin' => $baseDir . '/app/SupportedApps/Webmin.php',
'App\\SupportedApps\\pyLoad' => $baseDir . '/app/SupportedApps/pyLoad.php',
'App\\SupportedApps\\ruTorrent' => $baseDir . '/app/SupportedApps/ruTorrent.php',
'App\\SupportedApps' => $baseDir . '/app/SupportedApps.php',
'App\\User' => $baseDir . '/app/User.php',
'Carbon\\Carbon' => $vendorDir . '/nesbot/carbon/src/Carbon/Carbon.php',
'Carbon\\CarbonInterval' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonInterval.php',
@ -108,6 +43,7 @@ return array(
'Carbon\\Exceptions\\InvalidDateException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/InvalidDateException.php',
'Carbon\\Laravel\\ServiceProvider' => $vendorDir . '/nesbot/carbon/src/Carbon/Laravel/ServiceProvider.php',
'Carbon\\Translator' => $vendorDir . '/nesbot/carbon/src/Carbon/Translator.php',
'Clue\\StreamFilter\\CallbackFilter' => $vendorDir . '/clue/stream-filter/src/CallbackFilter.php',
'Collective\\Html\\Componentable' => $vendorDir . '/laravelcollective/html/src/Componentable.php',
'Collective\\Html\\Eloquent\\FormAccessible' => $vendorDir . '/laravelcollective/html/src/Eloquent/FormAccessible.php',
'Collective\\Html\\FormBuilder' => $vendorDir . '/laravelcollective/html/src/FormBuilder.php',
@ -675,6 +611,114 @@ return array(
'File_Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php',
'File_Iterator_Facade' => $vendorDir . '/phpunit/php-file-iterator/src/Facade.php',
'File_Iterator_Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php',
'Github\\Api\\AbstractApi' => $vendorDir . '/knplabs/github-api/lib/Github/Api/AbstractApi.php',
'Github\\Api\\AcceptHeaderTrait' => $vendorDir . '/knplabs/github-api/lib/Github/Api/AcceptHeaderTrait.php',
'Github\\Api\\ApiInterface' => $vendorDir . '/knplabs/github-api/lib/Github/Api/ApiInterface.php',
'Github\\Api\\Apps' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Apps.php',
'Github\\Api\\Authorizations' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Authorizations.php',
'Github\\Api\\CurrentUser' => $vendorDir . '/knplabs/github-api/lib/Github/Api/CurrentUser.php',
'Github\\Api\\CurrentUser\\Emails' => $vendorDir . '/knplabs/github-api/lib/Github/Api/CurrentUser/Emails.php',
'Github\\Api\\CurrentUser\\Followers' => $vendorDir . '/knplabs/github-api/lib/Github/Api/CurrentUser/Followers.php',
'Github\\Api\\CurrentUser\\Memberships' => $vendorDir . '/knplabs/github-api/lib/Github/Api/CurrentUser/Memberships.php',
'Github\\Api\\CurrentUser\\Notifications' => $vendorDir . '/knplabs/github-api/lib/Github/Api/CurrentUser/Notifications.php',
'Github\\Api\\CurrentUser\\PublicKeys' => $vendorDir . '/knplabs/github-api/lib/Github/Api/CurrentUser/PublicKeys.php',
'Github\\Api\\CurrentUser\\Starring' => $vendorDir . '/knplabs/github-api/lib/Github/Api/CurrentUser/Starring.php',
'Github\\Api\\CurrentUser\\Watchers' => $vendorDir . '/knplabs/github-api/lib/Github/Api/CurrentUser/Watchers.php',
'Github\\Api\\Deployment' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Deployment.php',
'Github\\Api\\Enterprise' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Enterprise.php',
'Github\\Api\\Enterprise\\License' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Enterprise/License.php',
'Github\\Api\\Enterprise\\ManagementConsole' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Enterprise/ManagementConsole.php',
'Github\\Api\\Enterprise\\Stats' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Enterprise/Stats.php',
'Github\\Api\\Enterprise\\UserAdmin' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Enterprise/UserAdmin.php',
'Github\\Api\\Gist\\Comments' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Gist/Comments.php',
'Github\\Api\\Gists' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Gists.php',
'Github\\Api\\GitData' => $vendorDir . '/knplabs/github-api/lib/Github/Api/GitData.php',
'Github\\Api\\GitData\\Blobs' => $vendorDir . '/knplabs/github-api/lib/Github/Api/GitData/Blobs.php',
'Github\\Api\\GitData\\Commits' => $vendorDir . '/knplabs/github-api/lib/Github/Api/GitData/Commits.php',
'Github\\Api\\GitData\\References' => $vendorDir . '/knplabs/github-api/lib/Github/Api/GitData/References.php',
'Github\\Api\\GitData\\Tags' => $vendorDir . '/knplabs/github-api/lib/Github/Api/GitData/Tags.php',
'Github\\Api\\GitData\\Trees' => $vendorDir . '/knplabs/github-api/lib/Github/Api/GitData/Trees.php',
'Github\\Api\\GraphQL' => $vendorDir . '/knplabs/github-api/lib/Github/Api/GraphQL.php',
'Github\\Api\\Integrations' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Integrations.php',
'Github\\Api\\Issue' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Issue.php',
'Github\\Api\\Issue\\Assignees' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Issue/Assignees.php',
'Github\\Api\\Issue\\Comments' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Issue/Comments.php',
'Github\\Api\\Issue\\Events' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Issue/Events.php',
'Github\\Api\\Issue\\Labels' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Issue/Labels.php',
'Github\\Api\\Issue\\Milestones' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Issue/Milestones.php',
'Github\\Api\\Issue\\Timeline' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Issue/Timeline.php',
'Github\\Api\\Markdown' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Markdown.php',
'Github\\Api\\Meta' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Meta.php',
'Github\\Api\\Miscellaneous\\CodeOfConduct' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Miscellaneous/CodeOfConduct.php',
'Github\\Api\\Miscellaneous\\Emojis' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Miscellaneous/Emojis.php',
'Github\\Api\\Miscellaneous\\Gitignore' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Miscellaneous/Gitignore.php',
'Github\\Api\\Notification' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Notification.php',
'Github\\Api\\Organization' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Organization.php',
'Github\\Api\\Organization\\Hooks' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Organization/Hooks.php',
'Github\\Api\\Organization\\Members' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Organization/Members.php',
'Github\\Api\\Organization\\Projects' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Organization/Projects.php',
'Github\\Api\\Organization\\Teams' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Organization/Teams.php',
'Github\\Api\\Project\\AbstractProjectApi' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Project/AbstractProjectApi.php',
'Github\\Api\\Project\\Cards' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Project/Cards.php',
'Github\\Api\\Project\\Columns' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Project/Columns.php',
'Github\\Api\\PullRequest' => $vendorDir . '/knplabs/github-api/lib/Github/Api/PullRequest.php',
'Github\\Api\\PullRequest\\Comments' => $vendorDir . '/knplabs/github-api/lib/Github/Api/PullRequest/Comments.php',
'Github\\Api\\PullRequest\\Review' => $vendorDir . '/knplabs/github-api/lib/Github/Api/PullRequest/Review.php',
'Github\\Api\\PullRequest\\ReviewRequest' => $vendorDir . '/knplabs/github-api/lib/Github/Api/PullRequest/ReviewRequest.php',
'Github\\Api\\RateLimit' => $vendorDir . '/knplabs/github-api/lib/Github/Api/RateLimit.php',
'Github\\Api\\Repo' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repo.php',
'Github\\Api\\Repository\\Assets' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Assets.php',
'Github\\Api\\Repository\\Collaborators' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Collaborators.php',
'Github\\Api\\Repository\\Comments' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Comments.php',
'Github\\Api\\Repository\\Commits' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Commits.php',
'Github\\Api\\Repository\\Contents' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Contents.php',
'Github\\Api\\Repository\\DeployKeys' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/DeployKeys.php',
'Github\\Api\\Repository\\Downloads' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Downloads.php',
'Github\\Api\\Repository\\Forks' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Forks.php',
'Github\\Api\\Repository\\Hooks' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Hooks.php',
'Github\\Api\\Repository\\Labels' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Labels.php',
'Github\\Api\\Repository\\Projects' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Projects.php',
'Github\\Api\\Repository\\Protection' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Protection.php',
'Github\\Api\\Repository\\Releases' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Releases.php',
'Github\\Api\\Repository\\Stargazers' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Stargazers.php',
'Github\\Api\\Repository\\Statuses' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Statuses.php',
'Github\\Api\\Repository\\Traffic' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Repository/Traffic.php',
'Github\\Api\\Search' => $vendorDir . '/knplabs/github-api/lib/Github/Api/Search.php',
'Github\\Api\\User' => $vendorDir . '/knplabs/github-api/lib/Github/Api/User.php',
'Github\\Client' => $vendorDir . '/knplabs/github-api/lib/Github/Client.php',
'Github\\Exception\\ApiLimitExceedException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/ApiLimitExceedException.php',
'Github\\Exception\\BadMethodCallException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/BadMethodCallException.php',
'Github\\Exception\\ErrorException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/ErrorException.php',
'Github\\Exception\\ExceptionInterface' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/ExceptionInterface.php',
'Github\\Exception\\InvalidArgumentException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/InvalidArgumentException.php',
'Github\\Exception\\MissingArgumentException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/MissingArgumentException.php',
'Github\\Exception\\RuntimeException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/RuntimeException.php',
'Github\\Exception\\TwoFactorAuthenticationRequiredException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/TwoFactorAuthenticationRequiredException.php',
'Github\\Exception\\ValidationFailedException' => $vendorDir . '/knplabs/github-api/lib/Github/Exception/ValidationFailedException.php',
'Github\\HttpClient\\Builder' => $vendorDir . '/knplabs/github-api/lib/Github/HttpClient/Builder.php',
'Github\\HttpClient\\Message\\ResponseMediator' => $vendorDir . '/knplabs/github-api/lib/Github/HttpClient/Message/ResponseMediator.php',
'Github\\HttpClient\\Plugin\\Authentication' => $vendorDir . '/knplabs/github-api/lib/Github/HttpClient/Plugin/Authentication.php',
'Github\\HttpClient\\Plugin\\GithubExceptionThrower' => $vendorDir . '/knplabs/github-api/lib/Github/HttpClient/Plugin/GithubExceptionThrower.php',
'Github\\HttpClient\\Plugin\\History' => $vendorDir . '/knplabs/github-api/lib/Github/HttpClient/Plugin/History.php',
'Github\\HttpClient\\Plugin\\PathPrepend' => $vendorDir . '/knplabs/github-api/lib/Github/HttpClient/Plugin/PathPrepend.php',
'Github\\ResultPager' => $vendorDir . '/knplabs/github-api/lib/Github/ResultPager.php',
'Github\\ResultPagerInterface' => $vendorDir . '/knplabs/github-api/lib/Github/ResultPagerInterface.php',
'GrahamCampbell\\CachePlugin\\CachePlugin' => $vendorDir . '/graham-campbell/cache-plugin/src/CachePlugin.php',
'GrahamCampbell\\GitHub\\Authenticators\\AbstractAuthenticator' => $vendorDir . '/graham-campbell/github/src/Authenticators/AbstractAuthenticator.php',
'GrahamCampbell\\GitHub\\Authenticators\\ApplicationAuthenticator' => $vendorDir . '/graham-campbell/github/src/Authenticators/ApplicationAuthenticator.php',
'GrahamCampbell\\GitHub\\Authenticators\\AuthenticatorFactory' => $vendorDir . '/graham-campbell/github/src/Authenticators/AuthenticatorFactory.php',
'GrahamCampbell\\GitHub\\Authenticators\\AuthenticatorInterface' => $vendorDir . '/graham-campbell/github/src/Authenticators/AuthenticatorInterface.php',
'GrahamCampbell\\GitHub\\Authenticators\\JwtAuthenticator' => $vendorDir . '/graham-campbell/github/src/Authenticators/JwtAuthenticator.php',
'GrahamCampbell\\GitHub\\Authenticators\\PasswordAuthenticator' => $vendorDir . '/graham-campbell/github/src/Authenticators/PasswordAuthenticator.php',
'GrahamCampbell\\GitHub\\Authenticators\\TokenAuthenticator' => $vendorDir . '/graham-campbell/github/src/Authenticators/TokenAuthenticator.php',
'GrahamCampbell\\GitHub\\Facades\\GitHub' => $vendorDir . '/graham-campbell/github/src/Facades/GitHub.php',
'GrahamCampbell\\GitHub\\GitHubFactory' => $vendorDir . '/graham-campbell/github/src/GitHubFactory.php',
'GrahamCampbell\\GitHub\\GitHubManager' => $vendorDir . '/graham-campbell/github/src/GitHubManager.php',
'GrahamCampbell\\GitHub\\GitHubServiceProvider' => $vendorDir . '/graham-campbell/github/src/GitHubServiceProvider.php',
'GrahamCampbell\\GitHub\\Http\\ClientBuilder' => $vendorDir . '/graham-campbell/github/src/Http/ClientBuilder.php',
'GrahamCampbell\\Manager\\AbstractManager' => $vendorDir . '/graham-campbell/manager/src/AbstractManager.php',
'GrahamCampbell\\Manager\\ConnectorInterface' => $vendorDir . '/graham-campbell/manager/src/ConnectorInterface.php',
'GrahamCampbell\\Manager\\ManagerInterface' => $vendorDir . '/graham-campbell/manager/src/ManagerInterface.php',
'GuzzleHttp\\Client' => $vendorDir . '/guzzlehttp/guzzle/src/Client.php',
'GuzzleHttp\\ClientInterface' => $vendorDir . '/guzzlehttp/guzzle/src/ClientInterface.php',
'GuzzleHttp\\Cookie\\CookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php',
@ -811,6 +855,140 @@ return array(
'Hamcrest\\Type\\IsString' => $vendorDir . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsString.php',
'Hamcrest\\Util' => $vendorDir . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Util.php',
'Hamcrest\\Xml\\HasXPath' => $vendorDir . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Xml/HasXPath.php',
'Http\\Adapter\\Guzzle6\\Client' => $vendorDir . '/php-http/guzzle6-adapter/src/Client.php',
'Http\\Adapter\\Guzzle6\\Promise' => $vendorDir . '/php-http/guzzle6-adapter/src/Promise.php',
'Http\\Client\\Common\\BatchClient' => $vendorDir . '/php-http/client-common/src/BatchClient.php',
'Http\\Client\\Common\\BatchResult' => $vendorDir . '/php-http/client-common/src/BatchResult.php',
'Http\\Client\\Common\\Deferred' => $vendorDir . '/php-http/client-common/src/Deferred.php',
'Http\\Client\\Common\\EmulatedHttpAsyncClient' => $vendorDir . '/php-http/client-common/src/EmulatedHttpAsyncClient.php',
'Http\\Client\\Common\\EmulatedHttpClient' => $vendorDir . '/php-http/client-common/src/EmulatedHttpClient.php',
'Http\\Client\\Common\\Exception\\BatchException' => $vendorDir . '/php-http/client-common/src/Exception/BatchException.php',
'Http\\Client\\Common\\Exception\\CircularRedirectionException' => $vendorDir . '/php-http/client-common/src/Exception/CircularRedirectionException.php',
'Http\\Client\\Common\\Exception\\ClientErrorException' => $vendorDir . '/php-http/client-common/src/Exception/ClientErrorException.php',
'Http\\Client\\Common\\Exception\\HttpClientNotFoundException' => $vendorDir . '/php-http/client-common/src/Exception/HttpClientNotFoundException.php',
'Http\\Client\\Common\\Exception\\LoopException' => $vendorDir . '/php-http/client-common/src/Exception/LoopException.php',
'Http\\Client\\Common\\Exception\\MultipleRedirectionException' => $vendorDir . '/php-http/client-common/src/Exception/MultipleRedirectionException.php',
'Http\\Client\\Common\\Exception\\ServerErrorException' => $vendorDir . '/php-http/client-common/src/Exception/ServerErrorException.php',
'Http\\Client\\Common\\FlexibleHttpClient' => $vendorDir . '/php-http/client-common/src/FlexibleHttpClient.php',
'Http\\Client\\Common\\HttpAsyncClientDecorator' => $vendorDir . '/php-http/client-common/src/HttpAsyncClientDecorator.php',
'Http\\Client\\Common\\HttpAsyncClientEmulator' => $vendorDir . '/php-http/client-common/src/HttpAsyncClientEmulator.php',
'Http\\Client\\Common\\HttpClientDecorator' => $vendorDir . '/php-http/client-common/src/HttpClientDecorator.php',
'Http\\Client\\Common\\HttpClientEmulator' => $vendorDir . '/php-http/client-common/src/HttpClientEmulator.php',
'Http\\Client\\Common\\HttpClientPool' => $vendorDir . '/php-http/client-common/src/HttpClientPool.php',
'Http\\Client\\Common\\HttpClientPoolItem' => $vendorDir . '/php-http/client-common/src/HttpClientPoolItem.php',
'Http\\Client\\Common\\HttpClientPool\\LeastUsedClientPool' => $vendorDir . '/php-http/client-common/src/HttpClientPool/LeastUsedClientPool.php',
'Http\\Client\\Common\\HttpClientPool\\RandomClientPool' => $vendorDir . '/php-http/client-common/src/HttpClientPool/RandomClientPool.php',
'Http\\Client\\Common\\HttpClientPool\\RoundRobinClientPool' => $vendorDir . '/php-http/client-common/src/HttpClientPool/RoundRobinClientPool.php',
'Http\\Client\\Common\\HttpClientRouter' => $vendorDir . '/php-http/client-common/src/HttpClientRouter.php',
'Http\\Client\\Common\\HttpMethodsClient' => $vendorDir . '/php-http/client-common/src/HttpMethodsClient.php',
'Http\\Client\\Common\\Plugin' => $vendorDir . '/php-http/client-common/src/Plugin.php',
'Http\\Client\\Common\\PluginClient' => $vendorDir . '/php-http/client-common/src/PluginClient.php',
'Http\\Client\\Common\\PluginClientFactory' => $vendorDir . '/php-http/client-common/src/PluginClientFactory.php',
'Http\\Client\\Common\\Plugin\\AddHostPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/AddHostPlugin.php',
'Http\\Client\\Common\\Plugin\\AddPathPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/AddPathPlugin.php',
'Http\\Client\\Common\\Plugin\\AuthenticationPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/AuthenticationPlugin.php',
'Http\\Client\\Common\\Plugin\\BaseUriPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/BaseUriPlugin.php',
'Http\\Client\\Common\\Plugin\\CachePlugin' => $vendorDir . '/php-http/cache-plugin/src/CachePlugin.php',
'Http\\Client\\Common\\Plugin\\Cache\\Generator\\CacheKeyGenerator' => $vendorDir . '/php-http/cache-plugin/src/Cache/Generator/CacheKeyGenerator.php',
'Http\\Client\\Common\\Plugin\\Cache\\Generator\\HeaderCacheKeyGenerator' => $vendorDir . '/php-http/cache-plugin/src/Cache/Generator/HeaderCacheKeyGenerator.php',
'Http\\Client\\Common\\Plugin\\Cache\\Generator\\SimpleGenerator' => $vendorDir . '/php-http/cache-plugin/src/Cache/Generator/SimpleGenerator.php',
'Http\\Client\\Common\\Plugin\\ContentLengthPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/ContentLengthPlugin.php',
'Http\\Client\\Common\\Plugin\\ContentTypePlugin' => $vendorDir . '/php-http/client-common/src/Plugin/ContentTypePlugin.php',
'Http\\Client\\Common\\Plugin\\CookiePlugin' => $vendorDir . '/php-http/client-common/src/Plugin/CookiePlugin.php',
'Http\\Client\\Common\\Plugin\\DecoderPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/DecoderPlugin.php',
'Http\\Client\\Common\\Plugin\\ErrorPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/ErrorPlugin.php',
'Http\\Client\\Common\\Plugin\\Exception\\RewindStreamException' => $vendorDir . '/php-http/cache-plugin/src/Exception/RewindStreamException.php',
'Http\\Client\\Common\\Plugin\\HeaderAppendPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/HeaderAppendPlugin.php',
'Http\\Client\\Common\\Plugin\\HeaderDefaultsPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/HeaderDefaultsPlugin.php',
'Http\\Client\\Common\\Plugin\\HeaderRemovePlugin' => $vendorDir . '/php-http/client-common/src/Plugin/HeaderRemovePlugin.php',
'Http\\Client\\Common\\Plugin\\HeaderSetPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/HeaderSetPlugin.php',
'Http\\Client\\Common\\Plugin\\HistoryPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/HistoryPlugin.php',
'Http\\Client\\Common\\Plugin\\Journal' => $vendorDir . '/php-http/client-common/src/Plugin/Journal.php',
'Http\\Client\\Common\\Plugin\\QueryDefaultsPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/QueryDefaultsPlugin.php',
'Http\\Client\\Common\\Plugin\\RedirectPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/RedirectPlugin.php',
'Http\\Client\\Common\\Plugin\\RequestMatcherPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/RequestMatcherPlugin.php',
'Http\\Client\\Common\\Plugin\\RetryPlugin' => $vendorDir . '/php-http/client-common/src/Plugin/RetryPlugin.php',
'Http\\Client\\Exception' => $vendorDir . '/php-http/httplug/src/Exception.php',
'Http\\Client\\Exception\\HttpException' => $vendorDir . '/php-http/httplug/src/Exception/HttpException.php',
'Http\\Client\\Exception\\NetworkException' => $vendorDir . '/php-http/httplug/src/Exception/NetworkException.php',
'Http\\Client\\Exception\\RequestException' => $vendorDir . '/php-http/httplug/src/Exception/RequestException.php',
'Http\\Client\\Exception\\TransferException' => $vendorDir . '/php-http/httplug/src/Exception/TransferException.php',
'Http\\Client\\HttpAsyncClient' => $vendorDir . '/php-http/httplug/src/HttpAsyncClient.php',
'Http\\Client\\HttpClient' => $vendorDir . '/php-http/httplug/src/HttpClient.php',
'Http\\Client\\Promise\\HttpFulfilledPromise' => $vendorDir . '/php-http/httplug/src/Promise/HttpFulfilledPromise.php',
'Http\\Client\\Promise\\HttpRejectedPromise' => $vendorDir . '/php-http/httplug/src/Promise/HttpRejectedPromise.php',
'Http\\Discovery\\ClassDiscovery' => $vendorDir . '/php-http/discovery/src/ClassDiscovery.php',
'Http\\Discovery\\Exception' => $vendorDir . '/php-http/discovery/src/Exception.php',
'Http\\Discovery\\Exception\\ClassInstantiationFailedException' => $vendorDir . '/php-http/discovery/src/Exception/ClassInstantiationFailedException.php',
'Http\\Discovery\\Exception\\DiscoveryFailedException' => $vendorDir . '/php-http/discovery/src/Exception/DiscoveryFailedException.php',
'Http\\Discovery\\Exception\\NotFoundException' => $vendorDir . '/php-http/discovery/src/Exception/NotFoundException.php',
'Http\\Discovery\\Exception\\PuliUnavailableException' => $vendorDir . '/php-http/discovery/src/Exception/PuliUnavailableException.php',
'Http\\Discovery\\Exception\\StrategyUnavailableException' => $vendorDir . '/php-http/discovery/src/Exception/StrategyUnavailableException.php',
'Http\\Discovery\\HttpAsyncClientDiscovery' => $vendorDir . '/php-http/discovery/src/HttpAsyncClientDiscovery.php',
'Http\\Discovery\\HttpClientDiscovery' => $vendorDir . '/php-http/discovery/src/HttpClientDiscovery.php',
'Http\\Discovery\\MessageFactoryDiscovery' => $vendorDir . '/php-http/discovery/src/MessageFactoryDiscovery.php',
'Http\\Discovery\\NotFoundException' => $vendorDir . '/php-http/discovery/src/NotFoundException.php',
'Http\\Discovery\\Strategy\\CommonClassesStrategy' => $vendorDir . '/php-http/discovery/src/Strategy/CommonClassesStrategy.php',
'Http\\Discovery\\Strategy\\DiscoveryStrategy' => $vendorDir . '/php-http/discovery/src/Strategy/DiscoveryStrategy.php',
'Http\\Discovery\\Strategy\\MockClientStrategy' => $vendorDir . '/php-http/discovery/src/Strategy/MockClientStrategy.php',
'Http\\Discovery\\Strategy\\PuliBetaStrategy' => $vendorDir . '/php-http/discovery/src/Strategy/PuliBetaStrategy.php',
'Http\\Discovery\\StreamFactoryDiscovery' => $vendorDir . '/php-http/discovery/src/StreamFactoryDiscovery.php',
'Http\\Discovery\\UriFactoryDiscovery' => $vendorDir . '/php-http/discovery/src/UriFactoryDiscovery.php',
'Http\\Message\\Authentication' => $vendorDir . '/php-http/message/src/Authentication.php',
'Http\\Message\\Authentication\\AutoBasicAuth' => $vendorDir . '/php-http/message/src/Authentication/AutoBasicAuth.php',
'Http\\Message\\Authentication\\BasicAuth' => $vendorDir . '/php-http/message/src/Authentication/BasicAuth.php',
'Http\\Message\\Authentication\\Bearer' => $vendorDir . '/php-http/message/src/Authentication/Bearer.php',
'Http\\Message\\Authentication\\Chain' => $vendorDir . '/php-http/message/src/Authentication/Chain.php',
'Http\\Message\\Authentication\\Matching' => $vendorDir . '/php-http/message/src/Authentication/Matching.php',
'Http\\Message\\Authentication\\QueryParam' => $vendorDir . '/php-http/message/src/Authentication/QueryParam.php',
'Http\\Message\\Authentication\\RequestConditional' => $vendorDir . '/php-http/message/src/Authentication/RequestConditional.php',
'Http\\Message\\Authentication\\Wsse' => $vendorDir . '/php-http/message/src/Authentication/Wsse.php',
'Http\\Message\\Builder\\ResponseBuilder' => $vendorDir . '/php-http/message/src/Builder/ResponseBuilder.php',
'Http\\Message\\Cookie' => $vendorDir . '/php-http/message/src/Cookie.php',
'Http\\Message\\CookieJar' => $vendorDir . '/php-http/message/src/CookieJar.php',
'Http\\Message\\CookieUtil' => $vendorDir . '/php-http/message/src/CookieUtil.php',
'Http\\Message\\Decorator\\MessageDecorator' => $vendorDir . '/php-http/message/src/Decorator/MessageDecorator.php',
'Http\\Message\\Decorator\\RequestDecorator' => $vendorDir . '/php-http/message/src/Decorator/RequestDecorator.php',
'Http\\Message\\Decorator\\ResponseDecorator' => $vendorDir . '/php-http/message/src/Decorator/ResponseDecorator.php',
'Http\\Message\\Decorator\\StreamDecorator' => $vendorDir . '/php-http/message/src/Decorator/StreamDecorator.php',
'Http\\Message\\Encoding\\ChunkStream' => $vendorDir . '/php-http/message/src/Encoding/ChunkStream.php',
'Http\\Message\\Encoding\\CompressStream' => $vendorDir . '/php-http/message/src/Encoding/CompressStream.php',
'Http\\Message\\Encoding\\DechunkStream' => $vendorDir . '/php-http/message/src/Encoding/DechunkStream.php',
'Http\\Message\\Encoding\\DecompressStream' => $vendorDir . '/php-http/message/src/Encoding/DecompressStream.php',
'Http\\Message\\Encoding\\DeflateStream' => $vendorDir . '/php-http/message/src/Encoding/DeflateStream.php',
'Http\\Message\\Encoding\\Filter\\Chunk' => $vendorDir . '/php-http/message/src/Encoding/Filter/Chunk.php',
'Http\\Message\\Encoding\\FilteredStream' => $vendorDir . '/php-http/message/src/Encoding/FilteredStream.php',
'Http\\Message\\Encoding\\GzipDecodeStream' => $vendorDir . '/php-http/message/src/Encoding/GzipDecodeStream.php',
'Http\\Message\\Encoding\\GzipEncodeStream' => $vendorDir . '/php-http/message/src/Encoding/GzipEncodeStream.php',
'Http\\Message\\Encoding\\InflateStream' => $vendorDir . '/php-http/message/src/Encoding/InflateStream.php',
'Http\\Message\\Exception' => $vendorDir . '/php-http/message/src/Exception.php',
'Http\\Message\\Exception\\UnexpectedValueException' => $vendorDir . '/php-http/message/src/Exception/UnexpectedValueException.php',
'Http\\Message\\Formatter' => $vendorDir . '/php-http/message/src/Formatter.php',
'Http\\Message\\Formatter\\CurlCommandFormatter' => $vendorDir . '/php-http/message/src/Formatter/CurlCommandFormatter.php',
'Http\\Message\\Formatter\\FullHttpMessageFormatter' => $vendorDir . '/php-http/message/src/Formatter/FullHttpMessageFormatter.php',
'Http\\Message\\Formatter\\SimpleFormatter' => $vendorDir . '/php-http/message/src/Formatter/SimpleFormatter.php',
'Http\\Message\\MessageFactory' => $vendorDir . '/php-http/message-factory/src/MessageFactory.php',
'Http\\Message\\MessageFactory\\DiactorosMessageFactory' => $vendorDir . '/php-http/message/src/MessageFactory/DiactorosMessageFactory.php',
'Http\\Message\\MessageFactory\\GuzzleMessageFactory' => $vendorDir . '/php-http/message/src/MessageFactory/GuzzleMessageFactory.php',
'Http\\Message\\MessageFactory\\SlimMessageFactory' => $vendorDir . '/php-http/message/src/MessageFactory/SlimMessageFactory.php',
'Http\\Message\\RequestFactory' => $vendorDir . '/php-http/message-factory/src/RequestFactory.php',
'Http\\Message\\RequestMatcher' => $vendorDir . '/php-http/message/src/RequestMatcher.php',
'Http\\Message\\RequestMatcher\\CallbackRequestMatcher' => $vendorDir . '/php-http/message/src/RequestMatcher/CallbackRequestMatcher.php',
'Http\\Message\\RequestMatcher\\RegexRequestMatcher' => $vendorDir . '/php-http/message/src/RequestMatcher/RegexRequestMatcher.php',
'Http\\Message\\RequestMatcher\\RequestMatcher' => $vendorDir . '/php-http/message/src/RequestMatcher/RequestMatcher.php',
'Http\\Message\\ResponseFactory' => $vendorDir . '/php-http/message-factory/src/ResponseFactory.php',
'Http\\Message\\StreamFactory' => $vendorDir . '/php-http/message-factory/src/StreamFactory.php',
'Http\\Message\\StreamFactory\\DiactorosStreamFactory' => $vendorDir . '/php-http/message/src/StreamFactory/DiactorosStreamFactory.php',
'Http\\Message\\StreamFactory\\GuzzleStreamFactory' => $vendorDir . '/php-http/message/src/StreamFactory/GuzzleStreamFactory.php',
'Http\\Message\\StreamFactory\\SlimStreamFactory' => $vendorDir . '/php-http/message/src/StreamFactory/SlimStreamFactory.php',
'Http\\Message\\Stream\\BufferedStream' => $vendorDir . '/php-http/message/src/Stream/BufferedStream.php',
'Http\\Message\\UriFactory' => $vendorDir . '/php-http/message-factory/src/UriFactory.php',
'Http\\Message\\UriFactory\\DiactorosUriFactory' => $vendorDir . '/php-http/message/src/UriFactory/DiactorosUriFactory.php',
'Http\\Message\\UriFactory\\GuzzleUriFactory' => $vendorDir . '/php-http/message/src/UriFactory/GuzzleUriFactory.php',
'Http\\Message\\UriFactory\\SlimUriFactory' => $vendorDir . '/php-http/message/src/UriFactory/SlimUriFactory.php',
'Http\\Promise\\FulfilledPromise' => $vendorDir . '/php-http/promise/src/FulfilledPromise.php',
'Http\\Promise\\Promise' => $vendorDir . '/php-http/promise/src/Promise.php',
'Http\\Promise\\RejectedPromise' => $vendorDir . '/php-http/promise/src/RejectedPromise.php',
'Illuminate\\Auth\\Access\\AuthorizationException' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Access/AuthorizationException.php',
'Illuminate\\Auth\\Access\\Gate' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Access/Gate.php',
'Illuminate\\Auth\\Access\\HandlesAuthorization' => $vendorDir . '/laravel/framework/src/Illuminate/Auth/Access/HandlesAuthorization.php',
@ -2596,6 +2774,10 @@ return array(
'Prophecy\\Prophet' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophet.php',
'Prophecy\\Util\\ExportUtil' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php',
'Prophecy\\Util\\StringUtil' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Util/StringUtil.php',
'Psr\\Cache\\CacheException' => $vendorDir . '/psr/cache/src/CacheException.php',
'Psr\\Cache\\CacheItemInterface' => $vendorDir . '/psr/cache/src/CacheItemInterface.php',
'Psr\\Cache\\CacheItemPoolInterface' => $vendorDir . '/psr/cache/src/CacheItemPoolInterface.php',
'Psr\\Cache\\InvalidArgumentException' => $vendorDir . '/psr/cache/src/InvalidArgumentException.php',
'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php',
'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php',
'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php',
@ -3277,6 +3459,18 @@ return array(
'Symfony\\Component\\HttpKernel\\RebootableInterface' => $vendorDir . '/symfony/http-kernel/RebootableInterface.php',
'Symfony\\Component\\HttpKernel\\TerminableInterface' => $vendorDir . '/symfony/http-kernel/TerminableInterface.php',
'Symfony\\Component\\HttpKernel\\UriSigner' => $vendorDir . '/symfony/http-kernel/UriSigner.php',
'Symfony\\Component\\OptionsResolver\\Debug\\OptionsResolverIntrospector' => $vendorDir . '/symfony/options-resolver/Debug/OptionsResolverIntrospector.php',
'Symfony\\Component\\OptionsResolver\\Exception\\AccessException' => $vendorDir . '/symfony/options-resolver/Exception/AccessException.php',
'Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/options-resolver/Exception/ExceptionInterface.php',
'Symfony\\Component\\OptionsResolver\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/options-resolver/Exception/InvalidArgumentException.php',
'Symfony\\Component\\OptionsResolver\\Exception\\InvalidOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/InvalidOptionsException.php',
'Symfony\\Component\\OptionsResolver\\Exception\\MissingOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/MissingOptionsException.php',
'Symfony\\Component\\OptionsResolver\\Exception\\NoConfigurationException' => $vendorDir . '/symfony/options-resolver/Exception/NoConfigurationException.php',
'Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException' => $vendorDir . '/symfony/options-resolver/Exception/NoSuchOptionException.php',
'Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException' => $vendorDir . '/symfony/options-resolver/Exception/OptionDefinitionException.php',
'Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException' => $vendorDir . '/symfony/options-resolver/Exception/UndefinedOptionsException.php',
'Symfony\\Component\\OptionsResolver\\Options' => $vendorDir . '/symfony/options-resolver/Options.php',
'Symfony\\Component\\OptionsResolver\\OptionsResolver' => $vendorDir . '/symfony/options-resolver/OptionsResolver.php',
'Symfony\\Component\\Process\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/process/Exception/ExceptionInterface.php',
'Symfony\\Component\\Process\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/process/Exception/InvalidArgumentException.php',
'Symfony\\Component\\Process\\Exception\\LogicException' => $vendorDir . '/symfony/process/Exception/LogicException.php',

View file

@ -7,16 +7,18 @@ $baseDir = dirname($vendorDir);
return array(
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
'25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php',
'667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
'2c102faa651ef8ea5874edb585946bce' => $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php',
'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php',
'25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php',
'ddc0a4d7e61c0286f0f8593b1903e894' => $vendorDir . '/clue/stream-filter/src/functions.php',
'667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
'8cff32064859f4559445b89279f3199c' => $vendorDir . '/php-http/message/src/filters.php',
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
'37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
'2c102faa651ef8ea5874edb585946bce' => $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php',
'6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
'538ca81a9a966a6716601ecf48f4eaef' => $vendorDir . '/opis/closure/functions.php',
'801c31d8ed748cfa537fa45402288c95' => $vendorDir . '/psy/psysh/src/functions.php',
'37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
'f0906e6318348a765ffb6eb24e0d0938' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/helpers.php',
'58571171fd5812e6e447dce228f52f4d' => $vendorDir . '/laravel/framework/src/Illuminate/Support/helpers.php',
'f18cc91337d49233e5754e93f3ed9ec3' => $vendorDir . '/laravelcollective/html/src/helpers.php',

View file

@ -6,7 +6,7 @@ $vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/type-resolver/src', $vendorDir . '/phpdocumentor/reflection-docblock/src'),
'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/type-resolver/src'),
'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'),
'Whoops\\' => array($vendorDir . '/filp/whoops/src/Whoops'),
'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'),
@ -20,6 +20,7 @@ return array(
'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'),
'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'),
'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'),
'Symfony\\Component\\OptionsResolver\\' => array($vendorDir . '/symfony/options-resolver'),
'Symfony\\Component\\HttpKernel\\' => array($vendorDir . '/symfony/http-kernel'),
'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'),
'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'),
@ -33,6 +34,7 @@ return array(
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'),
'Opis\\Closure\\' => array($vendorDir . '/opis/closure/src'),
'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
@ -41,9 +43,20 @@ return array(
'JakubOnderka\\PhpConsoleHighlighter\\' => array($vendorDir . '/jakub-onderka/php-console-highlighter/src'),
'JakubOnderka\\PhpConsoleColor\\' => array($vendorDir . '/jakub-onderka/php-console-color/src'),
'Illuminate\\' => array($vendorDir . '/laravel/framework/src/Illuminate'),
'Http\\Promise\\' => array($vendorDir . '/php-http/promise/src'),
'Http\\Message\\' => array($vendorDir . '/php-http/message/src', $vendorDir . '/php-http/message-factory/src'),
'Http\\Discovery\\' => array($vendorDir . '/php-http/discovery/src'),
'Http\\Client\\Common\\Plugin\\' => array($vendorDir . '/php-http/cache-plugin/src'),
'Http\\Client\\Common\\' => array($vendorDir . '/php-http/client-common/src'),
'Http\\Client\\' => array($vendorDir . '/php-http/httplug/src'),
'Http\\Adapter\\Guzzle6\\' => array($vendorDir . '/php-http/guzzle6-adapter/src'),
'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'),
'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
'GrahamCampbell\\Manager\\' => array($vendorDir . '/graham-campbell/manager/src'),
'GrahamCampbell\\GitHub\\' => array($vendorDir . '/graham-campbell/github/src'),
'GrahamCampbell\\CachePlugin\\' => array($vendorDir . '/graham-campbell/cache-plugin/src'),
'Github\\' => array($vendorDir . '/knplabs/github-api/lib/Github'),
'Fideloper\\Proxy\\' => array($vendorDir . '/fideloper/proxy/src'),
'Faker\\' => array($vendorDir . '/fzaninotto/faker/src/Faker'),
'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/EmailValidator'),
@ -53,6 +66,7 @@ return array(
'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'),
'Cron\\' => array($vendorDir . '/dragonmantank/cron-expression/src/Cron'),
'Collective\\Html\\' => array($vendorDir . '/laravelcollective/html/src'),
'Clue\\StreamFilter\\' => array($vendorDir . '/clue/stream-filter/src'),
'App\\' => array($baseDir . '/app'),
'' => array($vendorDir . '/nesbot/carbon/src'),
);

View file

@ -8,16 +8,18 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
{
public static $files = array (
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
'25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php',
'667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
'2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..' . '/swiftmailer/swiftmailer/lib/swift_required.php',
'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php',
'25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php',
'ddc0a4d7e61c0286f0f8593b1903e894' => __DIR__ . '/..' . '/clue/stream-filter/src/functions.php',
'667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
'8cff32064859f4559445b89279f3199c' => __DIR__ . '/..' . '/php-http/message/src/filters.php',
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
'37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
'2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..' . '/swiftmailer/swiftmailer/lib/swift_required.php',
'6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
'538ca81a9a966a6716601ecf48f4eaef' => __DIR__ . '/..' . '/opis/closure/functions.php',
'801c31d8ed748cfa537fa45402288c95' => __DIR__ . '/..' . '/psy/psysh/src/functions.php',
'37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
'f0906e6318348a765ffb6eb24e0d0938' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/helpers.php',
'58571171fd5812e6e447dce228f52f4d' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/helpers.php',
'f18cc91337d49233e5754e93f3ed9ec3' => __DIR__ . '/..' . '/laravelcollective/html/src/helpers.php',
@ -53,6 +55,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'Symfony\\Component\\Translation\\' => 30,
'Symfony\\Component\\Routing\\' => 26,
'Symfony\\Component\\Process\\' => 26,
'Symfony\\Component\\OptionsResolver\\' => 34,
'Symfony\\Component\\HttpKernel\\' => 29,
'Symfony\\Component\\HttpFoundation\\' => 33,
'Symfony\\Component\\Finder\\' => 25,
@ -72,6 +75,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'Psr\\Log\\' => 8,
'Psr\\Http\\Message\\' => 17,
'Psr\\Container\\' => 14,
'Psr\\Cache\\' => 10,
'PhpParser\\' => 10,
),
'O' =>
@ -96,11 +100,25 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
array (
'Illuminate\\' => 11,
),
'H' =>
array (
'Http\\Promise\\' => 13,
'Http\\Message\\' => 13,
'Http\\Discovery\\' => 15,
'Http\\Client\\Common\\Plugin\\' => 26,
'Http\\Client\\Common\\' => 19,
'Http\\Client\\' => 12,
'Http\\Adapter\\Guzzle6\\' => 21,
),
'G' =>
array (
'GuzzleHttp\\Psr7\\' => 16,
'GuzzleHttp\\Promise\\' => 19,
'GuzzleHttp\\' => 11,
'GrahamCampbell\\Manager\\' => 23,
'GrahamCampbell\\GitHub\\' => 22,
'GrahamCampbell\\CachePlugin\\' => 27,
'Github\\' => 7,
),
'F' =>
array (
@ -122,6 +140,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
array (
'Cron\\' => 5,
'Collective\\Html\\' => 16,
'Clue\\StreamFilter\\' => 18,
),
'A' =>
array (
@ -133,8 +152,8 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'phpDocumentor\\Reflection\\' =>
array (
0 => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src',
1 => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src',
2 => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src',
1 => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src',
2 => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src',
),
'XdgBaseDir\\' =>
array (
@ -188,6 +207,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
array (
0 => __DIR__ . '/..' . '/symfony/process',
),
'Symfony\\Component\\OptionsResolver\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/options-resolver',
),
'Symfony\\Component\\HttpKernel\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/http-kernel',
@ -240,6 +263,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
array (
0 => __DIR__ . '/..' . '/psr/container/src',
),
'Psr\\Cache\\' =>
array (
0 => __DIR__ . '/..' . '/psr/cache/src',
),
'PhpParser\\' =>
array (
0 => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser',
@ -272,6 +299,35 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
array (
0 => __DIR__ . '/..' . '/laravel/framework/src/Illuminate',
),
'Http\\Promise\\' =>
array (
0 => __DIR__ . '/..' . '/php-http/promise/src',
),
'Http\\Message\\' =>
array (
0 => __DIR__ . '/..' . '/php-http/message/src',
1 => __DIR__ . '/..' . '/php-http/message-factory/src',
),
'Http\\Discovery\\' =>
array (
0 => __DIR__ . '/..' . '/php-http/discovery/src',
),
'Http\\Client\\Common\\Plugin\\' =>
array (
0 => __DIR__ . '/..' . '/php-http/cache-plugin/src',
),
'Http\\Client\\Common\\' =>
array (
0 => __DIR__ . '/..' . '/php-http/client-common/src',
),
'Http\\Client\\' =>
array (
0 => __DIR__ . '/..' . '/php-http/httplug/src',
),
'Http\\Adapter\\Guzzle6\\' =>
array (
0 => __DIR__ . '/..' . '/php-http/guzzle6-adapter/src',
),
'GuzzleHttp\\Psr7\\' =>
array (
0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src',
@ -284,6 +340,22 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
array (
0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src',
),
'GrahamCampbell\\Manager\\' =>
array (
0 => __DIR__ . '/..' . '/graham-campbell/manager/src',
),
'GrahamCampbell\\GitHub\\' =>
array (
0 => __DIR__ . '/..' . '/graham-campbell/github/src',
),
'GrahamCampbell\\CachePlugin\\' =>
array (
0 => __DIR__ . '/..' . '/graham-campbell/cache-plugin/src',
),
'Github\\' =>
array (
0 => __DIR__ . '/..' . '/knplabs/github-api/lib/Github',
),
'Fideloper\\Proxy\\' =>
array (
0 => __DIR__ . '/..' . '/fideloper/proxy/src',
@ -320,6 +392,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
array (
0 => __DIR__ . '/..' . '/laravelcollective/html/src',
),
'Clue\\StreamFilter\\' =>
array (
0 => __DIR__ . '/..' . '/clue/stream-filter/src',
),
'App\\' =>
array (
0 => __DIR__ . '/../..' . '/app',
@ -359,6 +435,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
);
public static $classMap = array (
'App\\Application' => __DIR__ . '/../..' . '/app/Application.php',
'App\\Console\\Kernel' => __DIR__ . '/../..' . '/app/Console/Kernel.php',
'App\\Exceptions\\Handler' => __DIR__ . '/../..' . '/app/Exceptions/Handler.php',
'App\\Http\\Controllers\\Auth\\ForgotPasswordController' => __DIR__ . '/../..' . '/app/Http/Controllers/Auth/ForgotPasswordController.php',
@ -387,73 +464,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'App\\Setting' => __DIR__ . '/../..' . '/app/Setting.php',
'App\\SettingGroup' => __DIR__ . '/../..' . '/app/SettingGroup.php',
'App\\SettingUser' => __DIR__ . '/../..' . '/app/SettingUser.php',
'App\\SupportedApps\\AirSonic' => __DIR__ . '/../..' . '/app/SupportedApps/AirSonic.php',
'App\\SupportedApps\\Bazarr' => __DIR__ . '/../..' . '/app/SupportedApps/Bazarr.php',
'App\\SupportedApps\\Bitwarden' => __DIR__ . '/../..' . '/app/SupportedApps/Bitwarden.php',
'App\\SupportedApps\\BookStack' => __DIR__ . '/../..' . '/app/SupportedApps/BookStack.php',
'App\\SupportedApps\\Booksonic' => __DIR__ . '/../..' . '/app/SupportedApps/Booksonic.php',
'App\\SupportedApps\\Cardigann' => __DIR__ . '/../..' . '/app/SupportedApps/Cardigann.php',
'App\\SupportedApps\\Contracts\\Applications' => __DIR__ . '/../..' . '/app/SupportedApps/Contracts/Applications.php',
'App\\SupportedApps\\Contracts\\Livestats' => __DIR__ . '/../..' . '/app/SupportedApps/Contracts/Livestats.php',
'App\\SupportedApps\\CouchPotato' => __DIR__ . '/../..' . '/app/SupportedApps/CouchPotato.php',
'App\\SupportedApps\\Deluge' => __DIR__ . '/../..' . '/app/SupportedApps/Deluge.php',
'App\\SupportedApps\\Dokuwiki' => __DIR__ . '/../..' . '/app/SupportedApps/Dokuwiki.php',
'App\\SupportedApps\\Duplicati' => __DIR__ . '/../..' . '/app/SupportedApps/Duplicati.php',
'App\\SupportedApps\\Emby' => __DIR__ . '/../..' . '/app/SupportedApps/Emby.php',
'App\\SupportedApps\\Flood' => __DIR__ . '/../..' . '/app/SupportedApps/Flood.php',
'App\\SupportedApps\\FreshRSS' => __DIR__ . '/../..' . '/app/SupportedApps/FreshRSS.php',
'App\\SupportedApps\\Gitea' => __DIR__ . '/../..' . '/app/SupportedApps/Gitea.php',
'App\\SupportedApps\\Glances' => __DIR__ . '/../..' . '/app/SupportedApps/Glances.php',
'App\\SupportedApps\\Grafana' => __DIR__ . '/../..' . '/app/SupportedApps/Grafana.php',
'App\\SupportedApps\\Graylog' => __DIR__ . '/../..' . '/app/SupportedApps/Graylog.php',
'App\\SupportedApps\\Headphones' => __DIR__ . '/../..' . '/app/SupportedApps/Headphones.php',
'App\\SupportedApps\\HomeAssistant' => __DIR__ . '/../..' . '/app/SupportedApps/HomeAssistant.php',
'App\\SupportedApps\\Jackett' => __DIR__ . '/../..' . '/app/SupportedApps/Jackett.php',
'App\\SupportedApps\\Jdownloader' => __DIR__ . '/../..' . '/app/SupportedApps/Jdownloader.php',
'App\\SupportedApps\\Krusader' => __DIR__ . '/../..' . '/app/SupportedApps/Krusader.php',
'App\\SupportedApps\\Lidarr' => __DIR__ . '/../..' . '/app/SupportedApps/Lidarr.php',
'App\\SupportedApps\\Mailcow' => __DIR__ . '/../..' . '/app/SupportedApps/Mailcow.php',
'App\\SupportedApps\\Mcmyadmin' => __DIR__ . '/../..' . '/app/SupportedApps/Mcmyadmin.php',
'App\\SupportedApps\\Medusa' => __DIR__ . '/../..' . '/app/SupportedApps/Medusa.php',
'App\\SupportedApps\\Monica' => __DIR__ . '/../..' . '/app/SupportedApps/Monica.php',
'App\\SupportedApps\\MusicBrainz' => __DIR__ . '/../..' . '/app/SupportedApps/MusicBrainz.php',
'App\\SupportedApps\\Mylar' => __DIR__ . '/../..' . '/app/SupportedApps/Mylar.php',
'App\\SupportedApps\\Netdata' => __DIR__ . '/../..' . '/app/SupportedApps/Netdata.php',
'App\\SupportedApps\\Nextcloud' => __DIR__ . '/../..' . '/app/SupportedApps/Nextcloud.php',
'App\\SupportedApps\\NowShowing' => __DIR__ . '/../..' . '/app/SupportedApps/NowShowing.php',
'App\\SupportedApps\\Nzbget' => __DIR__ . '/../..' . '/app/SupportedApps/Nzbget.php',
'App\\SupportedApps\\Nzbhydra' => __DIR__ . '/../..' . '/app/SupportedApps/Nzbhydra.php',
'App\\SupportedApps\\Ombi' => __DIR__ . '/../..' . '/app/SupportedApps/Ombi.php',
'App\\SupportedApps\\OpenMediaVault' => __DIR__ . '/../..' . '/app/SupportedApps/OpenMediaVault.php',
'App\\SupportedApps\\Openhab' => __DIR__ . '/../..' . '/app/SupportedApps/Openhab.php',
'App\\SupportedApps\\Opnsense' => __DIR__ . '/../..' . '/app/SupportedApps/Opnsense.php',
'App\\SupportedApps\\Pfsense' => __DIR__ . '/../..' . '/app/SupportedApps/Pfsense.php',
'App\\SupportedApps\\Pihole' => __DIR__ . '/../..' . '/app/SupportedApps/Pihole.php',
'App\\SupportedApps\\Plex' => __DIR__ . '/../..' . '/app/SupportedApps/Plex.php',
'App\\SupportedApps\\Plexpy' => __DIR__ . '/../..' . '/app/SupportedApps/Plexpy.php',
'App\\SupportedApps\\Plexrequests' => __DIR__ . '/../..' . '/app/SupportedApps/Plexrequests.php',
'App\\SupportedApps\\Portainer' => __DIR__ . '/../..' . '/app/SupportedApps/Portainer.php',
'App\\SupportedApps\\Proxmox' => __DIR__ . '/../..' . '/app/SupportedApps/Proxmox.php',
'App\\SupportedApps\\Radarr' => __DIR__ . '/../..' . '/app/SupportedApps/Radarr.php',
'App\\SupportedApps\\Rancher' => __DIR__ . '/../..' . '/app/SupportedApps/Rancher.php',
'App\\SupportedApps\\Runeaudio' => __DIR__ . '/../..' . '/app/SupportedApps/Runeaudio.php',
'App\\SupportedApps\\Sabnzbd' => __DIR__ . '/../..' . '/app/SupportedApps/Sabnzbd.php',
'App\\SupportedApps\\Sickrage' => __DIR__ . '/../..' . '/app/SupportedApps/Sickrage.php',
'App\\SupportedApps\\Sonarr' => __DIR__ . '/../..' . '/app/SupportedApps/Sonarr.php',
'App\\SupportedApps\\Syncthing' => __DIR__ . '/../..' . '/app/SupportedApps/Syncthing.php',
'App\\SupportedApps\\TVheadend' => __DIR__ . '/../..' . '/app/SupportedApps/TVheadend.php',
'App\\SupportedApps\\Tautulli' => __DIR__ . '/../..' . '/app/SupportedApps/Tautulli.php',
'App\\SupportedApps\\Traefik' => __DIR__ . '/../..' . '/app/SupportedApps/Traefik.php',
'App\\SupportedApps\\Transmission' => __DIR__ . '/../..' . '/app/SupportedApps/Transmission.php',
'App\\SupportedApps\\Ttrss' => __DIR__ . '/../..' . '/app/SupportedApps/Ttrss.php',
'App\\SupportedApps\\Unifi' => __DIR__ . '/../..' . '/app/SupportedApps/Unifi.php',
'App\\SupportedApps\\Unraid' => __DIR__ . '/../..' . '/app/SupportedApps/Unraid.php',
'App\\SupportedApps\\Virtualmin' => __DIR__ . '/../..' . '/app/SupportedApps/Virtualmin.php',
'App\\SupportedApps\\Watcher3' => __DIR__ . '/../..' . '/app/SupportedApps/Watcher3.php',
'App\\SupportedApps\\WebTools' => __DIR__ . '/../..' . '/app/SupportedApps/WebTools.php',
'App\\SupportedApps\\Webmin' => __DIR__ . '/../..' . '/app/SupportedApps/Webmin.php',
'App\\SupportedApps\\pyLoad' => __DIR__ . '/../..' . '/app/SupportedApps/pyLoad.php',
'App\\SupportedApps\\ruTorrent' => __DIR__ . '/../..' . '/app/SupportedApps/ruTorrent.php',
'App\\SupportedApps' => __DIR__ . '/../..' . '/app/SupportedApps.php',
'App\\User' => __DIR__ . '/../..' . '/app/User.php',
'Carbon\\Carbon' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Carbon.php',
'Carbon\\CarbonInterval' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/CarbonInterval.php',
@ -461,6 +472,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'Carbon\\Exceptions\\InvalidDateException' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Exceptions/InvalidDateException.php',
'Carbon\\Laravel\\ServiceProvider' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Laravel/ServiceProvider.php',
'Carbon\\Translator' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Translator.php',
'Clue\\StreamFilter\\CallbackFilter' => __DIR__ . '/..' . '/clue/stream-filter/src/CallbackFilter.php',
'Collective\\Html\\Componentable' => __DIR__ . '/..' . '/laravelcollective/html/src/Componentable.php',
'Collective\\Html\\Eloquent\\FormAccessible' => __DIR__ . '/..' . '/laravelcollective/html/src/Eloquent/FormAccessible.php',
'Collective\\Html\\FormBuilder' => __DIR__ . '/..' . '/laravelcollective/html/src/FormBuilder.php',
@ -1028,6 +1040,114 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'File_Iterator' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Iterator.php',
'File_Iterator_Facade' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Facade.php',
'File_Iterator_Factory' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Factory.php',
'Github\\Api\\AbstractApi' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/AbstractApi.php',
'Github\\Api\\AcceptHeaderTrait' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/AcceptHeaderTrait.php',
'Github\\Api\\ApiInterface' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/ApiInterface.php',
'Github\\Api\\Apps' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Apps.php',
'Github\\Api\\Authorizations' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Authorizations.php',
'Github\\Api\\CurrentUser' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/CurrentUser.php',
'Github\\Api\\CurrentUser\\Emails' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/CurrentUser/Emails.php',
'Github\\Api\\CurrentUser\\Followers' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/CurrentUser/Followers.php',
'Github\\Api\\CurrentUser\\Memberships' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/CurrentUser/Memberships.php',
'Github\\Api\\CurrentUser\\Notifications' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/CurrentUser/Notifications.php',
'Github\\Api\\CurrentUser\\PublicKeys' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/CurrentUser/PublicKeys.php',
'Github\\Api\\CurrentUser\\Starring' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/CurrentUser/Starring.php',
'Github\\Api\\CurrentUser\\Watchers' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/CurrentUser/Watchers.php',
'Github\\Api\\Deployment' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Deployment.php',
'Github\\Api\\Enterprise' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Enterprise.php',
'Github\\Api\\Enterprise\\License' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Enterprise/License.php',
'Github\\Api\\Enterprise\\ManagementConsole' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Enterprise/ManagementConsole.php',
'Github\\Api\\Enterprise\\Stats' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Enterprise/Stats.php',
'Github\\Api\\Enterprise\\UserAdmin' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Enterprise/UserAdmin.php',
'Github\\Api\\Gist\\Comments' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Gist/Comments.php',
'Github\\Api\\Gists' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Gists.php',
'Github\\Api\\GitData' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/GitData.php',
'Github\\Api\\GitData\\Blobs' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/GitData/Blobs.php',
'Github\\Api\\GitData\\Commits' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/GitData/Commits.php',
'Github\\Api\\GitData\\References' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/GitData/References.php',
'Github\\Api\\GitData\\Tags' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/GitData/Tags.php',
'Github\\Api\\GitData\\Trees' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/GitData/Trees.php',
'Github\\Api\\GraphQL' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/GraphQL.php',
'Github\\Api\\Integrations' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Integrations.php',
'Github\\Api\\Issue' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Issue.php',
'Github\\Api\\Issue\\Assignees' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Issue/Assignees.php',
'Github\\Api\\Issue\\Comments' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Issue/Comments.php',
'Github\\Api\\Issue\\Events' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Issue/Events.php',
'Github\\Api\\Issue\\Labels' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Issue/Labels.php',
'Github\\Api\\Issue\\Milestones' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Issue/Milestones.php',
'Github\\Api\\Issue\\Timeline' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Issue/Timeline.php',
'Github\\Api\\Markdown' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Markdown.php',
'Github\\Api\\Meta' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Meta.php',
'Github\\Api\\Miscellaneous\\CodeOfConduct' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Miscellaneous/CodeOfConduct.php',
'Github\\Api\\Miscellaneous\\Emojis' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Miscellaneous/Emojis.php',
'Github\\Api\\Miscellaneous\\Gitignore' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Miscellaneous/Gitignore.php',
'Github\\Api\\Notification' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Notification.php',
'Github\\Api\\Organization' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Organization.php',
'Github\\Api\\Organization\\Hooks' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Organization/Hooks.php',
'Github\\Api\\Organization\\Members' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Organization/Members.php',
'Github\\Api\\Organization\\Projects' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Organization/Projects.php',
'Github\\Api\\Organization\\Teams' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Organization/Teams.php',
'Github\\Api\\Project\\AbstractProjectApi' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Project/AbstractProjectApi.php',
'Github\\Api\\Project\\Cards' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Project/Cards.php',
'Github\\Api\\Project\\Columns' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Project/Columns.php',
'Github\\Api\\PullRequest' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/PullRequest.php',
'Github\\Api\\PullRequest\\Comments' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/PullRequest/Comments.php',
'Github\\Api\\PullRequest\\Review' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/PullRequest/Review.php',
'Github\\Api\\PullRequest\\ReviewRequest' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/PullRequest/ReviewRequest.php',
'Github\\Api\\RateLimit' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/RateLimit.php',
'Github\\Api\\Repo' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repo.php',
'Github\\Api\\Repository\\Assets' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Assets.php',
'Github\\Api\\Repository\\Collaborators' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Collaborators.php',
'Github\\Api\\Repository\\Comments' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Comments.php',
'Github\\Api\\Repository\\Commits' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Commits.php',
'Github\\Api\\Repository\\Contents' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Contents.php',
'Github\\Api\\Repository\\DeployKeys' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/DeployKeys.php',
'Github\\Api\\Repository\\Downloads' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Downloads.php',
'Github\\Api\\Repository\\Forks' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Forks.php',
'Github\\Api\\Repository\\Hooks' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Hooks.php',
'Github\\Api\\Repository\\Labels' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Labels.php',
'Github\\Api\\Repository\\Projects' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Projects.php',
'Github\\Api\\Repository\\Protection' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Protection.php',
'Github\\Api\\Repository\\Releases' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Releases.php',
'Github\\Api\\Repository\\Stargazers' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Stargazers.php',
'Github\\Api\\Repository\\Statuses' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Statuses.php',
'Github\\Api\\Repository\\Traffic' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Repository/Traffic.php',
'Github\\Api\\Search' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/Search.php',
'Github\\Api\\User' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Api/User.php',
'Github\\Client' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Client.php',
'Github\\Exception\\ApiLimitExceedException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/ApiLimitExceedException.php',
'Github\\Exception\\BadMethodCallException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/BadMethodCallException.php',
'Github\\Exception\\ErrorException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/ErrorException.php',
'Github\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/ExceptionInterface.php',
'Github\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/InvalidArgumentException.php',
'Github\\Exception\\MissingArgumentException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/MissingArgumentException.php',
'Github\\Exception\\RuntimeException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/RuntimeException.php',
'Github\\Exception\\TwoFactorAuthenticationRequiredException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/TwoFactorAuthenticationRequiredException.php',
'Github\\Exception\\ValidationFailedException' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/Exception/ValidationFailedException.php',
'Github\\HttpClient\\Builder' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/HttpClient/Builder.php',
'Github\\HttpClient\\Message\\ResponseMediator' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/HttpClient/Message/ResponseMediator.php',
'Github\\HttpClient\\Plugin\\Authentication' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/HttpClient/Plugin/Authentication.php',
'Github\\HttpClient\\Plugin\\GithubExceptionThrower' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/HttpClient/Plugin/GithubExceptionThrower.php',
'Github\\HttpClient\\Plugin\\History' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/HttpClient/Plugin/History.php',
'Github\\HttpClient\\Plugin\\PathPrepend' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/HttpClient/Plugin/PathPrepend.php',
'Github\\ResultPager' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/ResultPager.php',
'Github\\ResultPagerInterface' => __DIR__ . '/..' . '/knplabs/github-api/lib/Github/ResultPagerInterface.php',
'GrahamCampbell\\CachePlugin\\CachePlugin' => __DIR__ . '/..' . '/graham-campbell/cache-plugin/src/CachePlugin.php',
'GrahamCampbell\\GitHub\\Authenticators\\AbstractAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Authenticators/AbstractAuthenticator.php',
'GrahamCampbell\\GitHub\\Authenticators\\ApplicationAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Authenticators/ApplicationAuthenticator.php',
'GrahamCampbell\\GitHub\\Authenticators\\AuthenticatorFactory' => __DIR__ . '/..' . '/graham-campbell/github/src/Authenticators/AuthenticatorFactory.php',
'GrahamCampbell\\GitHub\\Authenticators\\AuthenticatorInterface' => __DIR__ . '/..' . '/graham-campbell/github/src/Authenticators/AuthenticatorInterface.php',
'GrahamCampbell\\GitHub\\Authenticators\\JwtAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Authenticators/JwtAuthenticator.php',
'GrahamCampbell\\GitHub\\Authenticators\\PasswordAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Authenticators/PasswordAuthenticator.php',
'GrahamCampbell\\GitHub\\Authenticators\\TokenAuthenticator' => __DIR__ . '/..' . '/graham-campbell/github/src/Authenticators/TokenAuthenticator.php',
'GrahamCampbell\\GitHub\\Facades\\GitHub' => __DIR__ . '/..' . '/graham-campbell/github/src/Facades/GitHub.php',
'GrahamCampbell\\GitHub\\GitHubFactory' => __DIR__ . '/..' . '/graham-campbell/github/src/GitHubFactory.php',
'GrahamCampbell\\GitHub\\GitHubManager' => __DIR__ . '/..' . '/graham-campbell/github/src/GitHubManager.php',
'GrahamCampbell\\GitHub\\GitHubServiceProvider' => __DIR__ . '/..' . '/graham-campbell/github/src/GitHubServiceProvider.php',
'GrahamCampbell\\GitHub\\Http\\ClientBuilder' => __DIR__ . '/..' . '/graham-campbell/github/src/Http/ClientBuilder.php',
'GrahamCampbell\\Manager\\AbstractManager' => __DIR__ . '/..' . '/graham-campbell/manager/src/AbstractManager.php',
'GrahamCampbell\\Manager\\ConnectorInterface' => __DIR__ . '/..' . '/graham-campbell/manager/src/ConnectorInterface.php',
'GrahamCampbell\\Manager\\ManagerInterface' => __DIR__ . '/..' . '/graham-campbell/manager/src/ManagerInterface.php',
'GuzzleHttp\\Client' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Client.php',
'GuzzleHttp\\ClientInterface' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/ClientInterface.php',
'GuzzleHttp\\Cookie\\CookieJar' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php',
@ -1164,6 +1284,140 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'Hamcrest\\Type\\IsString' => __DIR__ . '/..' . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Type/IsString.php',
'Hamcrest\\Util' => __DIR__ . '/..' . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Util.php',
'Hamcrest\\Xml\\HasXPath' => __DIR__ . '/..' . '/hamcrest/hamcrest-php/hamcrest/Hamcrest/Xml/HasXPath.php',
'Http\\Adapter\\Guzzle6\\Client' => __DIR__ . '/..' . '/php-http/guzzle6-adapter/src/Client.php',
'Http\\Adapter\\Guzzle6\\Promise' => __DIR__ . '/..' . '/php-http/guzzle6-adapter/src/Promise.php',
'Http\\Client\\Common\\BatchClient' => __DIR__ . '/..' . '/php-http/client-common/src/BatchClient.php',
'Http\\Client\\Common\\BatchResult' => __DIR__ . '/..' . '/php-http/client-common/src/BatchResult.php',
'Http\\Client\\Common\\Deferred' => __DIR__ . '/..' . '/php-http/client-common/src/Deferred.php',
'Http\\Client\\Common\\EmulatedHttpAsyncClient' => __DIR__ . '/..' . '/php-http/client-common/src/EmulatedHttpAsyncClient.php',
'Http\\Client\\Common\\EmulatedHttpClient' => __DIR__ . '/..' . '/php-http/client-common/src/EmulatedHttpClient.php',
'Http\\Client\\Common\\Exception\\BatchException' => __DIR__ . '/..' . '/php-http/client-common/src/Exception/BatchException.php',
'Http\\Client\\Common\\Exception\\CircularRedirectionException' => __DIR__ . '/..' . '/php-http/client-common/src/Exception/CircularRedirectionException.php',
'Http\\Client\\Common\\Exception\\ClientErrorException' => __DIR__ . '/..' . '/php-http/client-common/src/Exception/ClientErrorException.php',
'Http\\Client\\Common\\Exception\\HttpClientNotFoundException' => __DIR__ . '/..' . '/php-http/client-common/src/Exception/HttpClientNotFoundException.php',
'Http\\Client\\Common\\Exception\\LoopException' => __DIR__ . '/..' . '/php-http/client-common/src/Exception/LoopException.php',
'Http\\Client\\Common\\Exception\\MultipleRedirectionException' => __DIR__ . '/..' . '/php-http/client-common/src/Exception/MultipleRedirectionException.php',
'Http\\Client\\Common\\Exception\\ServerErrorException' => __DIR__ . '/..' . '/php-http/client-common/src/Exception/ServerErrorException.php',
'Http\\Client\\Common\\FlexibleHttpClient' => __DIR__ . '/..' . '/php-http/client-common/src/FlexibleHttpClient.php',
'Http\\Client\\Common\\HttpAsyncClientDecorator' => __DIR__ . '/..' . '/php-http/client-common/src/HttpAsyncClientDecorator.php',
'Http\\Client\\Common\\HttpAsyncClientEmulator' => __DIR__ . '/..' . '/php-http/client-common/src/HttpAsyncClientEmulator.php',
'Http\\Client\\Common\\HttpClientDecorator' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientDecorator.php',
'Http\\Client\\Common\\HttpClientEmulator' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientEmulator.php',
'Http\\Client\\Common\\HttpClientPool' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientPool.php',
'Http\\Client\\Common\\HttpClientPoolItem' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientPoolItem.php',
'Http\\Client\\Common\\HttpClientPool\\LeastUsedClientPool' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientPool/LeastUsedClientPool.php',
'Http\\Client\\Common\\HttpClientPool\\RandomClientPool' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientPool/RandomClientPool.php',
'Http\\Client\\Common\\HttpClientPool\\RoundRobinClientPool' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientPool/RoundRobinClientPool.php',
'Http\\Client\\Common\\HttpClientRouter' => __DIR__ . '/..' . '/php-http/client-common/src/HttpClientRouter.php',
'Http\\Client\\Common\\HttpMethodsClient' => __DIR__ . '/..' . '/php-http/client-common/src/HttpMethodsClient.php',
'Http\\Client\\Common\\Plugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin.php',
'Http\\Client\\Common\\PluginClient' => __DIR__ . '/..' . '/php-http/client-common/src/PluginClient.php',
'Http\\Client\\Common\\PluginClientFactory' => __DIR__ . '/..' . '/php-http/client-common/src/PluginClientFactory.php',
'Http\\Client\\Common\\Plugin\\AddHostPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/AddHostPlugin.php',
'Http\\Client\\Common\\Plugin\\AddPathPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/AddPathPlugin.php',
'Http\\Client\\Common\\Plugin\\AuthenticationPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/AuthenticationPlugin.php',
'Http\\Client\\Common\\Plugin\\BaseUriPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/BaseUriPlugin.php',
'Http\\Client\\Common\\Plugin\\CachePlugin' => __DIR__ . '/..' . '/php-http/cache-plugin/src/CachePlugin.php',
'Http\\Client\\Common\\Plugin\\Cache\\Generator\\CacheKeyGenerator' => __DIR__ . '/..' . '/php-http/cache-plugin/src/Cache/Generator/CacheKeyGenerator.php',
'Http\\Client\\Common\\Plugin\\Cache\\Generator\\HeaderCacheKeyGenerator' => __DIR__ . '/..' . '/php-http/cache-plugin/src/Cache/Generator/HeaderCacheKeyGenerator.php',
'Http\\Client\\Common\\Plugin\\Cache\\Generator\\SimpleGenerator' => __DIR__ . '/..' . '/php-http/cache-plugin/src/Cache/Generator/SimpleGenerator.php',
'Http\\Client\\Common\\Plugin\\ContentLengthPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/ContentLengthPlugin.php',
'Http\\Client\\Common\\Plugin\\ContentTypePlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/ContentTypePlugin.php',
'Http\\Client\\Common\\Plugin\\CookiePlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/CookiePlugin.php',
'Http\\Client\\Common\\Plugin\\DecoderPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/DecoderPlugin.php',
'Http\\Client\\Common\\Plugin\\ErrorPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/ErrorPlugin.php',
'Http\\Client\\Common\\Plugin\\Exception\\RewindStreamException' => __DIR__ . '/..' . '/php-http/cache-plugin/src/Exception/RewindStreamException.php',
'Http\\Client\\Common\\Plugin\\HeaderAppendPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/HeaderAppendPlugin.php',
'Http\\Client\\Common\\Plugin\\HeaderDefaultsPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/HeaderDefaultsPlugin.php',
'Http\\Client\\Common\\Plugin\\HeaderRemovePlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/HeaderRemovePlugin.php',
'Http\\Client\\Common\\Plugin\\HeaderSetPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/HeaderSetPlugin.php',
'Http\\Client\\Common\\Plugin\\HistoryPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/HistoryPlugin.php',
'Http\\Client\\Common\\Plugin\\Journal' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/Journal.php',
'Http\\Client\\Common\\Plugin\\QueryDefaultsPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/QueryDefaultsPlugin.php',
'Http\\Client\\Common\\Plugin\\RedirectPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/RedirectPlugin.php',
'Http\\Client\\Common\\Plugin\\RequestMatcherPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/RequestMatcherPlugin.php',
'Http\\Client\\Common\\Plugin\\RetryPlugin' => __DIR__ . '/..' . '/php-http/client-common/src/Plugin/RetryPlugin.php',
'Http\\Client\\Exception' => __DIR__ . '/..' . '/php-http/httplug/src/Exception.php',
'Http\\Client\\Exception\\HttpException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/HttpException.php',
'Http\\Client\\Exception\\NetworkException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/NetworkException.php',
'Http\\Client\\Exception\\RequestException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/RequestException.php',
'Http\\Client\\Exception\\TransferException' => __DIR__ . '/..' . '/php-http/httplug/src/Exception/TransferException.php',
'Http\\Client\\HttpAsyncClient' => __DIR__ . '/..' . '/php-http/httplug/src/HttpAsyncClient.php',
'Http\\Client\\HttpClient' => __DIR__ . '/..' . '/php-http/httplug/src/HttpClient.php',
'Http\\Client\\Promise\\HttpFulfilledPromise' => __DIR__ . '/..' . '/php-http/httplug/src/Promise/HttpFulfilledPromise.php',
'Http\\Client\\Promise\\HttpRejectedPromise' => __DIR__ . '/..' . '/php-http/httplug/src/Promise/HttpRejectedPromise.php',
'Http\\Discovery\\ClassDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/ClassDiscovery.php',
'Http\\Discovery\\Exception' => __DIR__ . '/..' . '/php-http/discovery/src/Exception.php',
'Http\\Discovery\\Exception\\ClassInstantiationFailedException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/ClassInstantiationFailedException.php',
'Http\\Discovery\\Exception\\DiscoveryFailedException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/DiscoveryFailedException.php',
'Http\\Discovery\\Exception\\NotFoundException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/NotFoundException.php',
'Http\\Discovery\\Exception\\PuliUnavailableException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/PuliUnavailableException.php',
'Http\\Discovery\\Exception\\StrategyUnavailableException' => __DIR__ . '/..' . '/php-http/discovery/src/Exception/StrategyUnavailableException.php',
'Http\\Discovery\\HttpAsyncClientDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/HttpAsyncClientDiscovery.php',
'Http\\Discovery\\HttpClientDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/HttpClientDiscovery.php',
'Http\\Discovery\\MessageFactoryDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/MessageFactoryDiscovery.php',
'Http\\Discovery\\NotFoundException' => __DIR__ . '/..' . '/php-http/discovery/src/NotFoundException.php',
'Http\\Discovery\\Strategy\\CommonClassesStrategy' => __DIR__ . '/..' . '/php-http/discovery/src/Strategy/CommonClassesStrategy.php',
'Http\\Discovery\\Strategy\\DiscoveryStrategy' => __DIR__ . '/..' . '/php-http/discovery/src/Strategy/DiscoveryStrategy.php',
'Http\\Discovery\\Strategy\\MockClientStrategy' => __DIR__ . '/..' . '/php-http/discovery/src/Strategy/MockClientStrategy.php',
'Http\\Discovery\\Strategy\\PuliBetaStrategy' => __DIR__ . '/..' . '/php-http/discovery/src/Strategy/PuliBetaStrategy.php',
'Http\\Discovery\\StreamFactoryDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/StreamFactoryDiscovery.php',
'Http\\Discovery\\UriFactoryDiscovery' => __DIR__ . '/..' . '/php-http/discovery/src/UriFactoryDiscovery.php',
'Http\\Message\\Authentication' => __DIR__ . '/..' . '/php-http/message/src/Authentication.php',
'Http\\Message\\Authentication\\AutoBasicAuth' => __DIR__ . '/..' . '/php-http/message/src/Authentication/AutoBasicAuth.php',
'Http\\Message\\Authentication\\BasicAuth' => __DIR__ . '/..' . '/php-http/message/src/Authentication/BasicAuth.php',
'Http\\Message\\Authentication\\Bearer' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Bearer.php',
'Http\\Message\\Authentication\\Chain' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Chain.php',
'Http\\Message\\Authentication\\Matching' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Matching.php',
'Http\\Message\\Authentication\\QueryParam' => __DIR__ . '/..' . '/php-http/message/src/Authentication/QueryParam.php',
'Http\\Message\\Authentication\\RequestConditional' => __DIR__ . '/..' . '/php-http/message/src/Authentication/RequestConditional.php',
'Http\\Message\\Authentication\\Wsse' => __DIR__ . '/..' . '/php-http/message/src/Authentication/Wsse.php',
'Http\\Message\\Builder\\ResponseBuilder' => __DIR__ . '/..' . '/php-http/message/src/Builder/ResponseBuilder.php',
'Http\\Message\\Cookie' => __DIR__ . '/..' . '/php-http/message/src/Cookie.php',
'Http\\Message\\CookieJar' => __DIR__ . '/..' . '/php-http/message/src/CookieJar.php',
'Http\\Message\\CookieUtil' => __DIR__ . '/..' . '/php-http/message/src/CookieUtil.php',
'Http\\Message\\Decorator\\MessageDecorator' => __DIR__ . '/..' . '/php-http/message/src/Decorator/MessageDecorator.php',
'Http\\Message\\Decorator\\RequestDecorator' => __DIR__ . '/..' . '/php-http/message/src/Decorator/RequestDecorator.php',
'Http\\Message\\Decorator\\ResponseDecorator' => __DIR__ . '/..' . '/php-http/message/src/Decorator/ResponseDecorator.php',
'Http\\Message\\Decorator\\StreamDecorator' => __DIR__ . '/..' . '/php-http/message/src/Decorator/StreamDecorator.php',
'Http\\Message\\Encoding\\ChunkStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/ChunkStream.php',
'Http\\Message\\Encoding\\CompressStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/CompressStream.php',
'Http\\Message\\Encoding\\DechunkStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/DechunkStream.php',
'Http\\Message\\Encoding\\DecompressStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/DecompressStream.php',
'Http\\Message\\Encoding\\DeflateStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/DeflateStream.php',
'Http\\Message\\Encoding\\Filter\\Chunk' => __DIR__ . '/..' . '/php-http/message/src/Encoding/Filter/Chunk.php',
'Http\\Message\\Encoding\\FilteredStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/FilteredStream.php',
'Http\\Message\\Encoding\\GzipDecodeStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/GzipDecodeStream.php',
'Http\\Message\\Encoding\\GzipEncodeStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/GzipEncodeStream.php',
'Http\\Message\\Encoding\\InflateStream' => __DIR__ . '/..' . '/php-http/message/src/Encoding/InflateStream.php',
'Http\\Message\\Exception' => __DIR__ . '/..' . '/php-http/message/src/Exception.php',
'Http\\Message\\Exception\\UnexpectedValueException' => __DIR__ . '/..' . '/php-http/message/src/Exception/UnexpectedValueException.php',
'Http\\Message\\Formatter' => __DIR__ . '/..' . '/php-http/message/src/Formatter.php',
'Http\\Message\\Formatter\\CurlCommandFormatter' => __DIR__ . '/..' . '/php-http/message/src/Formatter/CurlCommandFormatter.php',
'Http\\Message\\Formatter\\FullHttpMessageFormatter' => __DIR__ . '/..' . '/php-http/message/src/Formatter/FullHttpMessageFormatter.php',
'Http\\Message\\Formatter\\SimpleFormatter' => __DIR__ . '/..' . '/php-http/message/src/Formatter/SimpleFormatter.php',
'Http\\Message\\MessageFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/MessageFactory.php',
'Http\\Message\\MessageFactory\\DiactorosMessageFactory' => __DIR__ . '/..' . '/php-http/message/src/MessageFactory/DiactorosMessageFactory.php',
'Http\\Message\\MessageFactory\\GuzzleMessageFactory' => __DIR__ . '/..' . '/php-http/message/src/MessageFactory/GuzzleMessageFactory.php',
'Http\\Message\\MessageFactory\\SlimMessageFactory' => __DIR__ . '/..' . '/php-http/message/src/MessageFactory/SlimMessageFactory.php',
'Http\\Message\\RequestFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/RequestFactory.php',
'Http\\Message\\RequestMatcher' => __DIR__ . '/..' . '/php-http/message/src/RequestMatcher.php',
'Http\\Message\\RequestMatcher\\CallbackRequestMatcher' => __DIR__ . '/..' . '/php-http/message/src/RequestMatcher/CallbackRequestMatcher.php',
'Http\\Message\\RequestMatcher\\RegexRequestMatcher' => __DIR__ . '/..' . '/php-http/message/src/RequestMatcher/RegexRequestMatcher.php',
'Http\\Message\\RequestMatcher\\RequestMatcher' => __DIR__ . '/..' . '/php-http/message/src/RequestMatcher/RequestMatcher.php',
'Http\\Message\\ResponseFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/ResponseFactory.php',
'Http\\Message\\StreamFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/StreamFactory.php',
'Http\\Message\\StreamFactory\\DiactorosStreamFactory' => __DIR__ . '/..' . '/php-http/message/src/StreamFactory/DiactorosStreamFactory.php',
'Http\\Message\\StreamFactory\\GuzzleStreamFactory' => __DIR__ . '/..' . '/php-http/message/src/StreamFactory/GuzzleStreamFactory.php',
'Http\\Message\\StreamFactory\\SlimStreamFactory' => __DIR__ . '/..' . '/php-http/message/src/StreamFactory/SlimStreamFactory.php',
'Http\\Message\\Stream\\BufferedStream' => __DIR__ . '/..' . '/php-http/message/src/Stream/BufferedStream.php',
'Http\\Message\\UriFactory' => __DIR__ . '/..' . '/php-http/message-factory/src/UriFactory.php',
'Http\\Message\\UriFactory\\DiactorosUriFactory' => __DIR__ . '/..' . '/php-http/message/src/UriFactory/DiactorosUriFactory.php',
'Http\\Message\\UriFactory\\GuzzleUriFactory' => __DIR__ . '/..' . '/php-http/message/src/UriFactory/GuzzleUriFactory.php',
'Http\\Message\\UriFactory\\SlimUriFactory' => __DIR__ . '/..' . '/php-http/message/src/UriFactory/SlimUriFactory.php',
'Http\\Promise\\FulfilledPromise' => __DIR__ . '/..' . '/php-http/promise/src/FulfilledPromise.php',
'Http\\Promise\\Promise' => __DIR__ . '/..' . '/php-http/promise/src/Promise.php',
'Http\\Promise\\RejectedPromise' => __DIR__ . '/..' . '/php-http/promise/src/RejectedPromise.php',
'Illuminate\\Auth\\Access\\AuthorizationException' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Access/AuthorizationException.php',
'Illuminate\\Auth\\Access\\Gate' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Access/Gate.php',
'Illuminate\\Auth\\Access\\HandlesAuthorization' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Auth/Access/HandlesAuthorization.php',
@ -2949,6 +3203,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'Prophecy\\Prophet' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Prophet.php',
'Prophecy\\Util\\ExportUtil' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php',
'Prophecy\\Util\\StringUtil' => __DIR__ . '/..' . '/phpspec/prophecy/src/Prophecy/Util/StringUtil.php',
'Psr\\Cache\\CacheException' => __DIR__ . '/..' . '/psr/cache/src/CacheException.php',
'Psr\\Cache\\CacheItemInterface' => __DIR__ . '/..' . '/psr/cache/src/CacheItemInterface.php',
'Psr\\Cache\\CacheItemPoolInterface' => __DIR__ . '/..' . '/psr/cache/src/CacheItemPoolInterface.php',
'Psr\\Cache\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/cache/src/InvalidArgumentException.php',
'Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php',
'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php',
'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php',
@ -3630,6 +3888,18 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'Symfony\\Component\\HttpKernel\\RebootableInterface' => __DIR__ . '/..' . '/symfony/http-kernel/RebootableInterface.php',
'Symfony\\Component\\HttpKernel\\TerminableInterface' => __DIR__ . '/..' . '/symfony/http-kernel/TerminableInterface.php',
'Symfony\\Component\\HttpKernel\\UriSigner' => __DIR__ . '/..' . '/symfony/http-kernel/UriSigner.php',
'Symfony\\Component\\OptionsResolver\\Debug\\OptionsResolverIntrospector' => __DIR__ . '/..' . '/symfony/options-resolver/Debug/OptionsResolverIntrospector.php',
'Symfony\\Component\\OptionsResolver\\Exception\\AccessException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/AccessException.php',
'Symfony\\Component\\OptionsResolver\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/ExceptionInterface.php',
'Symfony\\Component\\OptionsResolver\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/InvalidArgumentException.php',
'Symfony\\Component\\OptionsResolver\\Exception\\InvalidOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/InvalidOptionsException.php',
'Symfony\\Component\\OptionsResolver\\Exception\\MissingOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/MissingOptionsException.php',
'Symfony\\Component\\OptionsResolver\\Exception\\NoConfigurationException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/NoConfigurationException.php',
'Symfony\\Component\\OptionsResolver\\Exception\\NoSuchOptionException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/NoSuchOptionException.php',
'Symfony\\Component\\OptionsResolver\\Exception\\OptionDefinitionException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/OptionDefinitionException.php',
'Symfony\\Component\\OptionsResolver\\Exception\\UndefinedOptionsException' => __DIR__ . '/..' . '/symfony/options-resolver/Exception/UndefinedOptionsException.php',
'Symfony\\Component\\OptionsResolver\\Options' => __DIR__ . '/..' . '/symfony/options-resolver/Options.php',
'Symfony\\Component\\OptionsResolver\\OptionsResolver' => __DIR__ . '/..' . '/symfony/options-resolver/OptionsResolver.php',
'Symfony\\Component\\Process\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/process/Exception/ExceptionInterface.php',
'Symfony\\Component\\Process\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/process/Exception/InvalidArgumentException.php',
'Symfony\\Component\\Process\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/process/Exception/LogicException.php',

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2015-2018 PHP HTTP Team <team@php-http.org>
Copyright (c) 2018 Graham Campbell <graham@alt-three.com>
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.

View file

@ -0,0 +1,43 @@
{
"name": "graham-campbell/cache-plugin",
"description": "Provides A Simple HTTP Cache Plugin With Good Defaults",
"keywords": ["http", "cache plugin", "cache-plugin", "Cache", "Cache Plugin", "Cache-Plugin", "Graham Campbell", "GrahamCampbell"],
"license": "MIT",
"authors": [
{
"name": "Graham Campbell",
"email": "graham@alt-three.com"
}
],
"require": {
"php": "^7.0",
"psr/cache": "^1.0",
"php-http/cache-plugin": "^1.5",
"php-http/client-common": "^1.7",
"php-http/message-factory": "^1.0"
},
"require-dev": {
"graham-campbell/analyzer": "^2.0",
"phpunit/phpunit": "^6.5|^7.0"
},
"autoload": {
"psr-4": {
"GrahamCampbell\\CachePlugin\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"GrahamCampbell\\Tests\\CachePlugin\\": "tests/"
}
},
"config": {
"preferred-install": "dist"
},
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"minimum-stability": "dev",
"prefer-stable": true
}

View file

@ -0,0 +1,238 @@
<?php
declare(strict_types=1);
/*
* This file is part of Cache Plugin.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\CachePlugin;
use Exception;
use Http\Client\Common\Plugin;
use Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator;
use Http\Client\Common\Plugin\Cache\Generator\HeaderCacheKeyGenerator;
use Http\Client\Common\Plugin\Exception\RewindStreamException;
use Http\Message\StreamFactory;
use Psr\Cache\CacheItemInterface;
use Psr\Cache\CacheItemPoolInterface;
use Psr\Http\Message\RequestInterface;
use Psr\Http\Message\ResponseInterface;
/**
* This is the response cache plugin class.
*
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
* @author Graham Campbell <graham@alt-three.com>
*/
class CachePlugin implements Plugin
{
/**
* The cache item pool instance.
*
* @var \Psr\Cache\CacheItemPoolInterface
*/
protected $pool;
/**
* The steam factory instance.
*
* @var \Http\Message\StreamFactory
*/
protected $streamFactory;
/**
* The cache key generator instance.
*
* @var \Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator
*/
protected $generator;
/**
* The cache lifetime in seconds.
*
* @var int
*/
protected $lifetime;
/**
* Create a new cache plugin.
*
* @param \Psr\Cache\CacheItemPoolInterface $pool
* @param \Http\Message\StreamFactory $streamFactory
* @param \Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator|null $generator
* @param int|null $lifetime
*
* @return void
*/
public function __construct(CacheItemPoolInterface $pool, StreamFactory $streamFactory, CacheKeyGenerator $generator = null, int $lifetime = null)
{
$this->pool = $pool;
$this->streamFactory = $streamFactory;
$this->generator = $generator ?: new HeaderCacheKeyGenerator(['Authorization', 'Cookie', 'Accept', 'Content-type']);
$this->lifetime = $lifetime ?: 3600 * 48;
}
/**
* Handle the request and return the response coming from the next callable.
*
* @param \Psr\Http\Message\RequestInterface $request
* @param callable $next
* @param callable $first
*
* @return \Http\Promise\Promise
*/
public function handleRequest(RequestInterface $request, callable $next, callable $first)
{
$method = strtoupper($request->getMethod());
// If the request not is cachable, move to $next
if (!in_array($method, ['GET', 'HEAD'], true)) {
return $next($request);
}
$cacheItem = $this->createCacheItem($request);
if ($cacheItem->isHit() && ($etag = $this->getETag($cacheItem))) {
$request = $request->withHeader('If-None-Match', $etag);
}
return $next($request)->then(function (ResponseInterface $response) use ($cacheItem) {
if (304 === $response->getStatusCode()) {
if (!$cacheItem->isHit()) {
// We do not have the item in cache. This plugin did not
// add If-None-Match headers. Return the response.
return $response;
}
// The cached response we have is still valid
$cacheItem->set($cacheItem->get())->expiresAfter($this->lifetime);
$this->pool->save($cacheItem);
return $this->createResponseFromCacheItem($cacheItem);
}
if ($this->isCacheable($response)) {
$bodyStream = $response->getBody();
$body = $bodyStream->__toString();
if ($bodyStream->isSeekable()) {
$bodyStream->rewind();
} else {
$response = $response->withBody($this->streamFactory->createStream($body));
}
$cacheItem
->expiresAfter($this->lifetime)
->set([
'response' => $response,
'body' => $body,
'etag' => $response->getHeader('ETag'),
]);
$this->pool->save($cacheItem);
}
return $response;
});
}
/**
* Create a cache item for a request.
*
* @param \Psr\Http\Message\RequestInterface $request
*
* @return \Psr\Cache\CacheItemInterface
*/
protected function createCacheItem(RequestInterface $request)
{
$key = sha1($this->generator->generate($request));
return $this->pool->getItem($key);
}
/**
* Verify that we can cache this response.
*
* @param \Psr\Http\Message\ResponseInterface $response
*
* @return bool
*/
protected function isCacheable(ResponseInterface $response)
{
if (!in_array($response->getStatusCode(), [200, 203, 300, 301, 302, 404, 410])) {
return false;
}
return !$this->getCacheControlDirective($response, 'no-cache');
}
/**
* Get the value of a parameter in the cache control header.
*
* @param \Psr\Http\Message\ResponseInterface $response
* @param string $name
*
* @return bool|string
*/
protected function getCacheControlDirective(ResponseInterface $response, string $name)
{
foreach ($response->getHeader('Cache-Control') as $header) {
if (preg_match(sprintf('|%s=?([0-9]+)?|i', $name), $header, $matches)) {
// return the value for $name if it exists
if (isset($matches[1])) {
return $matches[1];
}
return true;
}
}
return false;
}
/**
* Create a response from a cache item.
*
* @param \Psr\Cache\CacheItemInterface $cacheItem
*
* @return \Psr\Http\Message\ResponseInterface
*/
protected function createResponseFromCacheItem(CacheItemInterface $cacheItem)
{
$data = $cacheItem->get();
$response = $data['response'];
$stream = $this->streamFactory->createStream($data['body']);
try {
$stream->rewind();
} catch (Exception $e) {
throw new RewindStreamException('Cannot rewind stream.', 0, $e);
}
$response = $response->withBody($stream);
return $response;
}
/**
* Get the ETag from the cached response.
*
* @param \Psr\Cache\CacheItemInterface $cacheItem
*
* @return string|null
*/
protected function getETag(CacheItemInterface $cacheItem)
{
$data = $cacheItem->get();
foreach ($data['etag'] as $etag) {
if (!empty($etag)) {
return $etag;
}
}
}
}

21
vendor/graham-campbell/github/LICENSE vendored Normal file
View file

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2014-2018 Graham Campbell <graham@alt-three.com>
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.

View file

@ -0,0 +1,56 @@
{
"name": "graham-campbell/github",
"description": "GitHub Is A GitHub Bridge For Laravel 5",
"keywords": ["laravel", "framework", "github", "php-github-api", "PHP GitHub API", "github bridge", "bridge", "GitHub", "Laravel GitHub", "Laravel-GitHub", "Graham Campbell", "GrahamCampbell"],
"license": "MIT",
"authors": [
{
"name": "Graham Campbell",
"email": "graham@alt-three.com"
}
],
"require": {
"php": "^7.1.3",
"illuminate/contracts": "5.5.*|5.6.*|5.7.*",
"illuminate/support": "5.5.*|5.6.*|5.7.*",
"graham-campbell/cache-plugin": "^1.0",
"graham-campbell/manager": "^4.1",
"knplabs/github-api": "2.7.*|2.8.*|2.9.*|2.10.*"
},
"require-dev": {
"graham-campbell/analyzer": "^2.1",
"graham-campbell/testbench": "^5.1",
"madewithlove/illuminate-psr-cache-bridge": "^1.0",
"mockery/mockery": "^1.0",
"phpunit/phpunit": "^6.5|^7.0",
"php-http/guzzle6-adapter": "^1.0"
},
"suggest": {
"madewithlove/illuminate-psr-cache-bridge": "Allows caching GitHub HTTP requests"
},
"autoload": {
"psr-4": {
"GrahamCampbell\\GitHub\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"GrahamCampbell\\Tests\\GitHub\\": "tests/"
}
},
"config": {
"preferred-install": "dist"
},
"extra": {
"branch-alias": {
"dev-master": "7.5-dev"
},
"laravel": {
"providers": [
"GrahamCampbell\\GitHub\\GitHubServiceProvider"
]
}
},
"minimum-stability": "dev",
"prefer-stable": true
}

View file

@ -0,0 +1,91 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
return [
/*
|--------------------------------------------------------------------------
| Default Connection Name
|--------------------------------------------------------------------------
|
| Here you may specify which of the connections below you wish to use as
| your default connection for all work. Of course, you may use many
| connections at once using the manager class.
|
*/
'default' => 'main',
/*
|--------------------------------------------------------------------------
| GitHub Connections
|--------------------------------------------------------------------------
|
| Here are each of the connections setup for your application. Example
| configuration has been included, but you may add as many connections as
| you would like. Note that the 5 supported authentication methods are:
| "application", "jwt", "none", "password", and "token".
|
*/
'connections' => [
'main' => [
'token' => 'your-token',
'method' => 'token',
// 'backoff' => false,
// 'cache' => false,
// 'version' => 'v3',
// 'enterprise' => false,
],
'app' => [
'clientId' => 'your-client-id',
'clientSecret' => 'your-client-secret',
'method' => 'application',
// 'backoff' => false,
// 'cache' => false,
// 'version' => 'v3',
// 'enterprise' => false,
],
'jwt' => [
'token' => 'your-jwt-token',
'method' => 'jwt',
// 'backoff' => false,
// 'cache' => false,
// 'version' => 'v3',
// 'enterprise' => false,
],
'other' => [
'username' => 'your-username',
'password' => 'your-password',
'method' => 'password',
// 'backoff' => false,
// 'cache' => false,
// 'version' => 'v3',
// 'enterprise' => false,
],
'none' => [
'method' => 'none',
// 'backoff' => false,
// 'cache' => false,
// 'version' => 'v3',
// 'enterprise' => false,
],
],
];

View file

@ -0,0 +1,45 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\GitHub\Authenticators;
use Github\Client;
/**
* This is the abstract authenticator class.
*
* @author Graham Campbell <graham@alt-three.com>
*/
abstract class AbstractAuthenticator
{
/**
* The client to perform the authentication on.
*
* @var \Github\Client|null
*/
protected $client;
/**
* Set the client to perform the authentication on.
*
* @param \Github\Client $client
*
* @return \GrahamCampbell\GitHub\Authenticators\AuthenticatorInterface
*/
public function with(Client $client)
{
$this->client = $client;
return $this;
}
}

View file

@ -0,0 +1,49 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\GitHub\Authenticators;
use GitHub\Client;
use InvalidArgumentException;
/**
* This is the application authenticator class.
*
* @author Graham Campbell <graham@alt-three.com>
*/
class ApplicationAuthenticator extends AbstractAuthenticator implements AuthenticatorInterface
{
/**
* Authenticate the client, and return it.
*
* @param string[] $config
*
* @throws \InvalidArgumentException
*
* @return \Github\Client
*/
public function authenticate(array $config)
{
if (!$this->client) {
throw new InvalidArgumentException('The client instance was not given to the application authenticator.');
}
if (!array_key_exists('clientId', $config) || !array_key_exists('clientSecret', $config)) {
throw new InvalidArgumentException('The application authenticator requires a client id and secret.');
}
$this->client->authenticate($config['clientId'], $config['clientSecret'], Client::AUTH_URL_CLIENT_ID);
return $this->client;
}
}

View file

@ -0,0 +1,49 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\GitHub\Authenticators;
use InvalidArgumentException;
/**
* This is the authenticator factory class.
*
* @author Graham Campbell <graham@alt-three.com>
*/
class AuthenticatorFactory
{
/**
* Make a new authenticator instance.
*
* @param string $method
*
* @throws \InvalidArgumentException
*
* @return \GrahamCampbell\GitHub\Authenticators\AuthenticatorInterface
*/
public function make(string $method)
{
switch ($method) {
case 'application':
return new ApplicationAuthenticator(); // AUTH_URL_CLIENT_ID
case 'jwt':
return new JwtAuthenticator(); // AUTH_JWT
case 'password':
return new PasswordAuthenticator(); // AUTH_HTTP_PASSWORD
case 'token':
return new TokenAuthenticator(); // AUTH_HTTP_TOKEN
}
throw new InvalidArgumentException("Unsupported authentication method [$method].");
}
}

View file

@ -0,0 +1,44 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\GitHub\Authenticators;
use Github\Client;
/**
* This is the authenticator interface.
*
* @author Graham Campbell <graham@alt-three.com>
*/
interface AuthenticatorInterface
{
/**
* Set the client to perform the authentication on.
*
* @param \Github\Client $client
*
* @return \GrahamCampbell\GitHub\Authenticators\AuthenticatorInterface
*/
public function with(Client $client);
/**
* Authenticate the client, and return it.
*
* @param string[] $config
*
* @throws \InvalidArgumentException
*
* @return \Github\Client
*/
public function authenticate(array $config);
}

View file

@ -0,0 +1,50 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\GitHub\Authenticators;
use GitHub\Client;
use InvalidArgumentException;
/**
* This is the jwt authenticator class.
*
* @author Graham Campbell <graham@alt-three.com>
* @author Lucas Michot <lucas@semalead.com>
*/
class JwtAuthenticator extends AbstractAuthenticator implements AuthenticatorInterface
{
/**
* Authenticate the client, and return it.
*
* @param string[] $config
*
* @throws \InvalidArgumentException
*
* @return \Github\Client
*/
public function authenticate(array $config)
{
if (!$this->client) {
throw new InvalidArgumentException('The client instance was not given to the jwt authenticator.');
}
if (!array_key_exists('token', $config)) {
throw new InvalidArgumentException('The jwt authenticator requires a token.');
}
$this->client->authenticate($config['token'], Client::AUTH_JWT);
return $this->client;
}
}

View file

@ -0,0 +1,49 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\GitHub\Authenticators;
use GitHub\Client;
use InvalidArgumentException;
/**
* This is the password authenticator class.
*
* @author Graham Campbell <graham@alt-three.com>
*/
class PasswordAuthenticator extends AbstractAuthenticator implements AuthenticatorInterface
{
/**
* Authenticate the client, and return it.
*
* @param string[] $config
*
* @throws \InvalidArgumentException
*
* @return \Github\Client
*/
public function authenticate(array $config)
{
if (!$this->client) {
throw new InvalidArgumentException('The client instance was not given to the password authenticator.');
}
if (!array_key_exists('username', $config) || !array_key_exists('password', $config)) {
throw new InvalidArgumentException('The password authenticator requires a username and password.');
}
$this->client->authenticate($config['username'], $config['password'], Client::AUTH_HTTP_PASSWORD);
return $this->client;
}
}

View file

@ -0,0 +1,49 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\GitHub\Authenticators;
use GitHub\Client;
use InvalidArgumentException;
/**
* This is the token authenticator class.
*
* @author Graham Campbell <graham@alt-three.com>
*/
class TokenAuthenticator extends AbstractAuthenticator implements AuthenticatorInterface
{
/**
* Authenticate the client, and return it.
*
* @param string[] $config
*
* @throws \InvalidArgumentException
*
* @return \Github\Client
*/
public function authenticate(array $config)
{
if (!$this->client) {
throw new InvalidArgumentException('The client instance was not given to the token authenticator.');
}
if (!array_key_exists('token', $config)) {
throw new InvalidArgumentException('The token authenticator requires a token.');
}
$this->client->authenticate($config['token'], Client::AUTH_HTTP_TOKEN);
return $this->client;
}
}

View file

@ -0,0 +1,34 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\GitHub\Facades;
use Illuminate\Support\Facades\Facade;
/**
* This is the github facade class.
*
* @author Graham Campbell <graham@alt-three.com>
*/
class GitHub extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'github';
}
}

View file

@ -0,0 +1,104 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\GitHub;
use Github\Client;
use GrahamCampbell\GitHub\Authenticators\AuthenticatorFactory;
use GrahamCampbell\GitHub\Http\ClientBuilder;
use Http\Client\Common\Plugin\RetryPlugin;
use Illuminate\Contracts\Cache\Factory;
use InvalidArgumentException;
use Madewithlove\IlluminatePsrCacheBridge\Laravel\CacheItemPool;
/**
* This is the github factory class.
*
* @author Graham Campbell <graham@alt-three.com>
*/
class GitHubFactory
{
/**
* The authenticator factory instance.
*
* @var \GrahamCampbell\GitHub\Authenticators\AuthenticatorFactory
*/
protected $auth;
/**
* The illuminate cache instance.
*
* @var \Illuminate\Contracts\Cache\Factory|null
*/
protected $cache;
/**
* Create a new github factory instance.
*
* @param \GrahamCampbell\GitHub\Authenticators\AuthenticatorFactory $auth
* @param \Illuminate\Contracts\Cache\Factory|null $cache
*
* @return void
*/
public function __construct(AuthenticatorFactory $auth, Factory $cache = null)
{
$this->auth = $auth;
$this->cache = $cache;
}
/**
* Make a new github client.
*
* @param string[] $config
*
* @throws \InvalidArgumentException
*
* @return \Github\Client
*/
public function make(array $config)
{
$client = new Client($this->getBuilder($config), array_get($config, 'version'), array_get($config, 'enterprise'));
if (!array_key_exists('method', $config)) {
throw new InvalidArgumentException('The github factory requires an auth method.');
}
if ($config['method'] === 'none') {
return $client;
}
return $this->auth->make($config['method'])->with($client)->authenticate($config);
}
/**
* Get the http client builder.
*
* @param string[] $config
*
* @return \GrahamCampbell\GitHub\Http\ClientBuilder
*/
protected function getBuilder(array $config)
{
$builder = new ClientBuilder();
if ($backoff = array_get($config, 'backoff')) {
$builder->addPlugin(new RetryPlugin(['retries' => $backoff === true ? 2 : $backoff]));
}
if ($this->cache && class_exists(CacheItemPool::class) && $cache = array_get($config, 'cache')) {
$builder->addCache(new CacheItemPool($this->cache->store($cache === true ? null : $cache)));
}
return $builder;
}
}

View file

@ -0,0 +1,128 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\GitHub;
use GrahamCampbell\Manager\AbstractManager;
use Illuminate\Contracts\Config\Repository;
/**
* This is the github manager class.
*
* @method \Github\Api\CurrentUser currentUser()
* @method \Github\Api\CurrentUser me()
* @method \Github\Api\Enterprise ent()
* @method \Github\Api\Enterprise enterprise()
* @method \Github\Api\Miscellaneous\CodeOfConduct codeOfConduct()
* @method \Github\Api\Miscellaneous\Emojis emojis()
* @method \Github\Api\GitData git()
* @method \Github\Api\GitData gitData()
* @method \Github\Api\Gists gist()
* @method \Github\Api\Gists gists()
* @method \Github\Api\Miscellaneous\Gitignore gitignore()
* @method \Github\Api\Integrations integration() (deprecated)
* @method \Github\Api\Integrations integrations() (deprecated)
* @method \Github\Api\Apps apps()
* @method \Github\Api\Issue issue()
* @method \Github\Api\Issue issues()
* @method \Github\Api\Markdown markdown()
* @method \Github\Api\Notification notification()
* @method \Github\Api\Notification notifications()
* @method \Github\Api\Organization organization()
* @method \Github\Api\Organization organizations()
* @method \Github\Api\Organization\Projects orgProject()
* @method \Github\Api\Organization\Projects orgProjects()
* @method \Github\Api\Organization\Projects organizationProject()
* @method \Github\Api\Organization\Projects organizationProjects()
* @method \Github\Api\PullRequest pr()
* @method \Github\Api\PullRequest pullRequest()
* @method \Github\Api\PullRequest pullRequests()
* @method \Github\Api\RateLimit rateLimit()
* @method \Github\Api\Repo repo()
* @method \Github\Api\Repo repos()
* @method \Github\Api\Repo repository()
* @method \Github\Api\Repo repositories()
* @method \Github\Api\Search search()
* @method \Github\Api\Organization team()
* @method \Github\Api\Organization teams()
* @method \Github\Api\User user()
* @method \Github\Api\User users()
* @method \Github\Api\Authorizations authorization()
* @method \Github\Api\Authorizations authorizations()
* @method \Github\Api\Meta meta()
* @method \Github\Api\GraphQL graphql()
* @method \Github\Api\ApiInterface api(string $name)
* @method void authenticate(string $tokenOrLogin, string|null $password = null, string|null $authMethod = null)
* @method string getApiVersion()
* @method void addCache(\Psr\Cache\CacheItemPoolInterface $cachePool, array $config = [])
* @method void removeCache()
* @method \Http\Client\Common\HttpMethodsClient getHttpClient()
* @method \Psr\Http\Message\ResponseInterface|null getLastResponse()
*
* @author Graham Campbell <graham@alt-three.com>
*/
class GitHubManager extends AbstractManager
{
/**
* The factory instance.
*
* @var \GrahamCampbell\GitHub\GitHubFactory
*/
protected $factory;
/**
* Create a new github manager instance.
*
* @param \Illuminate\Contracts\Config\Repository $config
* @param \GrahamCampbell\GitHub\GitHubFactory $factory
*
* @return void
*/
public function __construct(Repository $config, GitHubFactory $factory)
{
parent::__construct($config);
$this->factory = $factory;
}
/**
* Create the connection instance.
*
* @param array $config
*
* @return \Github\Client
*/
protected function createConnection(array $config)
{
return $this->factory->make($config);
}
/**
* Get the configuration name.
*
* @return string
*/
protected function getConfigName()
{
return 'github';
}
/**
* Get the factory instance.
*
* @return \GrahamCampbell\GitHub\GitHubFactory
*/
public function getFactory()
{
return $this->factory;
}
}

View file

@ -0,0 +1,149 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\GitHub;
use Github\Client;
use GrahamCampbell\GitHub\Authenticators\AuthenticatorFactory;
use Illuminate\Contracts\Container\Container;
use Illuminate\Foundation\Application as LaravelApplication;
use Illuminate\Support\ServiceProvider;
use Laravel\Lumen\Application as LumenApplication;
/**
* This is the github service provider class.
*
* @author Graham Campbell <graham@alt-three.com>
*/
class GitHubServiceProvider extends ServiceProvider
{
/**
* Boot the service provider.
*
* @return void
*/
public function boot()
{
$this->setupConfig();
}
/**
* Setup the config.
*
* @return void
*/
protected function setupConfig()
{
$source = realpath($raw = __DIR__.'/../config/github.php') ?: $raw;
if ($this->app instanceof LaravelApplication && $this->app->runningInConsole()) {
$this->publishes([$source => config_path('github.php')]);
} elseif ($this->app instanceof LumenApplication) {
$this->app->configure('github');
}
$this->mergeConfigFrom($source, 'github');
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->registerAuthFactory();
$this->registerGitHubFactory();
$this->registerManager();
$this->registerBindings();
}
/**
* Register the auth factory class.
*
* @return void
*/
protected function registerAuthFactory()
{
$this->app->singleton('github.authfactory', function () {
return new AuthenticatorFactory();
});
$this->app->alias('github.authfactory', AuthenticatorFactory::class);
}
/**
* Register the github factory class.
*
* @return void
*/
protected function registerGitHubFactory()
{
$this->app->singleton('github.factory', function (Container $app) {
$auth = $app['github.authfactory'];
$cache = $app['cache'];
return new GitHubFactory($auth, $cache);
});
$this->app->alias('github.factory', GitHubFactory::class);
}
/**
* Register the manager class.
*
* @return void
*/
protected function registerManager()
{
$this->app->singleton('github', function (Container $app) {
$config = $app['config'];
$factory = $app['github.factory'];
return new GitHubManager($config, $factory);
});
$this->app->alias('github', GitHubManager::class);
}
/**
* Register the bindings.
*
* @return void
*/
protected function registerBindings()
{
$this->app->bind('github.connection', function (Container $app) {
$manager = $app['github'];
return $manager->connection();
});
$this->app->alias('github.connection', Client::class);
}
/**
* Get the services provided by the provider.
*
* @return string[]
*/
public function provides()
{
return [
'github.authfactory',
'github.factory',
'github',
'github.connection',
];
}
}

View file

@ -0,0 +1,100 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel GitHub.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\GitHub\Http;
use Github\HttpClient\Builder;
use GrahamCampbell\CachePlugin\CachePlugin;
use Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator;
use Psr\Cache\CacheItemPoolInterface;
use ReflectionClass;
/**
* This is the client builder class.
*
* @author Graham Campbell <graham@alt-three.com>
*/
class ClientBuilder extends Builder
{
/**
* Add a cache plugin to cache responses locally.
*
* @param \Psr\Cache\CacheItemPoolInterface $cachePool
* @param array $config
*
* @return void
*/
public function addCache(CacheItemPoolInterface $cachePool, array $config = [])
{
$this->setCachePlugin($cachePool, $config['generator'] ?? null, $config['lifetime'] ?? null);
$this->setPropertyValue('httpClientModified', true);
}
/**
* Add a cache plugin to cache responses locally.
*
* @param \Psr\Cache\CacheItemPoolInterface $cachePool
* @param \Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator|null $generator
* @param int|null $lifetime
*
* @return void
*/
protected function setCachePlugin(CacheItemPoolInterface $cachePool, CacheKeyGenerator $generator = null, int $lifetime = null)
{
$stream = $this->getPropertyValue('streamFactory');
$this->setPropertyValue('cachePlugin', new CachePlugin($cachePool, $stream, $generator, $lifetime));
}
/**
* Get the value of the given private property on the builder.
*
* @param string $name
*
* @return mixed
*/
protected function getPropertyValue(string $name)
{
return static::getProperty($name)->getValue($this);
}
/**
* Set the value of the given private property on the builder.
*
* @param string $name
* @param mixed $value
*
* @return void
*/
protected function setPropertyValue(string $name, $value)
{
return static::getProperty($name)->setValue($this, $value);
}
/**
* Get the builder reflection property for the given name.
*
* @param string $name
*
* @return \ReflectionProperty
*/
protected static function getProperty(string $name)
{
$prop = (new ReflectionClass(Builder::class))->getProperty($name);
$prop->setAccessible(true);
return $prop;
}
}

21
vendor/graham-campbell/manager/LICENSE vendored Normal file
View file

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2014-2018 Graham Campbell <graham@alt-three.com>
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.

View file

@ -0,0 +1,43 @@
{
"name": "graham-campbell/manager",
"description": "Manager Provides Some Manager Functionality For Laravel 5",
"keywords": ["laravel", "framework", "manager", "connector", "interface", "Manager", "Laravel Manager", "Laravel-Manager", "Graham Campbell", "GrahamCampbell"],
"license": "MIT",
"authors": [
{
"name": "Graham Campbell",
"email": "graham@alt-three.com"
}
],
"require": {
"php": "^7.1.3",
"illuminate/contracts": "5.5.*|5.6.*|5.7.*",
"illuminate/support": "5.5.*|5.6.*|5.7.*"
},
"require-dev": {
"graham-campbell/analyzer": "^2.1",
"graham-campbell/testbench-core": "^3.0",
"mockery/mockery": "^1.0",
"phpunit/phpunit": "^6.5|^7.0"
},
"autoload": {
"psr-4": {
"GrahamCampbell\\Manager\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"GrahamCampbell\\Tests\\Manager\\": "tests/"
}
},
"config": {
"preferred-install": "dist"
},
"extra": {
"branch-alias": {
"dev-master": "4.1-dev"
}
},
"minimum-stability": "dev",
"prefer-stable": true
}

View file

@ -0,0 +1,243 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel Manager.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\Manager;
use Closure;
use Illuminate\Contracts\Config\Repository;
use InvalidArgumentException;
/**
* This is the abstract manager class.
*
* @author Graham Campbell <graham@alt-three.com>
*/
abstract class AbstractManager implements ManagerInterface
{
/**
* The config instance.
*
* @var \Illuminate\Contracts\Config\Repository
*/
protected $config;
/**
* The active connection instances.
*
* @var object[]
*/
protected $connections = [];
/**
* The custom connection resolvers.
*
* @var callable[]
*/
protected $extensions = [];
/**
* Create a new manager instance.
*
* @param \Illuminate\Contracts\Config\Repository $config
*
* @return void
*/
public function __construct(Repository $config)
{
$this->config = $config;
}
/**
* Get a connection instance.
*
* @param string|null $name
*
* @return object
*/
public function connection(string $name = null)
{
$name = $name ?: $this->getDefaultConnection();
if (!isset($this->connections[$name])) {
$this->connections[$name] = $this->makeConnection($name);
}
return $this->connections[$name];
}
/**
* Reconnect to the given connection.
*
* @param string|null $name
*
* @return object
*/
public function reconnect(string $name = null)
{
$name = $name ?: $this->getDefaultConnection();
$this->disconnect($name);
return $this->connection($name);
}
/**
* Disconnect from the given connection.
*
* @param string|null $name
*
* @return void
*/
public function disconnect(string $name = null)
{
$name = $name ?: $this->getDefaultConnection();
unset($this->connections[$name]);
}
/**
* Create the connection instance.
*
* @param array $config
*
* @return object
*/
abstract protected function createConnection(array $config);
/**
* Make the connection instance.
*
* @param string $name
*
* @return object
*/
protected function makeConnection(string $name)
{
$config = $this->getConnectionConfig($name);
if (isset($this->extensions[$name])) {
return $this->extensions[$name]($config);
}
if ($driver = array_get($config, 'driver')) {
if (isset($this->extensions[$driver])) {
return $this->extensions[$driver]($config);
}
}
return $this->createConnection($config);
}
/**
* Get the configuration name.
*
* @return string
*/
abstract protected function getConfigName();
/**
* Get the configuration for a connection.
*
* @param string|null $name
*
* @throws \InvalidArgumentException
*
* @return array
*/
public function getConnectionConfig(string $name = null)
{
$name = $name ?: $this->getDefaultConnection();
$connections = $this->config->get($this->getConfigName().'.connections');
if (!is_array($config = array_get($connections, $name)) && !$config) {
throw new InvalidArgumentException("Connection [$name] not configured.");
}
$config['name'] = $name;
return $config;
}
/**
* Get the default connection name.
*
* @return string
*/
public function getDefaultConnection()
{
return $this->config->get($this->getConfigName().'.default');
}
/**
* Set the default connection name.
*
* @param string $name
*
* @return void
*/
public function setDefaultConnection(string $name)
{
$this->config->set($this->getConfigName().'.default', $name);
}
/**
* Register an extension connection resolver.
*
* @param string $name
* @param callable $resolver
*
* @return void
*/
public function extend(string $name, callable $resolver)
{
if ($resolver instanceof Closure) {
$this->extensions[$name] = $resolver->bindTo($this, $this);
} else {
$this->extensions[$name] = $resolver;
}
}
/**
* Return all of the created connections.
*
* @return object[]
*/
public function getConnections()
{
return $this->connections;
}
/**
* Get the config instance.
*
* @return \Illuminate\Contracts\Config\Repository
*/
public function getConfig()
{
return $this->config;
}
/**
* Dynamically pass methods to the default connection.
*
* @param string $method
* @param array $parameters
*
* @return mixed
*/
public function __call(string $method, array $parameters)
{
return $this->connection()->$method(...$parameters);
}
}

View file

@ -0,0 +1,31 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel Manager.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\Manager;
/**
* This is the connector interface.
*
* @author Graham Campbell <graham@alt-three.com>
*/
interface ConnectorInterface
{
/**
* Establish a connection.
*
* @param array $config
*
* @return object
*/
public function connect(array $config);
}

View file

@ -0,0 +1,91 @@
<?php
declare(strict_types=1);
/*
* This file is part of Laravel Manager.
*
* (c) Graham Campbell <graham@alt-three.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace GrahamCampbell\Manager;
/**
* This is the manager interface.
*
* @author Graham Campbell <graham@alt-three.com>
*/
interface ManagerInterface
{
/**
* Get a connection instance.
*
* @param string|null $name
*
* @return object
*/
public function connection(string $name = null);
/**
* Reconnect to the given connection.
*
* @param string|null $name
*
* @return object
*/
public function reconnect(string $name = null);
/**
* Disconnect from the given connection.
*
* @param string|null $name
*
* @return void
*/
public function disconnect(string $name = null);
/**
* Get the configuration for a connection.
*
* @param string|null $name
*
* @return array
*/
public function getConnectionConfig(string $name = null);
/**
* Get the default connection name.
*
* @return string
*/
public function getDefaultConnection();
/**
* Set the default connection name.
*
* @param string $name
*
* @return void
*/
public function setDefaultConnection(string $name);
/**
* Register an extension connection resolver.
*
* @param string $name
* @param callable $resolver
*
* @return void
*/
public function extend(string $name, callable $resolver);
/**
* Return all of the created connections.
*
* @return object[]
*/
public function getConnections();
}

13
vendor/knplabs/github-api/.editorconfig vendored Normal file
View file

@ -0,0 +1,13 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
[*.yml]
indent_style = space
indent_size = 2

14
vendor/knplabs/github-api/.php_cs vendored Normal file
View file

@ -0,0 +1,14 @@
<?php
$finder = PhpCsFixer\Finder::create()
->in(__DIR__);
$config = PhpCsFixer\Config::create()
->setRiskyAllowed(true)
->setRules([
])
->setFinder($finder)
;
return $config;

View file

@ -0,0 +1,5 @@
preset: recommended
disabled:
- align_double_arrow
- no_multiline_whitespace_before_semicolons

249
vendor/knplabs/github-api/CHANGELOG.md vendored Normal file
View file

@ -0,0 +1,249 @@
# Change Log
The change log describes what is "Added", "Removed", "Changed" or "Fixed" between each release.
## 2.10.1
### Fixed
- Convert the assignee parameter to array to avoid getting a 422 error on github (#738)
- Fix GraphQL test warnings when they do not assert anything (#735)
### Changed
- Check for BC breaks during the travis build (#734)
## 2.10.0
### Added
- Support for "before" parameter on Notification API (#724)
### Changed
- Allow unspecified `event` when creating review (#723)
### Fixed
- Adjust: installationn access token endpoint (#731)
- Fixed "get single label" example and add correct example for getting issue's labels (#732)
- Add comment about `Key` constructor argument (#722)
## 2.9.0
### Added
- API endpoint `Github\Api\Repo::transfer()`
- API endpoint `Github\Api\Notification::markThreadRead()`
- API endpoint `Github\Api\Search::topics()`
### Fixed
- Make sure to always reset the "per page" in `Github\ResultPager::fetchAll()`.
## 2.8.0
### Added
- Allow our HTTP plugins to show up in the Symfony web profiler page. (#687)
- Repository documentation to current user (#671)
- Add collaborator permission call (#678)
- Add missing parameters for User/CurrentUser Repositories (#684)
- Pimp the readme with badge poser (#686)
### Fixed
- Typo in assignee documentation
- Missing use statement in security example
- Fixed phpdoc typo (#695)
- Replace use of deprecated api to the correct one in the security docs (#697)
### Changed
- Updated requirements in readme (#689)
## 2.7.0
### Added
- Phpunit 6 compatibility
- `Github\Api\AbstractApi::setPage()` to allow you to set the page on all endpoints.
- Support for query parameters and request headers on `Github\Api\User::following` and `Github\Api\User::followers`
- API endpoint `Github\Api\CurrentUser\Emails::allPublic()`
- API endpoint `Github\Api\Search::commits()`
- API endpoint `Github\Api\Miscellaneous\CodeOfConduct`
- API endpoint `Github\Api\Repo::topics()`
- API endpoint `Github\Api\Repo::replaceTopics()`
### Fixed
- Fixed bug in `PathPrepend` plugin where "api/vX" could be duplicated.
### Changed
- Improved documentation and doc blocks
### Removed
- Dropped support for php 5.5
### Deprecated
The following endpoints were deprecated by Github and are also deprecated in the client:
- `Github\Api\Repo::find()`
- `Github\Api\User::find()`
- `Github\Api\Issue::find()`
## 2.6.0
### Added
- Support for graphql api [variables](https://developer.github.com/v4/guides/forming-calls/#working-with-variables) (#612)
- Added missing branch protection methods (#616)
- Helper function `fromFile ` to get GraphQL queries from a file (#628)
- Extra parameter `params` to collaborators api calls (#623)
- Documentation for GitData API (#613)
### Fixed
- Remove `body` as a required parameter when creating an issue (#624)
- Minor fixes in example code (#617)
## 2.5.0
### Added
- Stable support for graphql api (V4) (#593)
- Stable support for apps (previously integrations) (#592)
- `Repo::events()`
### Fixed
- Incorrect link in repository search docs (#594)
- Added the required parameter `$message` on `Review::dismiss`.
## 2.4.0
### Added
- `Integrations::configure` to allow accessing early access program endpoints.
- Add support for pagination and parameters in the pull request comments
- Add the ability to fetch user installations (`CurrentUser::installations`)
- Allow getting repo info by id (`Repo::showById`)
- Allow fetching repositories for a specific installation and user (`CurrentUser::repositoriesByInstallation`)
### Changed
- `PullRequest\Review` and `PullRequest\ReviewRequest` is now part of the official API. No need to call `configure`.
## 2.3.0
### Fixed
- Issue where we serve the wrong cached response. We vary on authorization header now.
### Added
- `PullRequest::status`
- Throw InvalidArgumentException on `PullRequest::merge` when wrong merge method is used.
- Added `Protection::configure`
### Changed
- First argument to `Integrations::listRepositories()` is now optional.
- Moved tests from "functional" to "integration"
## 2.2.0
### Added
- API support for Pull Request Review Requests.
- API support for Traffic.
- API support for issue Assignees.
- API support for Miscellaneous Gitignore and Emojis.
- Added endpoints for issue lock, unlock and issue label show.
- Added more parameters to `User::starred`.
- Fluid interface by allowing `configure()` to return `$this`.
- `configure()` support for issues API.
### Fixed
- Cache issue where some requests are not cached
- Issue with `User::all()` creates a query with double question marks.
## 2.1.0
### Added
- Add support for retrieving a single notification info using his ID
- Add a function to get user organizations
- Added GraphQL support
- Add page variable to organization repo list (Organization::repositories())
- Add support for pull request review.
- Add support for adding branch protection.
### Fixed
- Bug with double slashes when using enterprise URL.
- Bug when headers not being passed to request (#529)
## 2.0.0
### Added
- Support for JWT authentication
- API for Organization\Members
- API for Integrations
- API for Repo\Cards
- API for Repo\Columns
- API for Repo\Projects
- API for User\MyRepositories
- Methods in Repo API for frequency and participation
### Changed
- `ApiLimitExceedException::__construct` has a new second parameter for the remaining API calls.
- First parameter of `Github\Client` has changed type from `\Http\Client\HttpClient` to
`Github\HttpClient\Builder`. A factory class was also added. To upgrade you need to change:
```php
// Old way does not work:
$github = new Github\Client($httpClient);
// New way will work:
$github = new Github\Client(new Github\HttpClient\Builder($httpClient));
$github = Github\Client::createWithHttpClient($httpClient);
```
- Renamed the currentuser `DeployKeys` api class to `PublicKeys` to reflect to github api name.
## 2.0.0-rc4
### Added
- HTTPlug to decouple from Guzzle
- `Github\Client::getLastResponse` was added
- Support for PSR-6 cache
- `Github\Client::addPlugin` and `Github\Client::removePlugin`
- `Github\Client::getApiVersion`
- `Github\Client::removeCache`
### Changed
- Uses of `Github\HttpClient\HttpClientInterface` is replaced by `Http\Client\HttpClient` ie the constructor of `Github\Client`.
- We use PSR-7's representation of HTTP message instead of `Guzzle\Http\Message\Response` and `Guzzle\Http\Message\Request`.
- `Github\Client::addHeaders` was added instead of `Github\Client::setHeaders`
- Signature of `Github\Client::useCache` has changed. First argument must be a `CacheItemPoolInterface`
- We use PSR-4 instead of PSR-0
### Removed
- Support for PHP 5.3 and 5.4
- `Github/HttpClient/HttpClientInterface` was removed
- `Github/HttpClient/HttpClient` was removed
- All classes in `Github/HttpClient/HttpClient/Listener/*` were removed
- `Github/HttpClient/CachedHttpClient` was removed
- All classes in `Github/HttpClient/Cache/*` were removed
## 1.7.1
No change log before this version

22
vendor/knplabs/github-api/LICENSE vendored Normal file
View file

@ -0,0 +1,22 @@
The MIT License
Copyright (c) 2012 KnpLabs
Copyright (c) 2010 Thibault Duplessis
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.

111
vendor/knplabs/github-api/README.md vendored Normal file
View file

@ -0,0 +1,111 @@
# PHP GitHub API
[![Build Status](https://travis-ci.org/KnpLabs/php-github-api.svg?branch=master)](https://travis-ci.org/KnpLabs/php-github-api)
[![StyleCI](https://styleci.io/repos/3948501/shield?style=flat)](https://styleci.io/repos/3948501)
[![Latest Stable Version](https://poser.pugx.org/knplabs/github-api/v/stable)](https://packagist.org/packages/knplabs/github-api)
[![Total Downloads](https://poser.pugx.org/knplabs/github-api/downloads)](https://packagist.org/packages/knplabs/github-api)
[![Latest Unstable Version](https://poser.pugx.org/knplabs/github-api/v/unstable)](https://packagist.org/packages/knplabs/github-api)
[![Monthly Downloads](https://poser.pugx.org/knplabs/github-api/d/monthly)](https://packagist.org/packages/knplabs/github-api)
[![Daily Downloads](https://poser.pugx.org/knplabs/github-api/d/daily)](https://packagist.org/packages/knplabs/github-api)
A simple Object Oriented wrapper for GitHub API, written with PHP5.
Uses [GitHub API v3](http://developer.github.com/v3/) & supports [GitHub API v4](http://developer.github.com/v4). The object API (v3) is very similar to the RESTful API.
## Features
* Light and fast thanks to lazy loading of API classes
* Extensively tested and documented
## Requirements
* PHP >= 5.6
* A [HTTP client](https://packagist.org/providers/php-http/client-implementation)
* A [PSR-7 implementation](https://packagist.org/providers/psr/http-message-implementation)
* (optional) PHPUnit to run tests.
## Install
Via Composer:
```bash
$ composer require knplabs/github-api php-http/guzzle6-adapter
```
Why `php-http/guzzle6-adapter`? We are decoupled from any HTTP messaging client with help by [HTTPlug](http://httplug.io/). Read about clients in our [docs](doc/customize.md).
## Using Laravel?
[Laravel GitHub](https://github.com/GrahamCampbell/Laravel-GitHub) by [Graham Campbell](https://github.com/GrahamCampbell) might interest you.
## Basic usage of `php-github-api` client
```php
<?php
// This file is generated by Composer
require_once __DIR__ . '/vendor/autoload.php';
$client = new \Github\Client();
$repositories = $client->api('user')->repositories('ornicar');
```
From `$client` object, you can access to all GitHub.
## Cache usage
This example uses the PSR6 cache pool [redis-adapter](https://github.com/php-cache/redis-adapter). See http://www.php-cache.com/ for alternatives.
```php
<?php
// This file is generated by Composer
require_once __DIR__ . '/vendor/autoload.php';
use Cache\Adapter\Redis\RedisCachePool;
$client = new \Redis();
$client->connect('127.0.0.1', 6379);
// Create a PSR6 cache pool
$pool = new RedisCachePool($client);
$client = new \Github\Client();
$client->addCache($pool);
// Do some request
// Stop using cache
$client->removeCache();
```
Using cache, the client will get cached responses if resources haven't changed since last time,
**without** reaching the `X-Rate-Limit` [imposed by github](http://developer.github.com/v3/#rate-limiting).
## Documentation
See the [`doc` directory](doc/) for more detailed documentation.
## License
`php-github-api` is licensed under the MIT License - see the LICENSE file for details
## Credits
### Sponsored by
[![KnpLabs Team](http://knplabs.com/front/images/knp-labs-logo.png)](http://knplabs.com)
### Contributors
- Thanks to [Thibault Duplessis aka. ornicar](http://github.com/ornicar) for his first version of this library.
- Thanks to [Joseph Bielawski aka. stloyd](http://github.com/stloyd) for his contributions and support.
- Thanks to [noloh](http://github.com/noloh) for his contribution on the Object API.
- Thanks to [bshaffer](http://github.com/bshaffer) for his contribution on the Repo API.
- Thanks to [Rolf van de Krol](http://github.com/rolfvandekrol) for his countless contributions.
- Thanks to [Nicolas Pastorino](http://github.com/jeanvoye) for his contribution on the Pull Request API.
- Thanks to [Edoardo Rivello](http://github.com/erivello) for his contribution on the Gists API.
- Thanks to [Miguel Piedrafita](https://github.com/m1guelpf) for his contribution to the v4 & Apps API.
Thanks to GitHub for the high quality API and documentation.

49
vendor/knplabs/github-api/composer.json vendored Normal file
View file

@ -0,0 +1,49 @@
{
"name": "knplabs/github-api",
"type": "library",
"description": "GitHub API v3 client",
"homepage": "https://github.com/KnpLabs/php-github-api",
"keywords": ["github", "gh", "api", "gist"],
"license": "MIT",
"authors": [
{
"name": "KnpLabs Team",
"homepage": "http://knplabs.com"
},
{
"name": "Thibault Duplessis",
"email": "thibault.duplessis@gmail.com",
"homepage": "http://ornicar.github.com"
}
],
"require": {
"php": "^5.6 || ^7.0",
"psr/http-message": "^1.0",
"psr/cache": "^1.0",
"php-http/httplug": "^1.1",
"php-http/discovery": "^1.0",
"php-http/client-implementation": "^1.0",
"php-http/client-common": "^1.6",
"php-http/cache-plugin": "^1.4"
},
"require-dev": {
"phpunit/phpunit": "^5.5 || ^6.0",
"php-http/guzzle6-adapter": "^1.0",
"php-http/mock-client": "^1.0",
"guzzlehttp/psr7": "^1.2",
"cache/array-adapter": "^0.4"
},
"autoload": {
"psr-4": { "Github\\": "lib/Github/" }
},
"autoload-dev": {
"psr-4": { "Github\\Tests\\": "test/Github/Tests/"}
},
"minimum-stability": "dev",
"prefer-stable": true,
"extra": {
"branch-alias": {
"dev-master": "2.10.x-dev"
}
}
}

View file

@ -0,0 +1,243 @@
<?php
namespace Github\Api;
use Github\Client;
use Github\HttpClient\Message\ResponseMediator;
/**
* Abstract class for Api classes.
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
abstract class AbstractApi implements ApiInterface
{
/**
* The client.
*
* @var Client
*/
protected $client;
/**
* The requested page (GitHub pagination).
*
* @var null|int
*/
private $page;
/**
* Number of items per page (GitHub pagination).
*
* @var null|int
*/
protected $perPage;
/**
* @param Client $client
*/
public function __construct(Client $client)
{
$this->client = $client;
}
public function configure()
{
}
/**
* @return null|int
*/
public function getPage()
{
return $this->page;
}
/**
* @param null|int $page
*/
public function setPage($page)
{
$this->page = (null === $page ? $page : (int) $page);
return $this;
}
/**
* @return null|int
*/
public function getPerPage()
{
return $this->perPage;
}
/**
* @param null|int $perPage
*/
public function setPerPage($perPage)
{
$this->perPage = (null === $perPage ? $perPage : (int) $perPage);
return $this;
}
/**
* Send a GET request with query parameters.
*
* @param string $path Request path.
* @param array $parameters GET parameters.
* @param array $requestHeaders Request Headers.
*
* @return array|string
*/
protected function get($path, array $parameters = [], array $requestHeaders = [])
{
if (null !== $this->page && !isset($parameters['page'])) {
$parameters['page'] = $this->page;
}
if (null !== $this->perPage && !isset($parameters['per_page'])) {
$parameters['per_page'] = $this->perPage;
}
if (array_key_exists('ref', $parameters) && is_null($parameters['ref'])) {
unset($parameters['ref']);
}
if (count($parameters) > 0) {
$path .= '?'.http_build_query($parameters);
}
$response = $this->client->getHttpClient()->get($path, $requestHeaders);
return ResponseMediator::getContent($response);
}
/**
* Send a HEAD request with query parameters.
*
* @param string $path Request path.
* @param array $parameters HEAD parameters.
* @param array $requestHeaders Request headers.
*
* @return \Psr\Http\Message\ResponseInterface
*/
protected function head($path, array $parameters = [], array $requestHeaders = [])
{
if (array_key_exists('ref', $parameters) && is_null($parameters['ref'])) {
unset($parameters['ref']);
}
$response = $this->client->getHttpClient()->head($path.'?'.http_build_query($parameters), $requestHeaders);
return $response;
}
/**
* Send a POST request with JSON-encoded parameters.
*
* @param string $path Request path.
* @param array $parameters POST parameters to be JSON encoded.
* @param array $requestHeaders Request headers.
*
* @return array|string
*/
protected function post($path, array $parameters = [], array $requestHeaders = [])
{
return $this->postRaw(
$path,
$this->createJsonBody($parameters),
$requestHeaders
);
}
/**
* Send a POST request with raw data.
*
* @param string $path Request path.
* @param string $body Request body.
* @param array $requestHeaders Request headers.
*
* @return array|string
*/
protected function postRaw($path, $body, array $requestHeaders = [])
{
$response = $this->client->getHttpClient()->post(
$path,
$requestHeaders,
$body
);
return ResponseMediator::getContent($response);
}
/**
* Send a PATCH request with JSON-encoded parameters.
*
* @param string $path Request path.
* @param array $parameters POST parameters to be JSON encoded.
* @param array $requestHeaders Request headers.
*
* @return array|string
*/
protected function patch($path, array $parameters = [], array $requestHeaders = [])
{
$response = $this->client->getHttpClient()->patch(
$path,
$requestHeaders,
$this->createJsonBody($parameters)
);
return ResponseMediator::getContent($response);
}
/**
* Send a PUT request with JSON-encoded parameters.
*
* @param string $path Request path.
* @param array $parameters POST parameters to be JSON encoded.
* @param array $requestHeaders Request headers.
*
* @return array|string
*/
protected function put($path, array $parameters = [], array $requestHeaders = [])
{
$response = $this->client->getHttpClient()->put(
$path,
$requestHeaders,
$this->createJsonBody($parameters)
);
return ResponseMediator::getContent($response);
}
/**
* Send a DELETE request with JSON-encoded parameters.
*
* @param string $path Request path.
* @param array $parameters POST parameters to be JSON encoded.
* @param array $requestHeaders Request headers.
*
* @return array|string
*/
protected function delete($path, array $parameters = [], array $requestHeaders = [])
{
$response = $this->client->getHttpClient()->delete(
$path,
$requestHeaders,
$this->createJsonBody($parameters)
);
return ResponseMediator::getContent($response);
}
/**
* Create a JSON encoded version of an array of parameters.
*
* @param array $parameters Request parameters
*
* @return null|string
*/
protected function createJsonBody(array $parameters)
{
return (count($parameters) === 0) ? null : json_encode($parameters, empty($parameters) ? JSON_FORCE_OBJECT : 0);
}
}

View file

@ -0,0 +1,63 @@
<?php
namespace Github\Api;
/**
* A trait to make sure we add accept headers on all requests.
*
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
*/
trait AcceptHeaderTrait
{
protected $acceptHeaderValue = null;
protected function get($path, array $parameters = [], array $requestHeaders = [])
{
return parent::get($path, $parameters, $this->mergeHeaders($requestHeaders));
}
protected function head($path, array $parameters = [], array $requestHeaders = [])
{
return parent::head($path, $parameters, $this->mergeHeaders($requestHeaders));
}
protected function post($path, array $parameters = [], array $requestHeaders = [])
{
return parent::post($path, $parameters, $this->mergeHeaders($requestHeaders));
}
protected function postRaw($path, $body, array $requestHeaders = [])
{
return parent::postRaw($path, $body, $this->mergeHeaders($requestHeaders));
}
protected function patch($path, array $parameters = [], array $requestHeaders = [])
{
return parent::patch($path, $parameters, $this->mergeHeaders($requestHeaders));
}
protected function put($path, array $parameters = [], array $requestHeaders = [])
{
return parent::put($path, $parameters, $this->mergeHeaders($requestHeaders));
}
protected function delete($path, array $parameters = [], array $requestHeaders = [])
{
return parent::delete($path, $parameters, $this->mergeHeaders($requestHeaders));
}
/**
* Append a new accept header on all requests.
*
* @return array
*/
private function mergeHeaders(array $headers = [])
{
$default = [];
if ($this->acceptHeaderValue) {
$default = ['Accept' => $this->acceptHeaderValue];
}
return array_merge($default, $headers);
}
}

View file

@ -0,0 +1,15 @@
<?php
namespace Github\Api;
/**
* Api interface.
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
interface ApiInterface
{
public function getPerPage();
public function setPerPage($perPage);
}

View file

@ -0,0 +1,93 @@
<?php
namespace Github\Api;
/**
* @link https://developer.github.com/v3/apps/
*
* @author Nils Adermann <naderman@naderman.de>
*/
class Apps extends AbstractApi
{
/**
* Create an access token for an installation.
*
* @param int $installationId An integration installation id
* @param int $userId An optional user id on behalf of whom the
* token will be requested
*
* @link https://developer.github.com/v3/apps/#create-a-new-installation-token
*
* @return array token and token metadata
*/
public function createInstallationToken($installationId, $userId = null)
{
$parameters = [];
if ($userId) {
$parameters['user_id'] = $userId;
}
return $this->post('/app/installations/'.rawurlencode($installationId).'/access_tokens', $parameters);
}
/**
* Find all installations for the authenticated application.
*
* @link https://developer.github.com/v3/apps/#find-installations
*
* @return array
*/
public function findInstallations()
{
return $this->get('/app/installations');
}
/**
* List repositories that are accessible to the authenticated installation.
*
* @link https://developer.github.com/v3/apps/installations/#list-repositories
*
* @param int $userId
*
* @return array
*/
public function listRepositories($userId = null)
{
$parameters = [];
if ($userId) {
$parameters['user_id'] = $userId;
}
return $this->get('/installation/repositories', $parameters);
}
/**
* Add a single repository to an installation.
*
* @link https://developer.github.com/v3/apps/installations/#add-repository-to-installation
*
* @param int $installationId
* @param int $repositoryId
*
* @return array
*/
public function addRepository($installationId, $repositoryId)
{
return $this->put('/installations/'.rawurlencode($installationId).'/repositories/'.rawurlencode($repositoryId));
}
/**
* Remove a single repository from an installation.
*
* @link https://developer.github.com/v3/apps/installations/#remove-repository-from-installation
*
* @param int $installationId
* @param int $repositoryId
*
* @return array
*/
public function removeRepository($installationId, $repositoryId)
{
return $this->delete('/installations/'.rawurlencode($installationId).'/repositories/'.rawurlencode($repositoryId));
}
}

View file

@ -0,0 +1,122 @@
<?php
namespace Github\Api;
/**
* Creating, deleting and listing authorizations.
*
* @link http://developer.github.com/v3/oauth_authorizations/
*
* @author Evgeniy Guseletov <d46k16@gmail.com>
*/
class Authorizations extends AbstractApi
{
/**
* List all authorizations.
*
* @return array
*/
public function all()
{
return $this->get('/authorizations');
}
/**
* Show a single authorization.
*
* @param $clientId
*
* @return array
*/
public function show($clientId)
{
return $this->get('/authorizations/'.rawurlencode($clientId));
}
/**
* Create an authorization.
*
* @param array $params
* @param null $OTPCode
*
* @return array
*/
public function create(array $params, $OTPCode = null)
{
$headers = null === $OTPCode ? [] : ['X-GitHub-OTP' => $OTPCode];
return $this->post('/authorizations', $params, $headers);
}
/**
* Update an authorization.
*
* @param $clientId
* @param array $params
*
* @return array
*/
public function update($clientId, array $params)
{
return $this->patch('/authorizations/'.rawurlencode($clientId), $params);
}
/**
* Remove an authorization.
*
* @param $clientId
*
* @return array
*/
public function remove($clientId)
{
return $this->delete('/authorizations/'.rawurlencode($clientId));
}
/**
* Check an authorization.
*
* @param $clientId
* @param $token
*
* @return array
*/
public function check($clientId, $token)
{
return $this->get('/applications/'.rawurlencode($clientId).'/tokens/'.rawurlencode($token));
}
/**
* Reset an authorization.
*
* @param $clientId
* @param $token
*
* @return array
*/
public function reset($clientId, $token)
{
return $this->post('/applications/'.rawurlencode($clientId).'/tokens/'.rawurlencode($token));
}
/**
* Remove an authorization.
*
* @param $clientId
* @param $token
*/
public function revoke($clientId, $token)
{
$this->delete('/applications/'.rawurlencode($clientId).'/tokens/'.rawurlencode($token));
}
/**
* Revoke all authorizations.
*
* @param $clientId
*/
public function revokeAll($clientId)
{
$this->delete('/applications/'.rawurlencode($clientId).'/tokens');
}
}

View file

@ -0,0 +1,207 @@
<?php
namespace Github\Api;
use Github\Api\CurrentUser\Emails;
use Github\Api\CurrentUser\Followers;
use Github\Api\CurrentUser\Memberships;
use Github\Api\CurrentUser\Notifications;
use Github\Api\CurrentUser\PublicKeys;
use Github\Api\CurrentUser\Starring;
use Github\Api\CurrentUser\Watchers;
/**
* @link http://developer.github.com/v3/users/
*
* @author Joseph Bielawski <stloyd@gmail.com>
* @author Felipe Valtl de Mello <eu@felipe.im>
*/
class CurrentUser extends AbstractApi
{
public function show()
{
return $this->get('/user');
}
public function update(array $params)
{
return $this->patch('/user', $params);
}
/**
* @return Emails
*/
public function emails()
{
return new Emails($this->client);
}
/**
* @return Followers
*/
public function follow()
{
return new Followers($this->client);
}
public function followers($page = 1)
{
return $this->get('/user/followers', [
'page' => $page,
]);
}
/**
* @link http://developer.github.com/v3/issues/#list-issues
*
* @param array $params
* @param bool $includeOrgIssues
*
* @return array
*/
public function issues(array $params = [], $includeOrgIssues = true)
{
return $this->get($includeOrgIssues ? '/issues' : '/user/issues', array_merge(['page' => 1], $params));
}
/**
* @return PublicKeys
*/
public function keys()
{
return new PublicKeys($this->client);
}
/**
* @return Notifications
*/
public function notifications()
{
return new Notifications($this->client);
}
/**
* @return Memberships
*/
public function memberships()
{
return new Memberships($this->client);
}
/**
* @link http://developer.github.com/v3/orgs/#list-user-organizations
*
* @return array
*/
public function organizations()
{
return $this->get('/user/orgs');
}
/**
* @link https://developer.github.com/v3/orgs/teams/#list-user-teams
*
* @return array
*/
public function teams()
{
return $this->get('/user/teams');
}
/**
* @link http://developer.github.com/v3/repos/#list-your-repositories
*
* @param string $type role in the repository
* @param string $sort sort by
* @param string $direction direction of sort, asc or desc
* @param string $visibility visibility of repository
* @param string $affiliation relationship to repository
*
* @return array
*/
public function repositories($type = 'owner', $sort = 'full_name', $direction = 'asc', $visibility = null, $affiliation = null)
{
$params = [
'type' => $type,
'sort' => $sort,
'direction' => $direction,
];
if (null !== $visibility) {
unset($params['type']);
$params['visibility'] = $visibility;
}
if (null !== $affiliation) {
unset($params['type']);
$params['affiliation'] = $affiliation;
}
return $this->get('/user/repos', $params);
}
/**
* @return Watchers
*/
public function watchers()
{
return new Watchers($this->client);
}
/**
* @deprecated Use watchers() instead
*/
public function watched($page = 1)
{
return $this->get('/user/watched', [
'page' => $page,
]);
}
/**
* @return Starring
*/
public function starring()
{
return new Starring($this->client);
}
/**
* @deprecated Use starring() instead
*/
public function starred($page = 1)
{
return $this->get('/user/starred', [
'page' => $page,
]);
}
/**
* @link https://developer.github.com/v3/activity/watching/#list-repositories-being-watched
*/
public function subscriptions()
{
return $this->get('/user/subscriptions');
}
/**
* @link https://developer.github.com/v3/integrations/#list-installations-for-user
*
* @param array $params
*/
public function installations(array $params = [])
{
return $this->get('/user/installations', array_merge(['page' => 1], $params));
}
/**
* @link https://developer.github.com/v3/integrations/installations/#list-repositories-accessible-to-the-user-for-an-installation
*
* @param string $installationId the ID of the Installation
* @param array $params
*/
public function repositoriesByInstallation($installationId, array $params = [])
{
return $this->get(sprintf('/user/installations/%s/repositories', $installationId), array_merge(['page' => 1], $params));
}
}

View file

@ -0,0 +1,94 @@
<?php
namespace Github\Api\CurrentUser;
use Github\Api\AbstractApi;
use Github\Exception\InvalidArgumentException;
/**
* @link http://developer.github.com/v3/users/emails/
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
class Emails extends AbstractApi
{
/**
* List emails for the authenticated user.
*
* @link http://developer.github.com/v3/users/emails/
*
* @return array
*/
public function all()
{
return $this->get('/user/emails');
}
/**
* List public email addresses for a user.
*
* @link https://developer.github.com/v3/users/emails/#list-public-email-addresses-for-a-user
*
* @return array
*/
public function allPublic()
{
return $this->get('/user/public_emails');
}
/**
* Adds one or more email for the authenticated user.
*
* @link http://developer.github.com/v3/users/emails/
*
* @param string|array $emails
*
* @throws \Github\Exception\InvalidArgumentException
*
* @return array
*/
public function add($emails)
{
if (is_string($emails)) {
$emails = [$emails];
} elseif (0 === count($emails)) {
throw new InvalidArgumentException();
}
return $this->post('/user/emails', $emails);
}
/**
* Removes one or more email for the authenticated user.
*
* @link http://developer.github.com/v3/users/emails/
*
* @param string|array $emails
*
* @throws \Github\Exception\InvalidArgumentException
*
* @return array
*/
public function remove($emails)
{
if (is_string($emails)) {
$emails = [$emails];
} elseif (0 === count($emails)) {
throw new InvalidArgumentException();
}
return $this->delete('/user/emails', $emails);
}
/**
* Toggle primary email visibility.
*
* @link https://developer.github.com/v3/users/emails/#toggle-primary-email-visibility
*
* @return array
*/
public function toggleVisibility()
{
return $this->patch('/user/email/visibility');
}
}

View file

@ -0,0 +1,71 @@
<?php
namespace Github\Api\CurrentUser;
use Github\Api\AbstractApi;
/**
* @link http://developer.github.com/v3/users/followers/
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
class Followers extends AbstractApi
{
/**
* List followed users by the authenticated user.
*
* @link http://developer.github.com/v3/repos/followers/
*
* @param int $page
*
* @return array
*/
public function all($page = 1)
{
return $this->get('/user/following', [
'page' => $page,
]);
}
/**
* Check that the authenticated user follows a user.
*
* @link http://developer.github.com/v3/repos/followers/
*
* @param string $username the username to follow
*
* @return array
*/
public function check($username)
{
return $this->get('/user/following/'.rawurlencode($username));
}
/**
* Make the authenticated user follow a user.
*
* @link http://developer.github.com/v3/repos/followers/
*
* @param string $username the username to follow
*
* @return array
*/
public function follow($username)
{
return $this->put('/user/following/'.rawurlencode($username));
}
/**
* Make the authenticated user un-follow a user.
*
* @link http://developer.github.com/v3/repos/followers/
*
* @param string $username the username to un-follow
*
* @return array
*/
public function unfollow($username)
{
return $this->delete('/user/following/'.rawurlencode($username));
}
}

View file

@ -0,0 +1,48 @@
<?php
namespace Github\Api\CurrentUser;
use Github\Api\AbstractApi;
class Memberships extends AbstractApi
{
/**
* List your organization memberships.
*
* @link https://developer.github.com/v3/orgs/members/#get-your-organization-membership
*
* @return array
*/
public function all()
{
return $this->get('/user/memberships/orgs');
}
/**
* Get your organization membership.
*
* @link https://developer.github.com/v3/orgs/members/#get-your-organization-membership
*
* @param string $organization
*
* @return array
*/
public function organization($organization)
{
return $this->get('/user/memberships/orgs/'.rawurlencode($organization));
}
/**
* Edit your organization membership.
*
* @link https://developer.github.com/v3/orgs/members/#edit-your-organization-membership
*
* @param string $organization
*
* @return array
*/
public function edit($organization)
{
return $this->patch('/user/memberships/orgs/'.rawurlencode($organization), ['state' => 'active']);
}
}

View file

@ -0,0 +1,145 @@
<?php
namespace Github\Api\CurrentUser;
use Github\Api\AbstractApi;
/**
* @link http://developer.github.com/v3/activity/notifications/
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
class Notifications extends AbstractApi
{
/**
* List all notifications for the authenticated user.
*
* @link http://developer.github.com/v3/activity/notifications/#list-your-notifications
*
* @param array $params
*
* @return array
*/
public function all(array $params = [])
{
return $this->get('/notifications', $params);
}
/**
* List all notifications for the authenticated user in selected repository.
*
* @link http://developer.github.com/v3/activity/notifications/#list-your-notifications-in-a-repository
*
* @param string $username the user who owns the repo
* @param string $repository the name of the repo
* @param array $params
*
* @return array
*/
public function allInRepository($username, $repository, array $params = [])
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/notifications', $params);
}
/**
* Mark all notifications as read.
*
* @link http://developer.github.com/v3/activity/notifications/#mark-as-read
*
* @param array $params
*
* @return array
*/
public function markAsReadAll(array $params = [])
{
return $this->put('/notifications', $params);
}
/**
* Mark all notifications for a repository as read.
*
* @link http://developer.github.com/v3/activity/notifications/#mark-notifications-as-read-in-a-repository
*
* @param string $username the user who owns the repo
* @param string $repository the name of the repo
* @param array $params
*
* @return array
*/
public function markAsReadInRepository($username, $repository, array $params = [])
{
return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/notifications', $params);
}
/**
* Mark a notification as read.
*
* @link http://developer.github.com/v3/activity/notifications/#mark-a-thread-as-read
*
* @param int $id the notification number
* @param array $params
*
* @return array
*/
public function markAsRead($id, array $params)
{
return $this->patch('/notifications/threads/'.rawurlencode($id), $params);
}
/**
* Show a notification.
*
* @link http://developer.github.com/v3/activity/notifications/#view-a-single-thread
*
* @param int $id the notification number
*
* @return array
*/
public function show($id)
{
return $this->get('/notifications/threads/'.rawurlencode($id));
}
/**
* Show a subscription.
*
* @link http://developer.github.com/v3/activity/notifications/#get-a-thread-subscription
*
* @param int $id the notification number
*
* @return array
*/
public function showSubscription($id)
{
return $this->get('/notifications/threads/'.rawurlencode($id).'/subscription');
}
/**
* Create a subscription.
*
* @link http://developer.github.com/v3/activity/notifications/#set-a-thread-subscription
*
* @param int $id the notification number
* @param array $params
*
* @return array
*/
public function createSubscription($id, array $params)
{
return $this->put('/notifications/threads/'.rawurlencode($id).'/subscription', $params);
}
/**
* Delete a subscription.
*
* @link http://developer.github.com/v3/activity/notifications/#delete-a-thread-subscription
*
* @param int $id the notification number
*
* @return array
*/
public function removeSubscription($id)
{
return $this->delete('/notifications/threads/'.rawurlencode($id).'/subscription');
}
}

View file

@ -0,0 +1,74 @@
<?php
namespace Github\Api\CurrentUser;
use Github\Api\AbstractApi;
use Github\Exception\MissingArgumentException;
/**
* @link http://developer.github.com/v3/users/keys/
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
class PublicKeys extends AbstractApi
{
/**
* List deploy keys for the authenticated user.
*
* @link https://developer.github.com/v3/users/keys/
*
* @return array
*/
public function all()
{
return $this->get('/user/keys');
}
/**
* Shows deploy key for the authenticated user.
*
* @link https://developer.github.com/v3/users/keys/
*
* @param int $id
*
* @return array
*/
public function show($id)
{
return $this->get('/user/keys/'.rawurlencode($id));
}
/**
* Adds deploy key for the authenticated user.
*
* @link https://developer.github.com/v3/users/keys/
*
* @param array $params
*
* @throws \Github\Exception\MissingArgumentException
*
* @return array
*/
public function create(array $params)
{
if (!isset($params['title'], $params['key'])) {
throw new MissingArgumentException(['title', 'key']);
}
return $this->post('/user/keys', $params);
}
/**
* Removes deploy key for the authenticated user.
*
* @link https://developer.github.com/v3/users/keys/
*
* @param int $id
*
* @return array
*/
public function remove($id)
{
return $this->delete('/user/keys/'.rawurlencode($id));
}
}

View file

@ -0,0 +1,76 @@
<?php
namespace Github\Api\CurrentUser;
use Github\Api\AbstractApi;
/**
* @link https://developer.github.com/v3/activity/starring/
*
* @author Felipe Valtl de Mello <eu@felipe.im>
*/
class Starring extends AbstractApi
{
/**
* List repositories starred by the authenticated user.
*
* @link https://developer.github.com/v3/activity/starring/
*
* @param int $page
* @param int $perPage
*
* @return array
*/
public function all($page = 1, $perPage = 30)
{
return $this->get('/user/starred', [
'page' => $page,
'per_page' => $perPage,
]);
}
/**
* Check that the authenticated user starres a repository.
*
* @link https://developer.github.com/v3/activity/starring/
*
* @param string $username the user who owns the repo
* @param string $repository the name of the repo
*
* @return array
*/
public function check($username, $repository)
{
return $this->get('/user/starred/'.rawurlencode($username).'/'.rawurlencode($repository));
}
/**
* Make the authenticated user star a repository.
*
* @link https://developer.github.com/v3/activity/starring/
*
* @param string $username the user who owns the repo
* @param string $repository the name of the repo
*
* @return array
*/
public function star($username, $repository)
{
return $this->put('/user/starred/'.rawurlencode($username).'/'.rawurlencode($repository));
}
/**
* Make the authenticated user unstar a repository.
*
* @link https://developer.github.com/v3/activity/starring
*
* @param string $username the user who owns the repo
* @param string $repository the name of the repo
*
* @return array
*/
public function unstar($username, $repository)
{
return $this->delete('/user/starred/'.rawurlencode($username).'/'.rawurlencode($repository));
}
}

View file

@ -0,0 +1,75 @@
<?php
namespace Github\Api\CurrentUser;
use Github\Api\AbstractApi;
/**
* @link https://developer.github.com/v3/activity/watching/
*
* @author Joseph Bielawski <stloyd@gmail.com>
* @revised Felipe Valtl de Mello <eu@felipe.im>
*/
class Watchers extends AbstractApi
{
/**
* List repositories watched by the authenticated user.
*
* @link https://developer.github.com/v3/activity/watching/
*
* @param int $page
*
* @return array
*/
public function all($page = 1)
{
return $this->get('/user/subscriptions', [
'page' => $page,
]);
}
/**
* Check that the authenticated user watches a repository.
*
* @link https://developer.github.com/v3/activity/watching/
*
* @param string $username the user who owns the repo
* @param string $repository the name of the repo
*
* @return array
*/
public function check($username, $repository)
{
return $this->get('/user/subscriptions/'.rawurlencode($username).'/'.rawurlencode($repository));
}
/**
* Make the authenticated user watch a repository.
*
* @link https://developer.github.com/v3/activity/watching/
*
* @param string $username the user who owns the repo
* @param string $repository the name of the repo
*
* @return array
*/
public function watch($username, $repository)
{
return $this->put('/user/subscriptions/'.rawurlencode($username).'/'.rawurlencode($repository));
}
/**
* Make the authenticated user unwatch a repository.
*
* @link https://developer.github.com/v3/activity/watching/
*
* @param string $username the user who owns the repo
* @param string $repository the name of the repo
*
* @return array
*/
public function unwatch($username, $repository)
{
return $this->delete('/user/subscriptions/'.rawurlencode($username).'/'.rawurlencode($repository));
}
}

View file

@ -0,0 +1,107 @@
<?php
namespace Github\Api;
use Github\Exception\MissingArgumentException;
/**
* Listing, creating and updating deployments.
*
* @link https://developer.github.com/v3/repos/deployments/
*/
class Deployment extends AbstractApi
{
/**
* List deployments for a particular repository.
*
* @link https://developer.github.com/v3/repos/deployments/#list-deployments
*
* @param string $username the username of the user who owns the repository
* @param string $repository the name of the repository
* @param array $params query parameters to filter deployments by (see link)
*
* @return array the deployments requested
*/
public function all($username, $repository, array $params = [])
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/deployments', $params);
}
/**
* Get a deployment in selected repository.
*
* @param string $username the user who owns the repo
* @param string $repository the name of the repo
* @param int $id the id of the deployment
*
* @return array
*/
public function show($username, $repository, $id)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/deployments/'.rawurlencode($id));
}
/**
* Create a new deployment for the given username and repo.
*
* @link https://developer.github.com/v3/repos/deployments/#create-a-deployment
*
* Important: Once a deployment is created, it cannot be updated. Changes are indicated by creating new statuses.
* @see updateStatus
*
* @param string $username the username
* @param string $repository the repository
* @param array $params the new deployment data
*
* @throws MissingArgumentException
*
* @return array information about the deployment
*/
public function create($username, $repository, array $params)
{
if (!isset($params['ref'])) {
throw new MissingArgumentException(['ref']);
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/deployments', $params);
}
/**
* Updates a deployment by creating a new status update.
*
* @link https://developer.github.com/v3/repos/deployments/#create-a-deployment-status
*
* @param string $username the username
* @param string $repository the repository
* @param int $id the deployment number
* @param array $params The information about the deployment update.
* Must include a "state" field of pending, success, error, or failure.
* May also be given a target_url and description, ßee link for more details.
*
* @throws MissingArgumentException
*
* @return array information about the deployment
*/
public function updateStatus($username, $repository, $id, array $params)
{
if (!isset($params['state'])) {
throw new MissingArgumentException(['state']);
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/deployments/'.rawurlencode($id).'/statuses', $params);
}
/**
* Gets all of the status updates tied to a given deployment.
*
* @param string $username the username
* @param string $repository the repository
* @param int $id the deployment identifier
*
* @return array the deployment statuses
*/
public function getStatuses($username, $repository, $id)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/deployments/'.rawurlencode($id).'/statuses');
}
}

View file

@ -0,0 +1,51 @@
<?php
namespace Github\Api;
use Github\Api\Enterprise\License;
use Github\Api\Enterprise\ManagementConsole;
use Github\Api\Enterprise\Stats;
use Github\Api\Enterprise\UserAdmin;
/**
* Getting information about a GitHub Enterprise instance.
*
* @link https://developer.github.com/v3/enterprise/
*
* @author Joseph Bielawski <stloyd@gmail.com>
* @author Guillermo A. Fisher <guillermoandraefisher@gmail.com>
*/
class Enterprise extends AbstractApi
{
/**
* @return Stats
*/
public function stats()
{
return new Stats($this->client);
}
/**
* @return License
*/
public function license()
{
return new License($this->client);
}
/**
* @return ManagementConsole
*/
public function console()
{
return new ManagementConsole($this->client);
}
/**
* @return UserAdmin
*/
public function userAdmin()
{
return new UserAdmin($this->client);
}
}

View file

@ -0,0 +1,20 @@
<?php
namespace Github\Api\Enterprise;
use Github\Api\AbstractApi;
class License extends AbstractApi
{
/**
* Provides information about your Enterprise license (only available to site admins).
*
* @link https://developer.github.com/v3/enterprise/license/
*
* @return array array of license information
*/
public function show()
{
return $this->get('/enterprise/settings/license');
}
}

View file

@ -0,0 +1,77 @@
<?php
namespace Github\Api\Enterprise;
use Github\Api\AbstractApi;
class ManagementConsole extends AbstractApi
{
/**
* Checks the status of your installations most recent configuration process.
*
* @link https://developer.github.com/v3/enterprise/management_console/#check-configuration-status
*
* @param string $hash md5 hash of your license
*
* @return array array of configuration status information
*/
public function configcheck($hash)
{
return $this->getWithLicenseHash('/setup/api/configcheck', $hash);
}
/**
* Retrieves your installations settings.
*
* @link https://developer.github.com/v3/enterprise/management_console/#retrieve-settings
*
* @param string $hash md5 hash of your license
*
* @return array array of settings
*/
public function settings($hash)
{
return $this->getWithLicenseHash('/setup/api/settings', $hash);
}
/**
* Checks your installations maintenance status.
*
* @link https://developer.github.com/v3/enterprise/management_console/#check-maintenance-status
*
* @param string $hash md5 hash of your license
*
* @return array array of maintenance status information
*/
public function maintenance($hash)
{
return $this->getWithLicenseHash('/setup/api/maintenance', $hash);
}
/**
* Retrieves your installations authorized SSH keys.
*
* @link https://developer.github.com/v3/enterprise/management_console/#retrieve-authorized-ssh-keys
*
* @param string $hash md5 hash of your license
*
* @return array array of authorized keys
*/
public function keys($hash)
{
return $this->getWithLicenseHash('/setup/api/settings/authorized-keys', $hash);
}
/**
* Sends an authenticated GET request.
*
* @param string $uri the request URI
* @param string $hash md5 hash of your license
*
* @return array|string
*/
protected function getWithLicenseHash($uri, $hash)
{
return $this->get($uri, ['license_md5' => rawurlencode($hash)]);
}
}

View file

@ -0,0 +1,128 @@
<?php
namespace Github\Api\Enterprise;
use Github\Api\AbstractApi;
class Stats extends AbstractApi
{
/**
* Returns the number of open and closed issues.
*
* @return array array with totals of open and closed issues
*/
public function issues()
{
return $this->show('issues');
}
/**
* Returns the number of active and inactive hooks.
*
* @return array array with totals of active and inactive hooks
*/
public function hooks()
{
return $this->show('hooks');
}
/**
* Returns the number of open and closed milestones.
*
* @return array array with totals of open and closed milestones
*/
public function milestones()
{
return $this->show('milestones');
}
/**
* Returns the number of organizations, teams, team members, and disabled organizations.
*
* @return array array with totals of organizations, teams, team members, and disabled organizations
*/
public function orgs()
{
return $this->show('orgs');
}
/**
* Returns the number of comments on issues, pull requests, commits, and gists.
*
* @return array array with totals of comments on issues, pull requests, commits, and gists
*/
public function comments()
{
return $this->show('comments');
}
/**
* Returns the number of GitHub Pages sites.
*
* @return array array with totals of GitHub Pages sites
*/
public function pages()
{
return $this->show('pages');
}
/**
* Returns the number of suspended and admin users.
*
* @return array array with totals of suspended and admin users
*/
public function users()
{
return $this->show('users');
}
/**
* Returns the number of private and public gists.
*
* @return array array with totals of private and public gists
*/
public function gists()
{
return $this->show('gists');
}
/**
* Returns the number of merged, mergeable, and unmergeable pull requests.
*
* @return array array with totals of merged, mergeable, and unmergeable pull requests
*/
public function pulls()
{
return $this->show('pulls');
}
/**
* Returns the number of organization-owned repositories, root repositories, forks, pushed commits, and wikis.
*
* @return array array with totals of organization-owned repositories, root repositories, forks, pushed commits, and wikis
*/
public function repos()
{
return $this->show('repos');
}
/**
* Returns all of the statistics.
*
* @return array array with all of the statistics
*/
public function all()
{
return $this->show('all');
}
/**
* @param string $type The type of statistics to show
*
* @return array
*/
public function show($type)
{
return $this->get('/enterprise/stats/'.rawurlencode($type));
}
}

View file

@ -0,0 +1,36 @@
<?php
namespace Github\Api\Enterprise;
use Github\Api\AbstractApi;
class UserAdmin extends AbstractApi
{
/**
* Suspend a user.
*
* @link https://developer.github.com/v3/users/administration/#suspend-a-user
*
* @param string $username
*
* @return array
*/
public function suspend($username)
{
return $this->put('/users/'.rawurldecode($username).'/suspended', ['Content-Length' => 0]);
}
/**
* Unsuspend a user.
*
* @link https://developer.github.com/v3/users/administration/#unsuspend-a-user
*
* @param string $username
*
* @return array
*/
public function unsuspend($username)
{
return $this->delete('/users/'.rawurldecode($username).'/suspended');
}
}

View file

@ -0,0 +1,101 @@
<?php
namespace Github\Api\Gist;
use Github\Api\AbstractApi;
use Github\Api\AcceptHeaderTrait;
/**
* @link https://developer.github.com/v3/gists/comments/
*
* @author Kayla Daniels <kayladnls@gmail.com>
*/
class Comments extends AbstractApi
{
use AcceptHeaderTrait;
/**
* Configure the body type.
*
* @link https://developer.github.com/v3/gists/comments/#custom-media-types
*
* @param string|null $bodyType
*
* @return self
*/
public function configure($bodyType = null)
{
if (!in_array($bodyType, ['text', 'html', 'full'])) {
$bodyType = 'raw';
}
$this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s+json', $this->client->getApiVersion(), $bodyType);
return $this;
}
/**
* Get all comments for a gist.
*
* @param string $gist
*
* @return array
*/
public function all($gist)
{
return $this->get('/gists/'.rawurlencode($gist).'/comments');
}
/**
* Get a comment of a gist.
*
* @param string $gist
* @param int $comment
*
* @return array
*/
public function show($gist, $comment)
{
return $this->get('/gists/'.rawurlencode($gist).'/comments/'.rawurlencode($comment));
}
/**
* Create a comment for gist.
*
* @param string $gist
* @param string $body
*
* @return array
*/
public function create($gist, $body)
{
return $this->post('/gists/'.rawurlencode($gist).'/comments', ['body' => $body]);
}
/**
* Create a comment for a gist.
*
* @param string $gist
* @param int $comment_id
* @param string $body
*
* @return array
*/
public function update($gist, $comment_id, $body)
{
return $this->patch('/gists/'.rawurlencode($gist).'/comments/'.rawurlencode($comment_id), ['body' => $body]);
}
/**
* Delete a comment for a gist.
*
* @param string $gist
* @param int $comment
*
* @return array
*/
public function remove($gist, $comment)
{
return $this->delete('/gists/'.rawurlencode($gist).'/comments/'.rawurlencode($comment));
}
}

View file

@ -0,0 +1,116 @@
<?php
namespace Github\Api;
use Github\Api\Gist\Comments;
use Github\Exception\MissingArgumentException;
/**
* Creating, editing, deleting and listing gists.
*
* @link http://developer.github.com/v3/gists/
*
* @author Joseph Bielawski <stloyd@gmail.com>
* @author Edoardo Rivello <edoardo.rivello at gmail dot com>
*/
class Gists extends AbstractApi
{
use AcceptHeaderTrait;
/**
* Configure the body type.
*
* @link https://developer.github.com/v3/gists/#custom-media-types
*
* @param string|null $bodyType
*
* @return self
*/
public function configure($bodyType = null)
{
if (!in_array($bodyType, ['base64'])) {
$bodyType = 'raw';
}
$this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s', $this->client->getApiVersion(), $bodyType);
return $this;
}
public function all($type = null)
{
if (!in_array($type, ['public', 'starred'])) {
return $this->get('/gists');
}
return $this->get('/gists/'.rawurlencode($type));
}
public function show($number)
{
return $this->get('/gists/'.rawurlencode($number));
}
public function create(array $params)
{
if (!isset($params['files']) || (!is_array($params['files']) || 0 === count($params['files']))) {
throw new MissingArgumentException('files');
}
$params['public'] = (bool) $params['public'];
return $this->post('/gists', $params);
}
public function update($id, array $params)
{
return $this->patch('/gists/'.rawurlencode($id), $params);
}
public function commits($id)
{
return $this->get('/gists/'.rawurlencode($id).'/commits');
}
public function fork($id)
{
return $this->post('/gists/'.rawurlencode($id).'/fork');
}
public function forks($id)
{
return $this->get('/gists/'.rawurlencode($id).'/forks');
}
public function remove($id)
{
return $this->delete('/gists/'.rawurlencode($id));
}
public function check($id)
{
return $this->get('/gists/'.rawurlencode($id).'/star');
}
public function star($id)
{
return $this->put('/gists/'.rawurlencode($id).'/star');
}
public function unstar($id)
{
return $this->delete('/gists/'.rawurlencode($id).'/star');
}
/**
* Get a gist's comments.
*
* @link http://developer.github.com/v3/gists/comments/
*
* @return Comments
*/
public function comments()
{
return new Comments($this->client);
}
}

View file

@ -0,0 +1,59 @@
<?php
namespace Github\Api;
use Github\Api\GitData\Blobs;
use Github\Api\GitData\Commits;
use Github\Api\GitData\References;
use Github\Api\GitData\Tags;
use Github\Api\GitData\Trees;
/**
* Getting full versions of specific files and trees in your Git repositories.
*
* @link http://developer.github.com/v3/git/
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
class GitData extends AbstractApi
{
/**
* @return Blobs
*/
public function blobs()
{
return new Blobs($this->client);
}
/**
* @return Commits
*/
public function commits()
{
return new Commits($this->client);
}
/**
* @return References
*/
public function references()
{
return new References($this->client);
}
/**
* @return Tags
*/
public function tags()
{
return new Tags($this->client);
}
/**
* @return Trees
*/
public function trees()
{
return new Trees($this->client);
}
}

View file

@ -0,0 +1,70 @@
<?php
namespace Github\Api\GitData;
use Github\Api\AbstractApi;
use Github\Api\AcceptHeaderTrait;
use Github\Exception\MissingArgumentException;
/**
* @link http://developer.github.com/v3/git/blobs/
*
* @author Joseph Bielawski <stloyd@gmail.com>
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
*/
class Blobs extends AbstractApi
{
use AcceptHeaderTrait;
/**
* Configure the Accept header depending on the blob type.
*
* @param string|null $bodyType
*
* @return self
*/
public function configure($bodyType = null)
{
if ('raw' === $bodyType) {
$this->acceptHeaderValue = sprintf('application/vnd.github.%s.raw', $this->client->getApiVersion());
}
return $this;
}
/**
* Show a blob of a sha for a repository.
*
* @param string $username
* @param string $repository
* @param string $sha
*
* @return array
*/
public function show($username, $repository, $sha)
{
$response = $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/blobs/'.rawurlencode($sha));
return $response;
}
/**
* Create a blob of a sha for a repository.
*
* @param string $username
* @param string $repository
* @param array $params
*
* @throws \Github\Exception\MissingArgumentException
*
* @return array
*/
public function create($username, $repository, array $params)
{
if (!isset($params['content'], $params['encoding'])) {
throw new MissingArgumentException(['content', 'encoding']);
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/blobs', $params);
}
}

View file

@ -0,0 +1,48 @@
<?php
namespace Github\Api\GitData;
use Github\Api\AbstractApi;
use Github\Exception\MissingArgumentException;
/**
* @link http://developer.github.com/v3/git/commits/
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
class Commits extends AbstractApi
{
/**
* Show a commit for a repository.
*
* @param string $username
* @param string $repository
* @param string $sha
*
* @return array
*/
public function show($username, $repository, $sha)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/commits/'.rawurlencode($sha));
}
/**
* Create a commit for a repository.
*
* @param string $username
* @param string $repository
* @param array $params
*
* @throws \Github\Exception\MissingArgumentException
*
* @return array
*/
public function create($username, $repository, array $params)
{
if (!isset($params['message'], $params['tree'], $params['parents'])) {
throw new MissingArgumentException(['message', 'tree', 'parents']);
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/commits', $params);
}
}

View file

@ -0,0 +1,140 @@
<?php
namespace Github\Api\GitData;
use Github\Api\AbstractApi;
use Github\Exception\MissingArgumentException;
/**
* @link http://developer.github.com/v3/git/references/
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
class References extends AbstractApi
{
/**
* Get all references of a repository.
*
* @param string $username
* @param string $repository
*
* @return array
*/
public function all($username, $repository)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/refs');
}
/**
* Get all branches of a repository.
*
* @param string $username
* @param string $repository
*
* @return array
*/
public function branches($username, $repository)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/refs/heads');
}
/**
* Get all tags of a repository.
*
* @param string $username
* @param string $repository
*
* @return array
*/
public function tags($username, $repository)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/refs/tags');
}
/**
* Show the reference of a repository.
*
* @param string $username
* @param string $repository
* @param string $reference
*
* @return array
*/
public function show($username, $repository, $reference)
{
$reference = $this->encodeReference($reference);
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/refs/'.$reference);
}
/**
* Create a reference for a repository.
*
* @param string $username
* @param string $repository
* @param array $params
*
* @throws \Github\Exception\MissingArgumentException
*
* @return array
*/
public function create($username, $repository, array $params)
{
if (!isset($params['ref'], $params['sha'])) {
throw new MissingArgumentException(['ref', 'sha']);
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/refs', $params);
}
/**
* Update a reference for a repository.
*
* @param string $username
* @param string $repository
* @param string $reference
* @param array $params
*
* @throws \Github\Exception\MissingArgumentException
*
* @return array
*/
public function update($username, $repository, $reference, array $params)
{
if (!isset($params['sha'])) {
throw new MissingArgumentException('sha');
}
$reference = $this->encodeReference($reference);
return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/refs/'.$reference, $params);
}
/**
* Delete a reference of a repository.
*
* @param string $username
* @param string $repository
* @param string $reference
*
* @return array
*/
public function remove($username, $repository, $reference)
{
$reference = $this->encodeReference($reference);
return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/refs/'.$reference);
}
/**
* Encode the raw reference.
*
* @param string $rawReference
*
* @return string
*/
private function encodeReference($rawReference)
{
return implode('/', array_map('rawurlencode', explode('/', $rawReference)));
}
}

View file

@ -0,0 +1,69 @@
<?php
namespace Github\Api\GitData;
use Github\Api\AbstractApi;
use Github\Exception\MissingArgumentException;
/**
* @link http://developer.github.com/v3/git/tags/
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
class Tags extends AbstractApi
{
/**
* Get all tags for a repository.
*
* @param string $username
* @param string $repository
*
* @return array
*/
public function all($username, $repository)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/refs/tags');
}
/**
* Get a tag for a repository.
*
* @param string $username
* @param string $repository
* @param string $sha
*
* @return array
*/
public function show($username, $repository, $sha)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/tags/'.rawurlencode($sha));
}
/**
* Create a tag for a repository.
*
* @param string $username
* @param string $repository
* @param array $params
*
* @throws \Github\Exception\MissingArgumentException
*
* @return array
*/
public function create($username, $repository, array $params)
{
if (!isset($params['tag'], $params['message'], $params['object'], $params['type'])) {
throw new MissingArgumentException(['tag', 'message', 'object', 'type']);
}
if (!isset($params['tagger'])) {
throw new MissingArgumentException('tagger');
}
if (!isset($params['tagger']['name'], $params['tagger']['email'], $params['tagger']['date'])) {
throw new MissingArgumentException(['tagger.name', 'tagger.email', 'tagger.date']);
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/tags', $params);
}
}

View file

@ -0,0 +1,64 @@
<?php
namespace Github\Api\GitData;
use Github\Api\AbstractApi;
use Github\Exception\MissingArgumentException;
/**
* @link http://developer.github.com/v3/git/trees/
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
class Trees extends AbstractApi
{
/**
* Get the tree for a repository.
*
* @param string $username
* @param string $repository
* @param string $sha
* @param bool $recursive
*
* @return array
*/
public function show($username, $repository, $sha, $recursive = false)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/trees/'.rawurlencode($sha), $recursive ? ['recursive' => 1] : []);
}
/**
* Create tree for a repository.
*
* @param string $username
* @param string $repository
* @param array $params
*
* @throws \Github\Exception\MissingArgumentException
*
* @return array
*/
public function create($username, $repository, array $params)
{
if (!isset($params['tree']) || !is_array($params['tree'])) {
throw new MissingArgumentException('tree');
}
if (!isset($params['tree'][0])) {
$params['tree'] = [$params['tree']];
}
foreach ($params['tree'] as $key => $tree) {
if (!isset($tree['path'], $tree['mode'], $tree['type'])) {
throw new MissingArgumentException(["tree.$key.path", "tree.$key.mode", "tree.$key.type"]);
}
// If `sha` is not set, `content` is required
if (!isset($tree['sha']) && !isset($tree['content'])) {
throw new MissingArgumentException("tree.$key.content");
}
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/git/trees', $params);
}
}

View file

@ -0,0 +1,47 @@
<?php
namespace Github\Api;
/**
* GraphQL API.
*
* Part of the Github v4 API
*
* @link https://developer.github.com/v4/
*
* @author Miguel Piedrafita <soy@miguelpiedrafita.com>
*/
class GraphQL extends AbstractApi
{
use AcceptHeaderTrait;
/**
* @param string $query
* @param array $variables
*
* @return array
*/
public function execute($query, array $variables = [])
{
$this->acceptHeaderValue = 'application/vnd.github.v4+json';
$params = [
'query' => $query,
];
if (!empty($variables)) {
$params['variables'] = json_encode($variables);
}
return $this->post('/graphql', $params);
}
/**
* @param string $file
* @param array $variables
*
* @return array
*/
public function fromFile($file, array $variables = [])
{
return $this->execute(file_get_contents($file), $variables);
}
}

View file

@ -0,0 +1,26 @@
<?php
namespace Github\Api;
@trigger_error('The '.__NAMESPACE__.'\Integrations class is deprecated. Use the '.__NAMESPACE__.'\Apps class instead.', E_USER_DEPRECATED);
/**
* @deprecated Use the Apps class
* @link https://developer.github.com/v3/apps/
*
* @author Nils Adermann <naderman@naderman.de>
*/
class Integrations extends Apps
{
/**
* @deprecated
* Configure the accept header for Early Access to the integrations api (DEPRECATED)
* @see https://developer.github.com/v3/apps/
*
* @return self
*/
public function configure()
{
return $this;
}
}

View file

@ -0,0 +1,263 @@
<?php
namespace Github\Api;
use Github\Api\Issue\Assignees;
use Github\Api\Issue\Comments;
use Github\Api\Issue\Events;
use Github\Api\Issue\Labels;
use Github\Api\Issue\Milestones;
use Github\Api\Issue\Timeline;
use Github\Exception\MissingArgumentException;
/**
* Listing issues, searching, editing and closing your projects issues.
*
* @link http://develop.github.com/p/issues.html
*
* @author Thibault Duplessis <thibault.duplessis at gmail dot com>
* @author Joseph Bielawski <stloyd@gmail.com>
*/
class Issue extends AbstractApi
{
use AcceptHeaderTrait;
/**
* Configure the body type.
*
* @link https://developer.github.com/v3/issues/#custom-media-types
*
* @param string|null $bodyType
*
* @return self
*/
public function configure($bodyType = null)
{
if (!in_array($bodyType, ['text', 'html', 'full'])) {
$bodyType = 'raw';
}
$this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s+json', $this->client->getApiVersion(), $bodyType);
return $this;
}
/**
* List issues by username, repo and state.
*
* @link http://developer.github.com/v3/issues/
*
* @param string $username the username
* @param string $repository the repository
* @param array $params the additional parameters like milestone, assignees, labels, sort, direction
*
* @return array list of issues found
*/
public function all($username, $repository, array $params = [])
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues', array_merge(['page' => 1], $params));
}
/**
* Search issues by username, repo, state and keyword.
*
* @deprecated This method is deprecated use the Search api instead. See https://developer.github.com/v3/search/legacy/#legacy-search-api-is-deprecated
* @link http://developer.github.com/v3/search/#search-issues
*
* @param string $username the username
* @param string $repository the repository
* @param string $state the issue state, can be open or closed
* @param string $keyword the keyword to filter issues by
*
* @return array list of issues found
*/
public function find($username, $repository, $state, $keyword)
{
if (!in_array($state, ['open', 'closed'])) {
$state = 'open';
}
return $this->get('/legacy/issues/search/'.rawurlencode($username).'/'.rawurlencode($repository).'/'.rawurlencode($state).'/'.rawurlencode($keyword));
}
/**
* List issues by organization.
*
* @link http://developer.github.com/v3/issues/
*
* @param string $organization the organization
* @param string $state the issue state, can be open or closed
* @param array $params the additional parameters like milestone, assignees, labels, sort, direction
*
* @return array list of issues found
*/
public function org($organization, $state, array $params = [])
{
if (!in_array($state, ['open', 'closed'])) {
$state = 'open';
}
return $this->get('/orgs/'.rawurlencode($organization).'/issues', array_merge(['page' => 1, 'state' => $state], $params));
}
/**
* Get extended information about an issue by its username, repo and number.
*
* @link http://developer.github.com/v3/issues/
*
* @param string $username the username
* @param string $repository the repository
* @param int $id the issue number
*
* @return array information about the issue
*/
public function show($username, $repository, $id)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($id));
}
/**
* Create a new issue for the given username and repo.
* The issue is assigned to the authenticated user. Requires authentication.
*
* @link http://developer.github.com/v3/issues/
*
* @param string $username the username
* @param string $repository the repository
* @param array $params the new issue data
*
* @throws MissingArgumentException
*
* @return array information about the issue
*/
public function create($username, $repository, array $params)
{
if (!isset($params['title'])) {
throw new MissingArgumentException(['title']);
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues', $params);
}
/**
* Update issue information's by username, repo and issue number. Requires authentication.
*
* @link http://developer.github.com/v3/issues/
*
* @param string $username the username
* @param string $repository the repository
* @param int $id the issue number
* @param array $params key=>value user attributes to update.
* key can be title or body
*
* @return array information about the issue
*/
public function update($username, $repository, $id, array $params)
{
return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($id), $params);
}
/**
* Lock an issue. Users with push access can lock an issue's conversation.
*
* @link https://developer.github.com/v3/issues/#lock-an-issue
*
* @param string $username
* @param string $repository
* @param int $id
*
* @return string
*/
public function lock($username, $repository, $id)
{
return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($id).'/lock');
}
/**
* Unlock an issue. Users with push access can unlock an issue's conversation.
*
* @link https://developer.github.com/v3/issues/#lock-an-issue
*
* @param string $username
* @param string $repository
* @param int $id
*
* @return string
*/
public function unlock($username, $repository, $id)
{
return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($id).'/lock');
}
/**
* List an issue comments.
*
* @link http://developer.github.com/v3/issues/comments/
*
* @return Comments
*/
public function comments()
{
return new Comments($this->client);
}
/**
* List all project events.
*
* @link http://developer.github.com/v3/issues/events/
*
* @return Events
*/
public function events()
{
return new Events($this->client);
}
/**
* List all project labels.
*
* @link http://developer.github.com/v3/issues/labels/
*
* @return Labels
*/
public function labels()
{
return new Labels($this->client);
}
/**
* List all project milestones.
*
* @link http://developer.github.com/v3/issues/milestones/
*
* @return Milestones
*/
public function milestones()
{
return new Milestones($this->client);
}
/**
* List all assignees.
*
* @link https://developer.github.com/v3/issues/assignees/
*
* @return Assignees
*/
public function assignees()
{
return new Assignees($this->client);
}
/**
* List all events.
*
* @link https://developer.github.com/v3/issues/timeline/
*
* @return Timeline
*/
public function timeline()
{
return new Timeline($this->client);
}
}

View file

@ -0,0 +1,91 @@
<?php
namespace Github\Api\Issue;
use Github\Api\AbstractApi;
use Github\Exception\MissingArgumentException;
class Assignees extends AbstractApi
{
/**
* List all the available assignees to which issues may be assigned.
*
* @param string $username
* @param string $repository
* @param array $parameters
*
* @return array
*/
public function listAvailable($username, $repository, array $parameters = [])
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/assignees', $parameters);
}
/**
* Check to see if a particular user is an assignee for a repository.
*
* @link https://developer.github.com/v3/issues/assignees/#check-assignee
*
* @param string $username
* @param string $repository
* @param string $assignee
*
* @return array
*/
public function check($username, $repository, $assignee)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/assignees/'.rawurlencode($assignee));
}
/**
* Add assignees to an Issue.
*
* @link https://developer.github.com/v3/issues/assignees/#add-assignees-to-an-issue
*
* @param string $username
* @param string $repository
* @param string $issue
* @param array $parameters
*
* @throws MissingArgumentException
*
* @return string
*/
public function add($username, $repository, $issue, array $parameters)
{
if (!isset($parameters['assignees'])) {
throw new MissingArgumentException('assignees');
}
if (!is_array($parameters['assignees'])) {
@trigger_error(sprintf('Passing the "assignees" parameter as a string in "%s" is deprecated and will throw an exception in php-github-api version 3.0. Pass an array of strings instead', __METHOD__), E_USER_DEPRECATED);
$parameters['assignees'] = [$parameters['assignees']];
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/assignees', $parameters);
}
/**
* Remove assignees from an Issue.
*
* @link https://developer.github.com/v3/issues/assignees/#remove-assignees-from-an-issue
*
* @param string $username
* @param string $repository
* @param string $issue
* @param array $parameters
*
* @throws MissingArgumentException
*
* @return string
*/
public function remove($username, $repository, $issue, array $parameters)
{
if (!isset($parameters['assignees'])) {
throw new MissingArgumentException('assignees');
}
return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/assignees', $parameters);
}
}

View file

@ -0,0 +1,135 @@
<?php
namespace Github\Api\Issue;
use Github\Api\AbstractApi;
use Github\Api\AcceptHeaderTrait;
use Github\Exception\MissingArgumentException;
/**
* @link http://developer.github.com/v3/issues/comments/
*
* @author Joseph Bielawski <stloyd@gmail.com>
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
*/
class Comments extends AbstractApi
{
use AcceptHeaderTrait;
/**
* Configure the body type.
*
* @link https://developer.github.com/v3/issues/comments/#custom-media-types
*
* @param string|null $bodyType
*
* @return self
*/
public function configure($bodyType = null)
{
if (!in_array($bodyType, ['raw', 'text', 'html'])) {
$bodyType = 'full';
}
$this->acceptHeaderValue = sprintf('application/vnd.github.%s.%s+json', $this->client->getApiVersion(), $bodyType);
return $this;
}
/**
* Get all comments for an issue.
*
* @link https://developer.github.com/v3/issues/comments/#list-comments-on-an-issue
*
* @param string $username
* @param string $repository
* @param int $issue
* @param int $page
*
* @return array
*/
public function all($username, $repository, $issue, $page = 1)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/comments', [
'page' => $page,
]);
}
/**
* Get a comment for an issue.
*
* @link https://developer.github.com/v3/issues/comments/#get-a-single-comment
*
* @param string $username
* @param string $repository
* @param int $comment
*
* @return array
*/
public function show($username, $repository, $comment)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/comments/'.rawurlencode($comment));
}
/**
* Create a comment for an issue.
*
* @link https://developer.github.com/v3/issues/comments/#create-a-comment
*
* @param string $username
* @param string $repository
* @param int $issue
* @param array $params
*
* @throws \Github\Exception\MissingArgumentException
*
* @return array
*/
public function create($username, $repository, $issue, array $params)
{
if (!isset($params['body'])) {
throw new MissingArgumentException('body');
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/comments', $params);
}
/**
* Update a comment for an issue.
*
* @link https://developer.github.com/v3/issues/comments/#edit-a-comment
*
* @param string $username
* @param string $repository
* @param int $comment
* @param array $params
*
* @throws \Github\Exception\MissingArgumentException
*
* @return array
*/
public function update($username, $repository, $comment, array $params)
{
if (!isset($params['body'])) {
throw new MissingArgumentException('body');
}
return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/comments/'.rawurlencode($comment), $params);
}
/**
* Delete a comment for an issue.
*
* @link https://developer.github.com/v3/issues/comments/#delete-a-comment
*
* @param string $username
* @param string $repository
* @param int $comment
*
* @return array
*/
public function remove($username, $repository, $comment)
{
return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/comments/'.rawurlencode($comment));
}
}

View file

@ -0,0 +1,54 @@
<?php
namespace Github\Api\Issue;
use Github\Api\AbstractApi;
/**
* @link http://developer.github.com/v3/issues/events/
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
class Events extends AbstractApi
{
/**
* Get all events for an issue.
*
* @link https://developer.github.com/v3/issues/events/#list-events-for-an-issue
*
* @param string $username
* @param string $repository
* @param int|null $issue
* @param int $page
*
* @return array
*/
public function all($username, $repository, $issue = null, $page = 1)
{
if (null !== $issue) {
$path = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/events';
} else {
$path = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/events';
}
return $this->get($path, [
'page' => $page,
]);
}
/**
* Display an event for an issue.
*
* @link https://developer.github.com/v3/issues/events/#get-a-single-event
*
* @param $username
* @param $repository
* @param $event
*
* @return array
*/
public function show($username, $repository, $event)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/events/'.rawurlencode($event));
}
}

View file

@ -0,0 +1,192 @@
<?php
namespace Github\Api\Issue;
use Github\Api\AbstractApi;
use Github\Exception\InvalidArgumentException;
use Github\Exception\MissingArgumentException;
/**
* @link http://developer.github.com/v3/issues/labels/
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
class Labels extends AbstractApi
{
/**
* Get all labels for a repository or the labels for a specific issue.
*
* @link https://developer.github.com/v3/issues/labels/#list-labels-on-an-issue
*
* @param string $username
* @param string $repository
* @param int|null $issue
*
* @return array
*/
public function all($username, $repository, $issue = null)
{
if ($issue === null) {
$path = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/labels';
} else {
$path = '/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/labels';
}
return $this->get($path);
}
/**
* Get a single label.
*
* @link https://developer.github.com/v3/issues/labels/#get-a-single-label
*
* @param string $username
* @param string $repository
* @param string $label
*
* @return array
*/
public function show($username, $repository, $label)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/labels/'.rawurlencode($label));
}
/**
* Create a label for a repository.
*
* @link https://developer.github.com/v3/issues/labels/#create-a-label
*
* @param string $username
* @param string $repository
* @param array $params
*
* @throws \Github\Exception\MissingArgumentException
*
* @return array
*/
public function create($username, $repository, array $params)
{
if (!isset($params['name'])) {
throw new MissingArgumentException('name');
}
if (!isset($params['color'])) {
$params['color'] = 'FFFFFF';
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/labels', $params);
}
/**
* Delete a label for a repository.
*
* @link https://developer.github.com/v3/issues/labels/#remove-a-label-from-an-issue
*
* @param string $username
* @param string $repository
* @param string $label
*
* @return array
*/
public function deleteLabel($username, $repository, $label)
{
return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/labels/'.rawurlencode($label));
}
/**
* Edit a label for a repository.
*
* @link https://developer.github.com/v3/issues/labels/#update-a-label
*
* @param string $username
* @param string $repository
* @param string $label
* @param string $newName
* @param string $color
*
* @return array
*/
public function update($username, $repository, $label, $newName, $color)
{
$params = [
'name' => $newName,
'color' => $color,
];
return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/labels/'.rawurlencode($label), $params);
}
/**
* Add a label to an issue.
*
* @link https://developer.github.com/v3/issues/labels/#remove-a-label-from-an-issue
*
* @param string $username
* @param string $repository
* @param int $issue
* @param string $labels
*
* @return array
*
* @thorws \Github\Exception\InvalidArgumentException
*/
public function add($username, $repository, $issue, $labels)
{
if (is_string($labels)) {
$labels = [$labels];
} elseif (0 === count($labels)) {
throw new InvalidArgumentException();
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/labels', $labels);
}
/**
* Replace labels for an issue.
*
* @link https://developer.github.com/v3/issues/labels/#replace-all-labels-for-an-issue
*
* @param string $username
* @param string $repository
* @param int $issue
* @param array $params
*
* @return array
*/
public function replace($username, $repository, $issue, array $params)
{
return $this->put('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/labels', $params);
}
/**
* Remove a label for an issue.
*
* @link https://developer.github.com/v3/issues/labels/#remove-a-label-from-an-issue
*
* @param string $username
* @param string $repository
* @param string $issue
* @param string $label
*
* @return null
*/
public function remove($username, $repository, $issue, $label)
{
return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/labels/'.rawurlencode($label));
}
/**
* Remove all labels from an issue.
*
* @link https://developer.github.com/v3/issues/labels/#replace-all-labels-for-an-issue
*
* @param string $username
* @param string $repository
* @param string $issue
*
* @return null
*/
public function clear($username, $repository, $issue)
{
return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/labels');
}
}

View file

@ -0,0 +1,139 @@
<?php
namespace Github\Api\Issue;
use Github\Api\AbstractApi;
use Github\Exception\MissingArgumentException;
/**
* @link http://developer.github.com/v3/issues/milestones/
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
class Milestones extends AbstractApi
{
/**
* Get all milestones for a repository.
*
* @link https://developer.github.com/v3/issues/milestones/#list-milestones-for-a-repository
*
* @param string $username
* @param string $repository
* @param array $params
*
* @return array
*/
public function all($username, $repository, array $params = [])
{
if (isset($params['state']) && !in_array($params['state'], ['open', 'closed', 'all'])) {
$params['state'] = 'open';
}
if (isset($params['sort']) && !in_array($params['sort'], ['due_date', 'completeness'])) {
$params['sort'] = 'due_date';
}
if (isset($params['direction']) && !in_array($params['direction'], ['asc', 'desc'])) {
$params['direction'] = 'asc';
}
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/milestones', array_merge([
'page' => 1,
'state' => 'open',
'sort' => 'due_date',
'direction' => 'asc',
], $params));
}
/**
* Get a milestone for a repository.
*
* @link https://developer.github.com/v3/issues/milestones/#get-a-single-milestone
*
* @param string $username
* @param string $repository
* @param int $id
*
* @return array
*/
public function show($username, $repository, $id)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/milestones/'.rawurlencode($id));
}
/**
* Create a milestone for a repository.
*
* @link https://developer.github.com/v3/issues/milestones/#create-a-milestone
*
* @param string $username
* @param string $repository
* @param array $params
*
* @throws \Github\Exception\MissingArgumentException
*
* @return array
*/
public function create($username, $repository, array $params)
{
if (!isset($params['title'])) {
throw new MissingArgumentException('title');
}
if (isset($params['state']) && !in_array($params['state'], ['open', 'closed'])) {
$params['state'] = 'open';
}
return $this->post('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/milestones', $params);
}
/**
* Update a milestone for a repository.
*
* @link https://developer.github.com/v3/issues/milestones/#update-a-milestone
*
* @param string $username
* @param string $repository
* @param int $id
* @param array $params
*
* @return array
*/
public function update($username, $repository, $id, array $params)
{
if (isset($params['state']) && !in_array($params['state'], ['open', 'closed'])) {
$params['state'] = 'open';
}
return $this->patch('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/milestones/'.rawurlencode($id), $params);
}
/**
* Delete a milestone for a repository.
*
* @link https://developer.github.com/v3/issues/milestones/#delete-a-milestone
*
* @param string $username
* @param string $repository
* @param int $id
*
* @return null
*/
public function remove($username, $repository, $id)
{
return $this->delete('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/milestones/'.rawurlencode($id));
}
/**
* Get the labels of a milestone.
*
* @link https://developer.github.com/v3/issues/labels/#get-labels-for-every-issue-in-a-milestone
*
* @param string $username
* @param string $repository
* @param int $id
*
* @return array
*/
public function labels($username, $repository, $id)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/milestones/'.rawurlencode($id).'/labels');
}
}

View file

@ -0,0 +1,34 @@
<?php
namespace Github\Api\Issue;
use Github\Api\AbstractApi;
use Github\Api\AcceptHeaderTrait;
class Timeline extends AbstractApi
{
use AcceptHeaderTrait;
public function configure()
{
$this->acceptHeaderValue = 'application/vnd.github.mockingbird-preview';
return $this;
}
/**
* Get all events for a specific issue.
*
* @link https://developer.github.com/v3/issues/timeline/#list-events-for-an-issue
*
* @param string $username
* @param string $repository
* @param int $issue
*
* @return array
*/
public function all($username, $repository, $issue)
{
return $this->get('/repos/'.rawurlencode($username).'/'.rawurlencode($repository).'/issues/'.rawurlencode($issue).'/timeline');
}
}

View file

@ -0,0 +1,49 @@
<?php
namespace Github\Api;
/**
* Markdown Rendering API.
*
* @link http://developer.github.com/v3/markdown/
*
* @author Joseph Bielawski <stloyd@gmail.com>
*/
class Markdown extends AbstractApi
{
/**
* @param string $text
* @param string $mode
* @param string $context
*
* @return string
*/
public function render($text, $mode = 'markdown', $context = null)
{
if (!in_array($mode, ['gfm', 'markdown'])) {
$mode = 'markdown';
}
$params = [
'text' => $text,
'mode' => $mode,
];
if (null !== $context && 'gfm' === $mode) {
$params['context'] = $context;
}
return $this->post('/markdown', $params);
}
/**
* @param string $file
*
* @return string
*/
public function renderRaw($file)
{
return $this->post('/markdown/raw', [
'file' => $file,
]);
}
}

View file

@ -0,0 +1,23 @@
<?php
namespace Github\Api;
/**
* Getting GitHub service information.
*
* @link https://developer.github.com/v3/meta/
*
* @author Claude Dioudonnat <claude.dioudonnat@gmail.com>
*/
class Meta extends AbstractApi
{
/**
* Get the ip address of the hook and git servers for the GitHub.com service.
*
* @return array Information about the service of GitHub.com
*/
public function service()
{
return $this->get('/meta');
}
}

View file

@ -0,0 +1,44 @@
<?php
namespace Github\Api\Miscellaneous;
use Github\Api\AbstractApi;
use Github\Api\AcceptHeaderTrait;
class CodeOfConduct extends AbstractApi
{
use AcceptHeaderTrait;
public function configure()
{
$this->acceptHeaderValue = 'application/vnd.github.scarlet-witch-preview+json';
return $this;
}
/**
* List all codes of conduct.
*
* @link https://developer.github.com/v3/codes_of_conduct/#list-all-codes-of-conduct
*
* @return array
*/
public function all()
{
return $this->get('/codes_of_conduct');
}
/**
* Get an individual code of conduct.
*
* @link https://developer.github.com/v3/codes_of_conduct/#get-an-individual-code-of-conduct
*
* @param string $key
*
* @return array
*/
public function show($key)
{
return $this->get('/codes_of_conduct/'.rawurlencode($key));
}
}

View file

@ -0,0 +1,20 @@
<?php
namespace Github\Api\Miscellaneous;
use Github\Api\AbstractApi;
class Emojis extends AbstractApi
{
/**
* Lists all the emojis available to use on GitHub.
*
* @link https://developer.github.com/v3/emojis/
*
* @return array
*/
public function all()
{
return $this->get('/emojis');
}
}

Some files were not shown because too many files have changed in this diff Show more