diff --git a/.env.example b/.env.example index 56bc6d33..b6684070 100644 --- a/.env.example +++ b/.env.example @@ -62,3 +62,9 @@ SS_ENCRYPT_CYPHER=AES-256-CBC GOOGLE_CLIENT_ID="" GOOGLE_CLIENT_SECRET="" GOOGLE_SCOPES="" + +SSH_USER= +SSH_PUBLIC_KEY= +SSH_PRIVATE_KEY= +SCP_HOST= +SCP_REMOTE_BASE_PATH=/tmp \ No newline at end of file diff --git a/app/Events/FileCreated.php b/app/Events/FileCreated.php new file mode 100644 index 00000000..3ecd9b55 --- /dev/null +++ b/app/Events/FileCreated.php @@ -0,0 +1,73 @@ +local_path = $local_path; + $this->file_name = $file_name; + $this->folder_name = $folder_name; + } + + /** + * @return string + */ + public function getLocalPath() + { + return $this->local_path; + } + + /** + * @return string + */ + public function getFileName() + { + return $this->file_name; + } + + /** + * @return string + */ + public function getFolderName() + { + return $this->folder_name; + } + + +} \ No newline at end of file diff --git a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitEventsApiController.php b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitEventsApiController.php index fd1aa853..3aaa7e8e 100644 --- a/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitEventsApiController.php +++ b/app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitEventsApiController.php @@ -821,4 +821,42 @@ final class OAuth2SummitEventsApiController extends OAuth2ProtectedController return [$summit, $event, $data]; } + + public function addEventAttachment(LaravelRequest $request, $summit_id, $event_id){ + + try { + + $file = $request->file('file'); + if (is_null($file)) { + return $this->error412(array('file param not set!')); + } + + $summit = SummitFinderStrategyFactory::build($this->repository)->find($summit_id); + if (is_null($summit)) return $this->error404(); + + $res = $this->service->addEventAttachment($summit, $event_id, $file); + + return !is_null($res) ? $this->created($res->getId()) : $this->error400(); + } + catch (EntityNotFoundException $ex1) { + Log::warning($ex1); + return $this->error404(); + } + catch(ValidationException $ex2) + { + Log::warning($ex2); + return $this->error412(array($ex2->getMessage())); + } + catch(\HTTP401UnauthorizedException $ex3) + { + Log::warning($ex3); + return $this->error401(); + } + catch (Exception $ex) { + Log::error($ex); + + return $this->error500($ex); + } + } + } \ No newline at end of file diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index c9fa9197..7a3a88cd 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -12,5 +12,5 @@ use Illuminate\Foundation\Auth\Access\AuthorizesResources; */ class Controller extends BaseController { - use AuthorizesRequests, AuthorizesResources, DispatchesJobs, ValidatesRequests; + use AuthorizesRequests, DispatchesJobs, ValidatesRequests; } diff --git a/app/Http/Controllers/JsonController.php b/app/Http/Controllers/JsonController.php index 6d4e1b5d..7f9289ae 100644 --- a/app/Http/Controllers/JsonController.php +++ b/app/Http/Controllers/JsonController.php @@ -85,22 +85,22 @@ abstract class JsonController extends Controller return $res; } - protected function error400($data) + protected function error400($data = ['message' => 'Bad Request']) { return Response::json($data, 400); } - protected function error404($data = array('message' => 'Entity Not Found')) + protected function error404($data = ['message' => 'Entity Not Found']) { return Response::json($data, 404); } - protected function error403($data = array('message' => 'Forbidden')) + protected function error403($data = ['message' => 'Forbidden']) { return Response::json($data, 403); } - protected function error401($data = array('message' => 'You don\'t have access to this item through the API.')) + protected function error401($data = ['message' => 'You don\'t have access to this item through the API.']) { return Response::json($data, 401); } diff --git a/app/Http/Utils/FileUploader.php b/app/Http/Utils/FileUploader.php new file mode 100644 index 00000000..865b73ed --- /dev/null +++ b/app/Http/Utils/FileUploader.php @@ -0,0 +1,53 @@ +folder_repository = $folder_repository; + } + + /** + * @param UploadedFile $file + * @param $folder_name + * @return File + */ + public function build(UploadedFile $file, $folder_name){ + $attachment = new File(); + $local_path = Storage::putFileAs(sprintf('/public/%s', $folder_name), $file, $file->getClientOriginalName()); + $folder = $this->folder_repository->getFolderByName($folder_name); + $attachment->setParent($folder); + $attachment->setName($file->getClientOriginalName()); + $attachment->setFilename(sprintf("assets/%s/%s",$folder_name, $file->getClientOriginalName())); + $attachment->setTitle(str_replace(array('-','_'),' ', preg_replace('/\.[^.]+$/', '', $file->getClientOriginalName()))); + $attachment->setShowInSearch(true); + Event::fire(new FileCreated($local_path, $file->getClientOriginalName(), $folder_name)); + return $attachment; + } +} \ No newline at end of file diff --git a/app/Http/routes.php b/app/Http/routes.php index 7aed2f1b..42a834b3 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -194,6 +194,7 @@ Route::group([ Route::put('/publish', [ 'middleware' => 'auth.user:administrators', 'uses' => 'OAuth2SummitEventsApiController@publishEvent']); Route::delete('/publish', [ 'middleware' => 'auth.user:administrators', 'uses' => 'OAuth2SummitEventsApiController@unPublishEvent']); Route::post('/feedback', 'OAuth2SummitEventsApiController@addEventFeedback'); + Route::post('/attachment', 'OAuth2SummitEventsApiController@addEventAttachment'); Route::get('/feedback/{attendee_id?}', ['middleware' => 'cache:'.Config::get('cache_api_response.get_event_feedback_response_lifetime', 300), 'uses' => 'OAuth2SummitEventsApiController@getEventFeedback'] )->where('attendee_id', 'me|[0-9]+'); }); }); diff --git a/app/Models/Foundation/Main/AssetsSyncRequest.php b/app/Models/Foundation/Main/AssetsSyncRequest.php new file mode 100644 index 00000000..c9ed9831 --- /dev/null +++ b/app/Models/Foundation/Main/AssetsSyncRequest.php @@ -0,0 +1,109 @@ +from; + } + + /** + * @param string $from + */ + public function setFrom($from) + { + $this->from = $from; + } + + /** + * @return string + */ + public function getTo() + { + return $this->to; + } + + /** + * @param string $to + */ + public function setTo($to) + { + $this->to = $to; + } + + /** + * @return string + */ + public function getProcessed() + { + return $this->processed; + } + + /** + * @param string $processed + */ + public function setProcessed($processed) + { + $this->processed = $processed; + } + + /** + * @return DateTime + */ + public function getProcessedDate() + { + return $this->processed_date; + } + + /** + * @param DateTime $processed_date + */ + public function setProcessedDate($processed_date) + { + $this->processed_date = $processed_date; + } +} \ No newline at end of file diff --git a/app/Models/Foundation/Main/File.php b/app/Models/Foundation/Main/File.php index 95c08b29..194f7d32 100644 --- a/app/Models/Foundation/Main/File.php +++ b/app/Models/Foundation/Main/File.php @@ -11,12 +11,10 @@ * See the License for the specific language governing permissions and * limitations under the License. **/ - use models\utils\SilverstripeBaseModel; use Doctrine\ORM\Mapping AS ORM; - /** - * @ORM\Entity + * @ORM\Entity(repositoryClass="repositories\main\DoctrineFolderRepository") * @ORM\Table(name="File") * Class File * @package models\main @@ -28,20 +26,15 @@ class File extends SilverstripeBaseModel */ private $name; - /** - * @return string - */ - public function getName(){ return $this->name;} - /** * @ORM\Column(name="Title", type="string") */ private $title; /** - * @return string + * @ORM\Column(name="Content", type="string") */ - public function getTitle(){ return $this->title;} + private $content; /** * @ORM\Column(name="Filename", type="string") @@ -49,7 +42,134 @@ class File extends SilverstripeBaseModel private $filename; /** - * @return string + * @ORM\Column(name="ShowInSearch", type="boolean") + * @var bool */ - public function getFilename(){ return $this->filename;} + private $show_in_search; + + /** + * @ORM\ManyToOne(targetEntity="models\main\File") + * @ORM\JoinColumn(name="ParentID", referencedColumnName="ID") + * @var File + */ + private $parent; + + /** + * @ORM\ManyToOne(targetEntity="models\main\Member") + * @ORM\JoinColumn(name="OwnerID", referencedColumnName="ID") + * @var Member + */ + private $owner; + + /** + * @return mixed + */ + public function getName() + { + return $this->name; + } + + /** + * @param mixed $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return mixed + */ + public function getTitle() + { + return $this->title; + } + + /** + * @param mixed $title + */ + public function setTitle($title) + { + $this->title = $title; + } + + /** + * @return mixed + */ + public function getContent() + { + return $this->content; + } + + /** + * @param mixed $content + */ + public function setContent($content) + { + $this->content = $content; + } + + /** + * @return mixed + */ + public function getFilename() + { + return $this->filename; + } + + /** + * @param mixed $filename + */ + public function setFilename($filename) + { + $this->filename = $filename; + } + + /** + * @return bool + */ + public function isShowInSearch() + { + return $this->show_in_search; + } + + /** + * @param bool $show_in_search + */ + public function setShowInSearch($show_in_search) + { + $this->show_in_search = $show_in_search; + } + + /** + * @return File + */ + public function getParent() + { + return $this->parent; + } + + /** + * @param File $parent + */ + public function setParent($parent) + { + $this->parent = $parent; + } + + /** + * @return Member + */ + public function getOwner() + { + return $this->owner; + } + + /** + * @param Member $owner + */ + public function setOwner($owner) + { + $this->owner = $owner; + } } \ No newline at end of file diff --git a/app/Models/Foundation/Main/Repositories/IAssetsSyncRequestRepository.php b/app/Models/Foundation/Main/Repositories/IAssetsSyncRequestRepository.php new file mode 100644 index 00000000..f3cabd51 --- /dev/null +++ b/app/Models/Foundation/Main/Repositories/IAssetsSyncRequestRepository.php @@ -0,0 +1,22 @@ +registerPolicies($gate); + $this->registerPolicies(); // } diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index e1b0593b..fbedca36 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -1,5 +1,16 @@ getLocalPath(); + $file_name = $event->getFileName(); + $folder_name = $event->getFolderName(); + $remote_base_path = Config::get('scp.scp_remote_base_path', null); + $client = new SftpClient(); + $host = Config::get('scp.scp_host', null); + + $credentials = Credentials::withPublicKey + ( + Config::get('scp.ssh_user', null), + Config::get('scp.ssh_public_key', null), + Config::get('scp.ssh_private_key', null) + ); + + $client->setCredentials($credentials); + $client->connect($host); + $remote_destination = sprintf("%s/%s",$remote_base_path, $file_name); + $client->scpUpload(sprintf("%s/app/%s", $storage_path, $local_path), $remote_destination); + $client->close(); + + $asset_sync_request = new AssetsSyncRequest(); + $asset_sync_request->setFrom($remote_destination); + $asset_sync_request->setTo(sprintf("%s/%s", $folder_name, $file_name)); + $asset_sync_request->setProcessed(false); + $em = Registry::getManager('ss'); + $em->persist($asset_sync_request); + $em->flush(); + + }); + } } diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index f7c28e92..b7c9690e 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -19,14 +19,12 @@ class RouteServiceProvider extends ServiceProvider /** * Define your route model bindings, pattern filters, etc. * - * @param \Illuminate\Routing\Router $router * @return void */ - public function boot(Router $router) + public function boot() { // - - parent::boot($router); + parent::boot(); } /** diff --git a/app/Repositories/Main/DoctrineAssetsSyncRequestRepository.php b/app/Repositories/Main/DoctrineAssetsSyncRequestRepository.php new file mode 100644 index 00000000..3d3ae50d --- /dev/null +++ b/app/Repositories/Main/DoctrineAssetsSyncRequestRepository.php @@ -0,0 +1,36 @@ +_em); + $rsm->addRootEntityFromClassMetadata(\models\main\File::class, 'f'); + $native_query = $this->_em->createNativeQuery($query, $rsm); + + $native_query->setParameter("folder_name", $folder_name); + + return $native_query->getSingleResult(); + } + + /** + * @return string + */ + protected function getBaseEntity() + { + return File::class; + } +} \ No newline at end of file diff --git a/app/Repositories/RepositoriesProvider.php b/app/Repositories/RepositoriesProvider.php index 2003f484..ec64117e 100644 --- a/app/Repositories/RepositoriesProvider.php +++ b/app/Repositories/RepositoriesProvider.php @@ -14,6 +14,9 @@ use Illuminate\Support\Facades\App; use Illuminate\Support\ServiceProvider; use LaravelDoctrine\ORM\Facades\EntityManager; +use models\main\AssetsSyncRequest; +use models\main\File; + /** * Class RepositoriesProvider * @package repositories @@ -181,5 +184,17 @@ final class RepositoriesProvider extends ServiceProvider function(){ return EntityManager::getRepository(\App\Models\Foundation\Marketplace\RemoteCloudService::class); }); + + App::singleton( + 'models\main\IFolderRepository', + function(){ + return EntityManager::getRepository(File::class); + }); + + App::singleton( + 'models\main\IAssetsSyncRequestRepository', + function(){ + return EntityManager::getRepository(AssetsSyncRequest::class); + }); } } \ No newline at end of file diff --git a/app/Services/Model/ISummitService.php b/app/Services/Model/ISummitService.php index 4b581575..a674a783 100644 --- a/app/Services/Model/ISummitService.php +++ b/app/Services/Model/ISummitService.php @@ -1,7 +1,9 @@ rsvp_repository = $rsvp_repository; $this->calendar_sync_work_request_repository = $calendar_sync_work_request_repository; $this->eventbrite_api = $eventbrite_api; + $this->folder_repository = $folder_repository; $this->tx_service = $tx_service; } @@ -985,4 +999,46 @@ final class SummitService implements ISummitService return true; }); } + + /** + * @param Summit $summit + * @param int $event_id + * @param UploadedFile $file + * @param int $max_file_size + * @throws ValidationException + * @throws EntityNotFoundException + * @return File + */ + public function addEventAttachment(Summit $summit, $event_id, UploadedFile $file, $max_file_size = 10485760) + { + return $this->tx_service->transaction(function () use ($summit, $event_id, $file, $max_file_size) { + + $allowed_extensions = ['png','jpg','jpeg','gif','pdf']; + + $event = $summit->getEvent($event_id); + + if (is_null($event)) { + throw new EntityNotFoundException('event not found on summit!'); + } + + if(!$event instanceof SummitEventWithFile){ + throw new ValidationException(sprintf("event id %s does not allow attachments!", $event_id)); + } + + if(!in_array($file->extension(), $allowed_extensions)){ + throw new ValidationException("file does not has a valid extension ('png','jpg','jpeg','gif','pdf')."); + } + + if($file->getSize() > $max_file_size) + { + throw new ValidationException(sprintf( "file exceeds max_file_size (%s MB).", ($max_file_size/1024)/1024)); + } + + $uploader = new FileUploader($this->folder_repository); + $attachment = $uploader->build($file, 'summit-event-attachments'); + $event->setAttachment($attachment); + + return $attachment; + }); + } } \ No newline at end of file diff --git a/bindep.txt b/bindep.txt new file mode 100644 index 00000000..db9ab84f --- /dev/null +++ b/bindep.txt @@ -0,0 +1,32 @@ +mcrypt + +php [platform:ubuntu-xenial] +php5 [platform:dpkg !platform:ubuntu-xenial] + +php-cli [platform:rpm platform:ubuntu-xenial] +php5-cli [platform:dpkg !platform:ubuntu-xenial] + +php-common [platform:ubuntu-xenial] +php5-common [platform:dpkg !platform:ubuntu-xenial] + +php-curl [platform:rpm platform:ubuntu-xenial] +php5-curl [platform:dpkg !platform:ubuntu-xenial] + +php-gd [platform:rpm platform:ubuntu-xenial] +php5-gd [platform:dpkg !platform:ubuntu-xenial] + +php-json [platform:rpm platform:ubuntu-xenial] +php5-json [platform:dpkg !platform:ubuntu-xenial] + +php-mysql [platform:rpm platform:ubuntu-xenial] +php5-mysql [platform:dpkg !platform:ubuntu-xenial] + +php-gmp [platform:rpm platform:ubuntu-xenial] +php5-gmp [platform:dpkg !platform:ubuntu-xenial] + +php-mcrypt [platform:ubuntu-xenial] +php5-mcrypt [platform:dpkg !platform:ubuntu-xenial] + +php-ssh2 [platform:ubuntu-xenial] +php5-ssh2 [platform:dpkg !platform:ubuntu-xenial] + diff --git a/composer.json b/composer.json index dbbec434..ffdb2bff 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,7 @@ "type": "project", "require": { "php": ">=5.5.9", - "laravel/framework": "5.2.*", + "laravel/framework": "5.3.*", "predis/predis": "1.0.1", "ezyang/htmlpurifier": "4.7.0", "glenscott/url-normalizer" : "^1.4", @@ -24,8 +24,8 @@ "require-dev": { "fzaninotto/faker": "~1.4", "phpunit/phpunit": "~4.0", - "symfony/css-selector": "2.8.*|3.0.*", - "symfony/dom-crawler": "2.8.*|3.0.*", + "symfony/css-selector": "3.1.*", + "symfony/dom-crawler": "3.1.*", "mockery/mockery": "^0.9.9" }, "autoload": { diff --git a/composer.lock b/composer.lock index f2181548..0d5b13ea 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "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": "ead830c8e3853358c3bb00fa8888dc3f", + "content-hash": "e6753f00d5d0a8310c65d999f774b885", "packages": [ { "name": "classpreloader/classpreloader", @@ -687,12 +687,12 @@ "source": { "type": "git", "url": "https://github.com/doctrine/doctrine2.git", - "reference": "049470c787467e2c7f5a267b8b86c5a5d28498fc" + "reference": "c811c3ac8486c2a16626e04cc85dde31cab1db57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/049470c787467e2c7f5a267b8b86c5a5d28498fc", - "reference": "049470c787467e2c7f5a267b8b86c5a5d28498fc", + "url": "https://api.github.com/repos/doctrine/doctrine2/zipball/c811c3ac8486c2a16626e04cc85dde31cab1db57", + "reference": "c811c3ac8486c2a16626e04cc85dde31cab1db57", "shasum": "" }, "require": { @@ -755,7 +755,7 @@ "database", "orm" ], - "time": "2017-11-12T11:25:46+00:00" + "time": "2017-11-24T01:43:33+00:00" }, { "name": "eluceo/ical", @@ -1001,16 +1001,16 @@ }, { "name": "google/apiclient-services", - "version": "v0.34", + "version": "v0.35", "source": { "type": "git", "url": "https://github.com/google/google-api-php-client-services.git", - "reference": "4d0d438e323929579cabf0b4d420177a96835c6d" + "reference": "8c3926a9dafcd1bc86e5af06a1bb7e4aa931c73c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/google/google-api-php-client-services/zipball/4d0d438e323929579cabf0b4d420177a96835c6d", - "reference": "4d0d438e323929579cabf0b4d420177a96835c6d", + "url": "https://api.github.com/repos/google/google-api-php-client-services/zipball/8c3926a9dafcd1bc86e5af06a1bb7e4aa931c73c", + "reference": "8c3926a9dafcd1bc86e5af06a1bb7e4aa931c73c", "shasum": "" }, "require": { @@ -1034,7 +1034,7 @@ "keywords": [ "google" ], - "time": "2017-11-11T00:27:24+00:00" + "time": "2017-11-18T00:23:16+00:00" }, { "name": "google/auth", @@ -1262,6 +1262,52 @@ ], "time": "2017-10-07T03:19:56+00:00" }, + { + "name": "idct/sftp-client", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/ideaconnect/idct-sftp-client.git", + "reference": "d0362d7b7332cc376fa82d2aa540261bc60f257a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ideaconnect/idct-sftp-client/zipball/d0362d7b7332cc376fa82d2aa540261bc60f257a", + "reference": "d0362d7b7332cc376fa82d2aa540261bc60f257a", + "shasum": "" + }, + "require": { + "ext-ssh2": ">=0.12", + "php": ">=5.3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "IDCT\\Networking\\Ssh\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bartosz PachoĊ‚ek", + "email": "bartosz@ideaconnect.pl", + "role": "lead" + } + ], + "description": "Library that provides wrapper methods around SSH2 and SFTP to simplify file download/upload over SSH/SCP/SFTP.", + "homepage": "https://github.com/ideaconnect/idct-sftp-client", + "keywords": [ + "idct", + "scp", + "sftp", + "ssh", + "ssh2" + ], + "time": "2017-09-19 15:52:12" + }, { "name": "ircmaxell/password-compat", "version": "1.0.x-dev", @@ -1586,16 +1632,16 @@ }, { "name": "laravel/framework", - "version": "5.2.x-dev", + "version": "5.3.x-dev", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "f61a75d2a3a0cd99ec2e28d3d3de2753824df876" + "reference": "4ab4e5f9470939e1c853196e1d5c84830c8b22e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/f61a75d2a3a0cd99ec2e28d3d3de2753824df876", - "reference": "f61a75d2a3a0cd99ec2e28d3d3de2753824df876", + "url": "https://api.github.com/repos/laravel/framework/zipball/4ab4e5f9470939e1c853196e1d5c84830c8b22e3", + "reference": "4ab4e5f9470939e1c853196e1d5c84830c8b22e3", "shasum": "" }, "require": { @@ -1608,20 +1654,20 @@ "monolog/monolog": "~1.11", "mtdowling/cron-expression": "~1.0", "nesbot/carbon": "~1.20", - "paragonie/random_compat": "~1.4", - "php": ">=5.5.9", - "psy/psysh": "0.7.*", - "swiftmailer/swiftmailer": "~5.1", - "symfony/console": "2.8.*|3.0.*", - "symfony/debug": "2.8.*|3.0.*", - "symfony/finder": "2.8.*|3.0.*", - "symfony/http-foundation": "2.8.*|3.0.*", - "symfony/http-kernel": "2.8.*|3.0.*", - "symfony/polyfill-php56": "~1.0", - "symfony/process": "2.8.*|3.0.*", - "symfony/routing": "2.8.*|3.0.*", - "symfony/translation": "2.8.*|3.0.*", - "symfony/var-dumper": "2.8.*|3.0.*", + "paragonie/random_compat": "~1.4|~2.0", + "php": ">=5.6.4", + "psy/psysh": "0.7.*|0.8.*", + "ramsey/uuid": "~3.0", + "swiftmailer/swiftmailer": "~5.4", + "symfony/console": "3.1.*", + "symfony/debug": "3.1.*", + "symfony/finder": "3.1.*", + "symfony/http-foundation": "3.1.*", + "symfony/http-kernel": "3.1.*", + "symfony/process": "3.1.*", + "symfony/routing": "3.1.*", + "symfony/translation": "3.1.*", + "symfony/var-dumper": "3.1.*", "vlucas/phpdotenv": "~2.2" }, "replace": { @@ -1643,6 +1689,7 @@ "illuminate/http": "self.version", "illuminate/log": "self.version", "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", "illuminate/pagination": "self.version", "illuminate/pipeline": "self.version", "illuminate/queue": "self.version", @@ -1659,10 +1706,10 @@ "aws/aws-sdk-php": "~3.0", "mockery/mockery": "~0.9.4", "pda/pheanstalk": "~3.0", - "phpunit/phpunit": "~4.1", + "phpunit/phpunit": "~5.4", "predis/predis": "~1.0", - "symfony/css-selector": "2.8.*|3.0.*", - "symfony/dom-crawler": "2.8.*|3.0.*" + "symfony/css-selector": "3.1.*", + "symfony/dom-crawler": "3.1.*" }, "suggest": { "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (~3.0).", @@ -1674,20 +1721,17 @@ "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", "predis/predis": "Required to use the redis cache and queue drivers (~1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (~2.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (2.8.*|3.0.*).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (2.8.*|3.0.*).", + "symfony/css-selector": "Required to use some of the crawler integration testing tools (3.1.*).", + "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (3.1.*).", "symfony/psr-http-message-bridge": "Required to use psr7 bridging features (0.2.*)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.2-dev" + "dev-master": "5.3-dev" } }, "autoload": { - "classmap": [ - "src/Illuminate/Queue/IlluminateQueueClosure.php" - ], "files": [ "src/Illuminate/Foundation/helpers.php", "src/Illuminate/Support/helpers.php" @@ -1703,16 +1747,16 @@ "authors": [ { "name": "Taylor Otwell", - "email": "taylorotwell@gmail.com" + "email": "taylor@laravel.com" } ], "description": "The Laravel Framework.", - "homepage": "http://laravel.com", + "homepage": "https://laravel.com", "keywords": [ "framework", "laravel" ], - "time": "2017-08-12T11:47:23+00:00" + "time": "2017-08-12T11:52:23+00:00" }, { "name": "league/flysystem", @@ -1720,12 +1764,12 @@ "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "8f4639a34cabf69c300814258e6eadc13b0f1aed" + "reference": "3b7394d78ad5936dab8a7041c63ac83722af27d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/8f4639a34cabf69c300814258e6eadc13b0f1aed", - "reference": "8f4639a34cabf69c300814258e6eadc13b0f1aed", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3b7394d78ad5936dab8a7041c63ac83722af27d9", + "reference": "3b7394d78ad5936dab8a7041c63ac83722af27d9", "shasum": "" }, "require": { @@ -1797,7 +1841,7 @@ "sftp", "storage" ], - "time": "2017-11-10T20:20:27+00:00" + "time": "2017-11-23T17:51:36+00:00" }, { "name": "league/oauth2-client", @@ -2043,24 +2087,24 @@ }, { "name": "nikic/php-parser", - "version": "2.x-dev", + "version": "3.x-dev", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4dd659edadffdc2143e4753df655d866dbfeedf0" + "reference": "94ca9a7ab9a9eff7fa15a4a173a8735755ed30f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4dd659edadffdc2143e4753df655d866dbfeedf0", - "reference": "4dd659edadffdc2143e4753df655d866dbfeedf0", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/94ca9a7ab9a9eff7fa15a4a173a8735755ed30f8", + "reference": "94ca9a7ab9a9eff7fa15a4a173a8735755ed30f8", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.4" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "~4.0|~5.0" }, "bin": [ "bin/php-parse" @@ -2068,7 +2112,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -2090,20 +2134,20 @@ "parser", "php" ], - "time": "2016-09-16T12:04:44+00:00" + "time": "2017-11-13T00:14:55+00:00" }, { "name": "paragonie/random_compat", - "version": "v1.x-dev", + "version": "v2.0.11", "source": { "type": "git", "url": "https://github.com/paragonie/random_compat.git", - "reference": "965cdeb01fdcab7653253aa81d40441d261f1e66" + "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/965cdeb01fdcab7653253aa81d40441d261f1e66", - "reference": "965cdeb01fdcab7653253aa81d40441d261f1e66", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8", + "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8", "shasum": "" }, "require": { @@ -2138,7 +2182,7 @@ "pseudorandom", "random" ], - "time": "2017-03-13T16:22:52+00:00" + "time": "2017-09-27T21:40:39+00:00" }, { "name": "phpseclib/phpseclib", @@ -2146,12 +2190,12 @@ "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "6a65ea28ecac752eb58814076f43d93bb161d9e7" + "reference": "c5d0674c2093d47c7b87f4f3f9e4403386472012" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/6a65ea28ecac752eb58814076f43d93bb161d9e7", - "reference": "6a65ea28ecac752eb58814076f43d93bb161d9e7", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c5d0674c2093d47c7b87f4f3f9e4403386472012", + "reference": "c5d0674c2093d47c7b87f4f3f9e4403386472012", "shasum": "" }, "require": { @@ -2230,7 +2274,7 @@ "x.509", "x509" ], - "time": "2017-11-12T05:15:00+00:00" + "time": "2017-11-23T16:25:34+00:00" }, { "name": "predis/predis", @@ -2427,37 +2471,38 @@ }, { "name": "psy/psysh", - "version": "v0.7.2", + "version": "dev-develop", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "e64e10b20f8d229cac76399e1f3edddb57a0f280" + "reference": "3d025e023fb934e222dce67134956196858b1b24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/e64e10b20f8d229cac76399e1f3edddb57a0f280", - "reference": "e64e10b20f8d229cac76399e1f3edddb57a0f280", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/3d025e023fb934e222dce67134956196858b1b24", + "reference": "3d025e023fb934e222dce67134956196858b1b24", "shasum": "" }, "require": { "dnoegel/php-xdg-base-dir": "0.1", "jakub-onderka/php-console-highlighter": "0.3.*", - "nikic/php-parser": "^1.2.1|~2.0", + "nikic/php-parser": "~1.3|~2.0|~3.0", "php": ">=5.3.9", "symfony/console": "~2.3.10|^2.4.2|~3.0", "symfony/var-dumper": "~2.7|~3.0" }, "require-dev": { - "fabpot/php-cs-fixer": "~1.5", - "phpunit/phpunit": "~3.7|~4.0|~5.0", - "squizlabs/php_codesniffer": "~2.0", + "friendsofphp/php-cs-fixer": "~1.11", + "hoa/console": "~3.16|~1.14", + "phpunit/phpunit": "^4.8.35|^5.4.3", "symfony/finder": "~2.1|~3.0" }, "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history.", + "hoa/console": "A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit." }, "bin": [ "bin/psysh" @@ -2495,7 +2540,89 @@ "interactive", "shell" ], - "time": "2016-03-09T05:03:14+00:00" + "time": "2017-11-19T20:14:47+00:00" + }, + { + "name": "ramsey/uuid", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "ca4154648d3d4348bce636a43a72df3f9cd9134c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/ca4154648d3d4348bce636a43a72df3f9cd9134c", + "reference": "ca4154648d3d4348bce636a43a72df3f9cd9134c", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "^1.0|^2.0", + "php": "^5.4 || ^7.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "apigen/apigen": "^4.1", + "codeception/aspect-mock": "^1.0 | ~2.0.0", + "doctrine/annotations": "~1.2.0", + "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ^2.1", + "ircmaxell/random-lib": "^1.1", + "jakub-onderka/php-parallel-lint": "^0.9.0", + "mockery/mockery": "^0.9.4", + "moontoast/math": "^1.1", + "php-mock/php-mock-phpunit": "^0.3|^1.1", + "phpunit/phpunit": "^4.7|^5.0", + "satooshi/php-coveralls": "^0.6.1", + "squizlabs/php_codesniffer": "^2.3" + }, + "suggest": { + "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", + "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", + "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", + "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marijn Huizendveld", + "email": "marijn.huizendveld@gmail.com" + }, + { + "name": "Thibaud Fabre", + "email": "thibaud@aztech.io" + }, + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "time": "2017-11-09T03:25:25+00:00" }, { "name": "sabre/uri", @@ -2714,12 +2841,12 @@ "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "93df08e2dadf7ae27fef6eb7dd4ad4cdbd1e6b5f" + "reference": "c1265670eec0664247d149072593ae309e8bf73e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/93df08e2dadf7ae27fef6eb7dd4ad4cdbd1e6b5f", - "reference": "93df08e2dadf7ae27fef6eb7dd4ad4cdbd1e6b5f", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/c1265670eec0664247d149072593ae309e8bf73e", + "reference": "c1265670eec0664247d149072593ae309e8bf73e", "shasum": "" }, "require": { @@ -2754,30 +2881,31 @@ } ], "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "http://swiftmailer.symfony.com", + "homepage": "https://swiftmailer.symfony.com", "keywords": [ "email", "mail", "mailer" ], - "time": "2017-08-29T20:43:58+00:00" + "time": "2017-11-23T14:49:16+00:00" }, { "name": "symfony/console", - "version": "3.0.x-dev", + "version": "3.1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "926061e74229e935d3c5b4e9ba87237316c6693f" + "reference": "047f16485d68c083bd5d9b73ff16f9cb9c1a9f52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/926061e74229e935d3c5b4e9ba87237316c6693f", - "reference": "926061e74229e935d3c5b4e9ba87237316c6693f", + "url": "https://api.github.com/repos/symfony/console/zipball/047f16485d68c083bd5d9b73ff16f9cb9c1a9f52", + "reference": "047f16485d68c083bd5d9b73ff16f9cb9c1a9f52", "shasum": "" }, "require": { "php": ">=5.5.9", + "symfony/debug": "~2.8|~3.0", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { @@ -2793,7 +2921,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -2820,20 +2948,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-07-30T07:22:48+00:00" + "time": "2017-01-08T20:43:43+00:00" }, { "name": "symfony/debug", - "version": "3.0.x-dev", + "version": "3.1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a" + "reference": "c6661361626b3cf5cf2089df98b3b5006a197e85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/697c527acd9ea1b2d3efac34d9806bf255278b0a", - "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a", + "url": "https://api.github.com/repos/symfony/debug/zipball/c6661361626b3cf5cf2089df98b3b5006a197e85", + "reference": "c6661361626b3cf5cf2089df98b3b5006a197e85", "shasum": "" }, "require": { @@ -2850,7 +2978,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -2877,7 +3005,7 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-07-30T07:22:48+00:00" + "time": "2017-01-28T00:04:57+00:00" }, { "name": "symfony/event-dispatcher", @@ -2944,16 +3072,16 @@ }, { "name": "symfony/finder", - "version": "3.0.x-dev", + "version": "3.1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "3eb4e64c6145ef8b92adefb618a74ebdde9e3fe9" + "reference": "59687a255d1562f2c17b012418273862083d85f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/3eb4e64c6145ef8b92adefb618a74ebdde9e3fe9", - "reference": "3eb4e64c6145ef8b92adefb618a74ebdde9e3fe9", + "url": "https://api.github.com/repos/symfony/finder/zipball/59687a255d1562f2c17b012418273862083d85f7", + "reference": "59687a255d1562f2c17b012418273862083d85f7", "shasum": "" }, "require": { @@ -2962,7 +3090,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -2989,20 +3117,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-06-29T05:40:00+00:00" + "time": "2017-01-02T20:31:54+00:00" }, { "name": "symfony/http-foundation", - "version": "3.0.x-dev", + "version": "3.1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "49ba00f8ede742169cb6b70abe33243f4d673f82" + "reference": "cef0ad49a2e90455cfc649522025b5a2929648c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/49ba00f8ede742169cb6b70abe33243f4d673f82", - "reference": "49ba00f8ede742169cb6b70abe33243f4d673f82", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cef0ad49a2e90455cfc649522025b5a2929648c0", + "reference": "cef0ad49a2e90455cfc649522025b5a2929648c0", "shasum": "" }, "require": { @@ -3015,7 +3143,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -3042,20 +3170,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2016-07-17T13:54:30+00:00" + "time": "2017-01-08T20:43:43+00:00" }, { "name": "symfony/http-kernel", - "version": "3.0.x-dev", + "version": "3.1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "03ac7bbc8fccbf002e0bea88dbe09262b29dc2a9" + "reference": "c830387dec1b48c100473d10a6a356c3c3ae2a13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/03ac7bbc8fccbf002e0bea88dbe09262b29dc2a9", - "reference": "03ac7bbc8fccbf002e0bea88dbe09262b29dc2a9", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/c830387dec1b48c100473d10a6a356c3c3ae2a13", + "reference": "c830387dec1b48c100473d10a6a356c3c3ae2a13", "shasum": "" }, "require": { @@ -3063,7 +3191,7 @@ "psr/log": "~1.0", "symfony/debug": "~2.8|~3.0", "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/http-foundation": "~2.8.8|~3.0.8|~3.1.2|~3.2" + "symfony/http-foundation": "~2.8.13|~3.1.6|~3.2" }, "conflict": { "symfony/config": "<2.8" @@ -3097,7 +3225,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -3124,7 +3252,7 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2016-07-30T09:29:03+00:00" + "time": "2017-01-28T02:53:17+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -3351,16 +3479,16 @@ }, { "name": "symfony/process", - "version": "3.0.x-dev", + "version": "3.1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "768debc5996f599c4372b322d9061dba2a4bf505" + "reference": "2605753c5f8c531623d24d002825ebb1d6a22248" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/768debc5996f599c4372b322d9061dba2a4bf505", - "reference": "768debc5996f599c4372b322d9061dba2a4bf505", + "url": "https://api.github.com/repos/symfony/process/zipball/2605753c5f8c531623d24d002825ebb1d6a22248", + "reference": "2605753c5f8c531623d24d002825ebb1d6a22248", "shasum": "" }, "require": { @@ -3369,7 +3497,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -3396,20 +3524,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2016-07-28T11:13:34+00:00" + "time": "2017-01-21T17:13:55+00:00" }, { "name": "symfony/routing", - "version": "3.0.x-dev", + "version": "3.1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9038984bd9c05ab07280121e9e10f61a7231457b" + "reference": "f25581d4eb0a82962c291917f826166f0dcd8a9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9038984bd9c05ab07280121e9e10f61a7231457b", - "reference": "9038984bd9c05ab07280121e9e10f61a7231457b", + "url": "https://api.github.com/repos/symfony/routing/zipball/f25581d4eb0a82962c291917f826166f0dcd8a9a", + "reference": "f25581d4eb0a82962c291917f826166f0dcd8a9a", "shasum": "" }, "require": { @@ -3438,7 +3566,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -3471,7 +3599,7 @@ "uri", "url" ], - "time": "2016-06-29T05:40:00+00:00" + "time": "2017-01-28T00:04:57+00:00" }, { "name": "symfony/serializer", @@ -3539,16 +3667,16 @@ }, { "name": "symfony/translation", - "version": "3.0.x-dev", + "version": "3.1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "eee6c664853fd0576f21ae25725cfffeafe83f26" + "reference": "d5a20fab5f63f44c233c69b3041c3cb1d4945e45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/eee6c664853fd0576f21ae25725cfffeafe83f26", - "reference": "eee6c664853fd0576f21ae25725cfffeafe83f26", + "url": "https://api.github.com/repos/symfony/translation/zipball/d5a20fab5f63f44c233c69b3041c3cb1d4945e45", + "reference": "d5a20fab5f63f44c233c69b3041c3cb1d4945e45", "shasum": "" }, "require": { @@ -3572,7 +3700,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -3599,20 +3727,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2016-07-30T07:22:48+00:00" + "time": "2017-01-21T17:01:39+00:00" }, { "name": "symfony/var-dumper", - "version": "3.0.x-dev", + "version": "3.1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "1f7e071aafc6676fcb6e3f0497f87c2397247377" + "reference": "16df11647e5b992d687cb4eeeb9a882d5f5c26b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1f7e071aafc6676fcb6e3f0497f87c2397247377", - "reference": "1f7e071aafc6676fcb6e3f0497f87c2397247377", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/16df11647e5b992d687cb4eeeb9a882d5f5c26b9", + "reference": "16df11647e5b992d687cb4eeeb9a882d5f5c26b9", "shasum": "" }, "require": { @@ -3628,7 +3756,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -3662,7 +3790,7 @@ "debug", "dump" ], - "time": "2016-07-26T08:03:56+00:00" + "time": "2017-01-24T13:02:38+00:00" }, { "name": "vlucas/phpdotenv", @@ -3670,19 +3798,19 @@ "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "828d19e597052ddeee65890bb2b1a0912d79fea8" + "reference": "ec37c495d56b68f103acafa95fec5ed39b14d7db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/828d19e597052ddeee65890bb2b1a0912d79fea8", - "reference": "828d19e597052ddeee65890bb2b1a0912d79fea8", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/ec37c495d56b68f103acafa95fec5ed39b14d7db", + "reference": "ec37c495d56b68f103acafa95fec5ed39b14d7db", "shasum": "" }, "require": { "php": ">=5.3.9" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" + "phpunit/phpunit": "^4.8.35 || ^5.0" }, "type": "library", "extra": { @@ -3712,7 +3840,7 @@ "env", "environment" ], - "time": "2017-10-10T06:32:45+00:00" + "time": "2017-11-24T14:28:50+00:00" } ], "packages-dev": [ @@ -3938,22 +4066,22 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.2.2", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157" + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/4aada1f93c72c35e22fb1383b47fee43b8f1d157", - "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.3.0", + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { @@ -3979,20 +4107,20 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-08-08T06:39:58+00:00" + "time": "2017-11-10T14:09:06+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.3.0", + "version": "0.4.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773" + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fb3933512008d8162b3cdf9e18dba9309b7c3773", - "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", "shasum": "" }, "require": { @@ -4026,7 +4154,7 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-06-03T08:32:36+00:00" + "time": "2017-07-14T14:27:02+00:00" }, { "name": "phpspec/prophecy", @@ -4034,12 +4162,12 @@ "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "ddd9d7ffff1d7c3acd1a79a8e21d5ee5ea7beace" + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/ddd9d7ffff1d7c3acd1a79a8e21d5ee5ea7beace", - "reference": "ddd9d7ffff1d7c3acd1a79a8e21d5ee5ea7beace", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", "shasum": "" }, "require": { @@ -4089,7 +4217,7 @@ "spy", "stub" ], - "time": "2017-11-07T12:00:44+00:00" + "time": "2017-11-24T13:59:53+00:00" }, { "name": "phpunit/php-code-coverage", @@ -4159,12 +4287,12 @@ "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "63304292f3cf89b2382b90dd7a2abf9e0ba232f9" + "reference": "8ebba84e5bd74fc5fdeb916b38749016c7232f93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/63304292f3cf89b2382b90dd7a2abf9e0ba232f9", - "reference": "63304292f3cf89b2382b90dd7a2abf9e0ba232f9", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/8ebba84e5bd74fc5fdeb916b38749016c7232f93", + "reference": "8ebba84e5bd74fc5fdeb916b38749016c7232f93", "shasum": "" }, "require": { @@ -4198,7 +4326,7 @@ "filesystem", "iterator" ], - "time": "2017-10-30T04:21:02+00:00" + "time": "2017-11-24T15:00:59+00:00" }, { "name": "phpunit/php-text-template", @@ -4841,16 +4969,16 @@ }, { "name": "symfony/css-selector", - "version": "3.0.x-dev", + "version": "3.1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "b8999c1f33c224b2b66b38253f5e3a838d0d0115" + "reference": "722a87478a72d95dc2a3bcf41dc9c2d13fd4cb2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/b8999c1f33c224b2b66b38253f5e3a838d0d0115", - "reference": "b8999c1f33c224b2b66b38253f5e3a838d0d0115", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/722a87478a72d95dc2a3bcf41dc9c2d13fd4cb2d", + "reference": "722a87478a72d95dc2a3bcf41dc9c2d13fd4cb2d", "shasum": "" }, "require": { @@ -4859,7 +4987,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -4890,20 +5018,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2016-06-29T05:40:00+00:00" + "time": "2017-01-02T20:31:54+00:00" }, { "name": "symfony/dom-crawler", - "version": "3.0.x-dev", + "version": "3.1.x-dev", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "dff8fecf1f56990d88058e3a1885c2a5f1b8e970" + "reference": "7eede2a901a19928494194f7d1815a77b9a473a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/dff8fecf1f56990d88058e3a1885c2a5f1b8e970", - "reference": "dff8fecf1f56990d88058e3a1885c2a5f1b8e970", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/7eede2a901a19928494194f7d1815a77b9a473a0", + "reference": "7eede2a901a19928494194f7d1815a77b9a473a0", "shasum": "" }, "require": { @@ -4919,7 +5047,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -4946,7 +5074,7 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2016-07-30T07:22:48+00:00" + "time": "2017-01-21T17:13:55+00:00" }, { "name": "symfony/yaml", @@ -5058,7 +5186,8 @@ "minimum-stability": "dev", "stability-flags": { "smarcet/caldavclient": 20, - "smarcet/outlook-rest-client": 20 + "smarcet/outlook-rest-client": 20, + "idct/sftp-client": 20 }, "prefer-stable": false, "prefer-lowest": false, diff --git a/config/scp.php b/config/scp.php new file mode 100644 index 00000000..c4bd28cc --- /dev/null +++ b/config/scp.php @@ -0,0 +1,22 @@ + env('SSH_USER', ''), + 'ssh_public_key' => env('SSH_PUBLIC_KEY', ''), + 'ssh_private_key' => env('SSH_PRIVATE_KEY', ''), + 'scp_host' => env('SCP_HOST', ''), + 'scp_remote_base_path' => env('SCP_REMOTE_BASE_PATH', ''), +]; \ No newline at end of file diff --git a/database/seeds/ApiEndpointsSeeder.php b/database/seeds/ApiEndpointsSeeder.php index b626d34a..453328d9 100644 --- a/database/seeds/ApiEndpointsSeeder.php +++ b/database/seeds/ApiEndpointsSeeder.php @@ -230,6 +230,12 @@ class ApiEndpointsSeeder extends Seeder 'http_method' => 'POST', 'scopes' => [sprintf('%s/summits/write', $current_realm)], ), + array( + 'name' => 'add-event-attachment', + 'route' => '/api/v1/summits/{id}/events/{event_id}/attachment', + 'http_method' => 'POST', + 'scopes' => [sprintf('%s/summits/write', $current_realm)], + ), array( 'name' => 'add-event-feedback-v2', 'route' => '/api/v2/summits/{id}/events/{event_id}/feedback',