Add support for the FTP service notifying app of new uploads for processing.

This commit is contained in:
Buster Neece 2019-08-26 17:05:32 -05:00
parent 1a1a18dfe7
commit 457c4896f6
No known key found for this signature in database
GPG Key ID: 6D9E12FF03411F4E
4 changed files with 238 additions and 143 deletions

289
composer.lock generated
View File

@ -8,16 +8,16 @@
"packages": [
{
"name": "aws/aws-sdk-php",
"version": "3.109.6",
"version": "3.110.3",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "c129c2120943340cb102ab1a1c7c76d03c00bcc4"
"reference": "ea9a67360bafee5570b3cd9cb1478b655a1f772c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/c129c2120943340cb102ab1a1c7c76d03c00bcc4",
"reference": "c129c2120943340cb102ab1a1c7c76d03c00bcc4",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/ea9a67360bafee5570b3cd9cb1478b655a1f772c",
"reference": "ea9a67360bafee5570b3cd9cb1478b655a1f772c",
"shasum": ""
},
"require": {
@ -87,7 +87,7 @@
"s3",
"sdk"
],
"time": "2019-08-16T18:13:56+00:00"
"time": "2019-08-26T18:09:29+00:00"
},
{
"name": "azuracast/azuracore",
@ -95,12 +95,12 @@
"source": {
"type": "git",
"url": "https://github.com/AzuraCast/azuracore.git",
"reference": "2eeb22c9a1b331639a997c79b0f945fa9da447de"
"reference": "bdf8e1825b9cc046adcdfc634a1e9f68b4010eb6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/AzuraCast/azuracore/zipball/2eeb22c9a1b331639a997c79b0f945fa9da447de",
"reference": "2eeb22c9a1b331639a997c79b0f945fa9da447de",
"url": "https://api.github.com/repos/AzuraCast/azuracore/zipball/bdf8e1825b9cc046adcdfc634a1e9f68b4010eb6",
"reference": "bdf8e1825b9cc046adcdfc634a1e9f68b4010eb6",
"shasum": ""
},
"require": {
@ -152,7 +152,7 @@
}
],
"description": "A lightweight core application framework.",
"time": "2019-08-19T07:25:16+00:00"
"time": "2019-08-26T19:55:24+00:00"
},
{
"name": "azuracast/azuraforms",
@ -160,12 +160,12 @@
"source": {
"type": "git",
"url": "https://github.com/AzuraCast/azuraforms.git",
"reference": "de50081859159e9ab94b6efd76c505146fe948c9"
"reference": "523b74a5da8c77b19323e3dceffab51b81c66024"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/AzuraCast/azuraforms/zipball/de50081859159e9ab94b6efd76c505146fe948c9",
"reference": "de50081859159e9ab94b6efd76c505146fe948c9",
"url": "https://api.github.com/repos/AzuraCast/azuraforms/zipball/523b74a5da8c77b19323e3dceffab51b81c66024",
"reference": "523b74a5da8c77b19323e3dceffab51b81c66024",
"shasum": ""
},
"require": {
@ -203,7 +203,7 @@
],
"description": "A modern, namespaced, configuration-driven forms engine for PHP.",
"homepage": "https://github.com/AzuraCast/azuraforms",
"time": "2019-07-21T01:17:12+00:00"
"time": "2019-08-20T04:30:13+00:00"
},
{
"name": "azuracast/nowplaying",
@ -211,12 +211,12 @@
"source": {
"type": "git",
"url": "https://github.com/AzuraCast/nowplaying.git",
"reference": "91fd2575b87d91d3e2029b8acc4ea8e2865b4a5f"
"reference": "b7eb7ce3b962c81d1ea1ab985664bd169f5162b9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/AzuraCast/nowplaying/zipball/91fd2575b87d91d3e2029b8acc4ea8e2865b4a5f",
"reference": "91fd2575b87d91d3e2029b8acc4ea8e2865b4a5f",
"url": "https://api.github.com/repos/AzuraCast/nowplaying/zipball/b7eb7ce3b962c81d1ea1ab985664bd169f5162b9",
"reference": "b7eb7ce3b962c81d1ea1ab985664bd169f5162b9",
"shasum": ""
},
"require": {
@ -249,7 +249,7 @@
}
],
"description": "A lightweight PHP adapter for viewing the current now playing data in Icecast and SHOUTcast 1/2. A part of the AzuraCast software suite.",
"time": "2019-07-28T03:00:27+00:00"
"time": "2019-08-20T04:25:08+00:00"
},
{
"name": "bacon/bacon-qr-code",
@ -302,25 +302,30 @@
},
{
"name": "beberlei/assert",
"version": "v2.9.9",
"version": "v3.2.3",
"source": {
"type": "git",
"url": "https://github.com/beberlei/assert.git",
"reference": "124317de301b7c91d5fce34c98bba2c6925bec95"
"reference": "65b8152224aef7d3c197d5db05211d4319711b66"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/beberlei/assert/zipball/124317de301b7c91d5fce34c98bba2c6925bec95",
"reference": "124317de301b7c91d5fce34c98bba2c6925bec95",
"url": "https://api.github.com/repos/beberlei/assert/zipball/65b8152224aef7d3c197d5db05211d4319711b66",
"reference": "65b8152224aef7d3c197d5db05211d4319711b66",
"shasum": ""
},
"require": {
"ext-ctype": "*",
"ext-intl": "*",
"ext-json": "*",
"ext-mbstring": "*",
"php": ">=5.3"
"ext-simplexml": "*",
"php": "^7"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.1.1",
"phpunit/phpunit": "^4.8.35|^5.7"
"friendsofphp/php-cs-fixer": "*",
"phpstan/phpstan-shim": "*",
"phpunit/phpunit": ">=6.0.0 <8"
},
"type": "library",
"autoload": {
@ -338,13 +343,13 @@
"authors": [
{
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de",
"role": "Lead Developer"
"role": "Lead Developer",
"email": "kontakt@beberlei.de"
},
{
"name": "Richard Quadling",
"email": "rquadling@gmail.com",
"role": "Collaborator"
"role": "Collaborator",
"email": "rquadling@gmail.com"
}
],
"description": "Thin assertion library for input validation in business models.",
@ -353,7 +358,7 @@
"assertion",
"validation"
],
"time": "2019-05-28T15:27:37+00:00"
"time": "2019-08-23T17:56:26+00:00"
},
{
"name": "bernard/bernard",
@ -361,16 +366,16 @@
"source": {
"type": "git",
"url": "https://github.com/bernardphp/bernard.git",
"reference": "43d257815e9edc006fec41c74402910280c60136"
"reference": "eab0f25453657aa5e0b5efa01df1e0584a2a24a9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/bernardphp/bernard/zipball/43d257815e9edc006fec41c74402910280c60136",
"reference": "43d257815e9edc006fec41c74402910280c60136",
"url": "https://api.github.com/repos/bernardphp/bernard/zipball/eab0f25453657aa5e0b5efa01df1e0584a2a24a9",
"reference": "eab0f25453657aa5e0b5efa01df1e0584a2a24a9",
"shasum": ""
},
"require": {
"beberlei/assert": "^2.1",
"beberlei/assert": "^2.1 || ^3.0",
"bernard/normalt": "^1.0",
"php": "^5.6 || ^7.0",
"symfony/event-dispatcher": "^3.0 || ^4.0"
@ -426,7 +431,7 @@
"message queue",
"queue"
],
"time": "2019-06-28T11:10:08+00:00"
"time": "2019-08-08T12:41:23+00:00"
},
{
"name": "bernard/normalt",
@ -2570,16 +2575,16 @@
},
{
"name": "league/flysystem",
"version": "1.0.53",
"version": "1.0.55",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
"reference": "08e12b7628f035600634a5e76d95b5eb66cea674"
"reference": "33c91155537c6dc899eacdc54a13ac6303f156e6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/08e12b7628f035600634a5e76d95b5eb66cea674",
"reference": "08e12b7628f035600634a5e76d95b5eb66cea674",
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/33c91155537c6dc899eacdc54a13ac6303f156e6",
"reference": "33c91155537c6dc899eacdc54a13ac6303f156e6",
"shasum": ""
},
"require": {
@ -2650,7 +2655,7 @@
"sftp",
"storage"
],
"time": "2019-06-18T20:09:29+00:00"
"time": "2019-08-24T11:17:19+00:00"
},
{
"name": "league/flysystem-aws-s3-v3",
@ -4763,16 +4768,16 @@
},
{
"name": "sentry/sentry",
"version": "2.1.1",
"version": "2.1.2",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php.git",
"reference": "8e27e6c5fcf6f01fc2e5235dd14cc0b2b347d793"
"reference": "646f6ada8b89a08063e31f54ed6d260bd6879239"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/8e27e6c5fcf6f01fc2e5235dd14cc0b2b347d793",
"reference": "8e27e6c5fcf6f01fc2e5235dd14cc0b2b347d793",
"url": "https://api.github.com/repos/getsentry/sentry-php/zipball/646f6ada8b89a08063e31f54ed6d260bd6879239",
"reference": "646f6ada8b89a08063e31f54ed6d260bd6879239",
"shasum": ""
},
"require": {
@ -4801,12 +4806,12 @@
"phpstan/phpstan": "^0.10.3",
"phpstan/phpstan-phpunit": "^0.10",
"phpunit/phpunit": "^7.0",
"symfony/phpunit-bridge": "^4.1.6"
"symfony/phpunit-bridge": "^4.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
"dev-master": "2.1.x-dev"
}
},
"autoload": {
@ -4838,7 +4843,7 @@
"logging",
"sentry"
],
"time": "2019-06-13T11:27:23+00:00"
"time": "2019-08-22T07:37:30+00:00"
},
{
"name": "slim/http",
@ -4921,12 +4926,12 @@
"source": {
"type": "git",
"url": "https://github.com/slimphp/Slim.git",
"reference": "5077a313dd399d5f66b826f590f9dc1902ae84b0"
"reference": "5c493cb5dfd493baa8c01e6fe684e8be4617fdb9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/slimphp/Slim/zipball/5077a313dd399d5f66b826f590f9dc1902ae84b0",
"reference": "5077a313dd399d5f66b826f590f9dc1902ae84b0",
"url": "https://api.github.com/repos/slimphp/Slim/zipball/5c493cb5dfd493baa8c01e6fe684e8be4617fdb9",
"reference": "5c493cb5dfd493baa8c01e6fe684e8be4617fdb9",
"shasum": ""
},
"require": {
@ -4997,14 +5002,14 @@
}
],
"description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
"homepage": "https://slimframework.com",
"homepage": "https://www.slimframework.com",
"keywords": [
"api",
"framework",
"micro",
"router"
],
"time": "2019-08-19T02:11:24+00:00"
"time": "2019-08-22T15:25:54+00:00"
},
{
"name": "spomky-labs/otphp",
@ -5176,16 +5181,16 @@
},
{
"name": "symfony/console",
"version": "v4.3.3",
"version": "v4.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "8b0ae5742ce9aaa8b0075665862c1ca397d1c1d9"
"reference": "de63799239b3881b8a08f8481b22348f77ed7b36"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/8b0ae5742ce9aaa8b0075665862c1ca397d1c1d9",
"reference": "8b0ae5742ce9aaa8b0075665862c1ca397d1c1d9",
"url": "https://api.github.com/repos/symfony/console/zipball/de63799239b3881b8a08f8481b22348f77ed7b36",
"reference": "de63799239b3881b8a08f8481b22348f77ed7b36",
"shasum": ""
},
"require": {
@ -5247,20 +5252,20 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
"time": "2019-07-24T17:13:59+00:00"
"time": "2019-08-26T08:26:39+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v4.3.3",
"version": "v4.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "212b020949331b6531250584531363844b34a94e"
"reference": "429d0a1451d4c9c4abe1959b2986b88794b9b7d2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/212b020949331b6531250584531363844b34a94e",
"reference": "212b020949331b6531250584531363844b34a94e",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/429d0a1451d4c9c4abe1959b2986b88794b9b7d2",
"reference": "429d0a1451d4c9c4abe1959b2986b88794b9b7d2",
"shasum": ""
},
"require": {
@ -5317,7 +5322,7 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
"time": "2019-06-27T06:42:14+00:00"
"time": "2019-08-26T08:55:16+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@ -5379,16 +5384,16 @@
},
{
"name": "symfony/finder",
"version": "v4.3.3",
"version": "v4.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "9638d41e3729459860bb96f6247ccb61faaa45f2"
"reference": "86c1c929f0a4b24812e1eb109262fc3372c8e9f2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/9638d41e3729459860bb96f6247ccb61faaa45f2",
"reference": "9638d41e3729459860bb96f6247ccb61faaa45f2",
"url": "https://api.github.com/repos/symfony/finder/zipball/86c1c929f0a4b24812e1eb109262fc3372c8e9f2",
"reference": "86c1c929f0a4b24812e1eb109262fc3372c8e9f2",
"shasum": ""
},
"require": {
@ -5424,20 +5429,20 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
"time": "2019-06-28T13:16:30+00:00"
"time": "2019-08-14T12:26:46+00:00"
},
{
"name": "symfony/inflector",
"version": "v4.3.3",
"version": "v4.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/inflector.git",
"reference": "782e3959ea1fc95923624d6173eaf941ce3029b0"
"reference": "b25a8dc15fada858432efa083c1ecd2cef5991a7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/inflector/zipball/782e3959ea1fc95923624d6173eaf941ce3029b0",
"reference": "782e3959ea1fc95923624d6173eaf941ce3029b0",
"url": "https://api.github.com/repos/symfony/inflector/zipball/b25a8dc15fada858432efa083c1ecd2cef5991a7",
"reference": "b25a8dc15fada858432efa083c1ecd2cef5991a7",
"shasum": ""
},
"require": {
@ -5482,20 +5487,20 @@
"symfony",
"words"
],
"time": "2019-07-25T10:54:24+00:00"
"time": "2019-08-06T18:44:23+00:00"
},
{
"name": "symfony/options-resolver",
"version": "v4.3.3",
"version": "v4.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/options-resolver.git",
"reference": "40762ead607c8f792ee4516881369ffa553fee6f"
"reference": "81c2e120522a42f623233968244baebd6b36cb6a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/40762ead607c8f792ee4516881369ffa553fee6f",
"reference": "40762ead607c8f792ee4516881369ffa553fee6f",
"url": "https://api.github.com/repos/symfony/options-resolver/zipball/81c2e120522a42f623233968244baebd6b36cb6a",
"reference": "81c2e120522a42f623233968244baebd6b36cb6a",
"shasum": ""
},
"require": {
@ -5536,7 +5541,7 @@
"configuration",
"options"
],
"time": "2019-06-13T11:01:17+00:00"
"time": "2019-08-08T09:29:19+00:00"
},
{
"name": "symfony/polyfill-ctype",
@ -5823,16 +5828,16 @@
},
{
"name": "symfony/process",
"version": "v4.3.3",
"version": "v4.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c"
"reference": "e89969c00d762349f078db1128506f7f3dcc0d4a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/856d35814cf287480465bb7a6c413bb7f5f5e69c",
"reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c",
"url": "https://api.github.com/repos/symfony/process/zipball/e89969c00d762349f078db1128506f7f3dcc0d4a",
"reference": "e89969c00d762349f078db1128506f7f3dcc0d4a",
"shasum": ""
},
"require": {
@ -5868,20 +5873,20 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
"time": "2019-05-30T16:10:05+00:00"
"time": "2019-08-26T08:26:39+00:00"
},
{
"name": "symfony/property-access",
"version": "v4.3.3",
"version": "v4.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
"reference": "42f3a6ddcb794c303d8fdbc33faf3f09cfefee62"
"reference": "bb0c302375ffeef60c31e72a4539611b7f787565"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/property-access/zipball/42f3a6ddcb794c303d8fdbc33faf3f09cfefee62",
"reference": "42f3a6ddcb794c303d8fdbc33faf3f09cfefee62",
"url": "https://api.github.com/repos/symfony/property-access/zipball/bb0c302375ffeef60c31e72a4539611b7f787565",
"reference": "bb0c302375ffeef60c31e72a4539611b7f787565",
"shasum": ""
},
"require": {
@ -5935,20 +5940,20 @@
"property path",
"reflection"
],
"time": "2019-07-24T14:47:54+00:00"
"time": "2019-08-26T08:26:39+00:00"
},
{
"name": "symfony/serializer",
"version": "v4.3.3",
"version": "v4.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/serializer.git",
"reference": "ff127edf8c015d3a3922b0dd56ffa2c2508a7fda"
"reference": "702900654e0ceed9ca7a9eccffb1d6ec69d7c8b6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/serializer/zipball/ff127edf8c015d3a3922b0dd56ffa2c2508a7fda",
"reference": "ff127edf8c015d3a3922b0dd56ffa2c2508a7fda",
"url": "https://api.github.com/repos/symfony/serializer/zipball/702900654e0ceed9ca7a9eccffb1d6ec69d7c8b6",
"reference": "702900654e0ceed9ca7a9eccffb1d6ec69d7c8b6",
"shasum": ""
},
"require": {
@ -6015,20 +6020,20 @@
],
"description": "Symfony Serializer Component",
"homepage": "https://symfony.com",
"time": "2019-07-23T14:59:17+00:00"
"time": "2019-08-26T08:55:16+00:00"
},
{
"name": "symfony/service-contracts",
"version": "v1.1.5",
"version": "v1.1.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d"
"reference": "ea7263d6b6d5f798b56a45a5b8d686725f2719a3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d",
"reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/ea7263d6b6d5f798b56a45a5b8d686725f2719a3",
"reference": "ea7263d6b6d5f798b56a45a5b8d686725f2719a3",
"shasum": ""
},
"require": {
@ -6073,20 +6078,20 @@
"interoperability",
"standards"
],
"time": "2019-06-13T11:15:36+00:00"
"time": "2019-08-20T14:44:19+00:00"
},
{
"name": "symfony/translation-contracts",
"version": "v1.1.5",
"version": "v1.1.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
"reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c"
"reference": "325b17c24f3ee23cbecfa63ba809c6d89b5fa04a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/cb4b18ad7b92a26e83b65dde940fab78339e6f3c",
"reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/325b17c24f3ee23cbecfa63ba809c6d89b5fa04a",
"reference": "325b17c24f3ee23cbecfa63ba809c6d89b5fa04a",
"shasum": ""
},
"require": {
@ -6130,20 +6135,20 @@
"interoperability",
"standards"
],
"time": "2019-06-13T11:15:36+00:00"
"time": "2019-08-02T12:15:04+00:00"
},
{
"name": "symfony/validator",
"version": "v4.3.3",
"version": "v4.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
"reference": "dbca6327b315d29653f826057ee5034ff234c587"
"reference": "173b483999c2acad8e040633105733318dcc8a83"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/validator/zipball/dbca6327b315d29653f826057ee5034ff234c587",
"reference": "dbca6327b315d29653f826057ee5034ff234c587",
"url": "https://api.github.com/repos/symfony/validator/zipball/173b483999c2acad8e040633105733318dcc8a83",
"reference": "173b483999c2acad8e040633105733318dcc8a83",
"shasum": ""
},
"require": {
@ -6153,6 +6158,7 @@
"symfony/translation-contracts": "^1.1"
},
"conflict": {
"doctrine/lexer": "<1.0.2",
"phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
"symfony/dependency-injection": "<3.4",
"symfony/http-kernel": "<3.4",
@ -6161,9 +6167,9 @@
"symfony/yaml": "<3.4"
},
"require-dev": {
"doctrine/annotations": "~1.0",
"doctrine/annotations": "~1.7",
"doctrine/cache": "~1.0",
"egulias/email-validator": "^1.2.8|~2.0",
"egulias/email-validator": "^2.1.10",
"symfony/cache": "~3.4|~4.0",
"symfony/config": "~3.4|~4.0",
"symfony/dependency-injection": "~3.4|~4.0",
@ -6222,20 +6228,20 @@
],
"description": "Symfony Validator Component",
"homepage": "https://symfony.com",
"time": "2019-07-23T11:21:36+00:00"
"time": "2019-08-26T09:28:48+00:00"
},
{
"name": "symfony/yaml",
"version": "v4.3.3",
"version": "v4.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "34d29c2acd1ad65688f58452fd48a46bd996d5a6"
"reference": "5a0b7c32dc3ec56fd4abae8a4a71b0cf05013686"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/34d29c2acd1ad65688f58452fd48a46bd996d5a6",
"reference": "34d29c2acd1ad65688f58452fd48a46bd996d5a6",
"url": "https://api.github.com/repos/symfony/yaml/zipball/5a0b7c32dc3ec56fd4abae8a4a71b0cf05013686",
"reference": "5a0b7c32dc3ec56fd4abae8a4a71b0cf05013686",
"shasum": ""
},
"require": {
@ -6281,7 +6287,7 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
"time": "2019-07-24T14:47:54+00:00"
"time": "2019-08-20T14:27:59+00:00"
},
{
"name": "wikimedia/composer-merge-plugin",
@ -8603,16 +8609,16 @@
},
{
"name": "phpunit/phpunit",
"version": "7.5.14",
"version": "7.5.15",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "2834789aeb9ac182ad69bfdf9ae91856a59945ff"
"reference": "d79c053d972856b8b941bb233e39dc521a5093f0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2834789aeb9ac182ad69bfdf9ae91856a59945ff",
"reference": "2834789aeb9ac182ad69bfdf9ae91856a59945ff",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d79c053d972856b8b941bb233e39dc521a5093f0",
"reference": "d79c053d972856b8b941bb233e39dc521a5093f0",
"shasum": ""
},
"require": {
@ -8672,8 +8678,8 @@
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
"role": "lead",
"email": "sebastian@phpunit.de"
}
],
"description": "The PHP Unit Testing framework.",
@ -8683,7 +8689,7 @@
"testing",
"xunit"
],
"time": "2019-07-15T06:24:08+00:00"
"time": "2019-08-21T07:05:16+00:00"
},
{
"name": "roave/security-advisories",
@ -9519,16 +9525,16 @@
},
{
"name": "symfony/browser-kit",
"version": "v4.3.3",
"version": "v4.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
"reference": "a29dd02a1f3f81b9a15c7730cc3226718ddb55ca"
"reference": "9e5dddb637b13db82e35695a8603fe6e118cc119"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/a29dd02a1f3f81b9a15c7730cc3226718ddb55ca",
"reference": "a29dd02a1f3f81b9a15c7730cc3226718ddb55ca",
"url": "https://api.github.com/repos/symfony/browser-kit/zipball/9e5dddb637b13db82e35695a8603fe6e118cc119",
"reference": "9e5dddb637b13db82e35695a8603fe6e118cc119",
"shasum": ""
},
"require": {
@ -9574,20 +9580,20 @@
],
"description": "Symfony BrowserKit Component",
"homepage": "https://symfony.com",
"time": "2019-06-11T15:41:59+00:00"
"time": "2019-08-26T08:26:39+00:00"
},
{
"name": "symfony/css-selector",
"version": "v4.3.3",
"version": "v4.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
"reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d"
"reference": "c6e5e2a00db768c92c3ae131532af4e1acc7bd03"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d",
"reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/c6e5e2a00db768c92c3ae131532af4e1acc7bd03",
"reference": "c6e5e2a00db768c92c3ae131532af4e1acc7bd03",
"shasum": ""
},
"require": {
@ -9627,20 +9633,20 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
"time": "2019-01-16T21:53:39+00:00"
"time": "2019-08-20T14:07:54+00:00"
},
{
"name": "symfony/dom-crawler",
"version": "v4.3.3",
"version": "v4.3.4",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
"reference": "291397232a2eefb3347eaab9170409981eaad0e2"
"reference": "cc686552948d627528c0e2e759186dff67c2610e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/291397232a2eefb3347eaab9170409981eaad0e2",
"reference": "291397232a2eefb3347eaab9170409981eaad0e2",
"url": "https://api.github.com/repos/symfony/dom-crawler/zipball/cc686552948d627528c0e2e759186dff67c2610e",
"reference": "cc686552948d627528c0e2e759186dff67c2610e",
"shasum": ""
},
"require": {
@ -9688,7 +9694,7 @@
],
"description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com",
"time": "2019-06-13T11:03:18+00:00"
"time": "2019-08-26T08:26:39+00:00"
},
{
"name": "theseer/tokenizer",
@ -9732,16 +9738,16 @@
},
{
"name": "webmozart/assert",
"version": "1.4.0",
"version": "1.5.0",
"source": {
"type": "git",
"url": "https://github.com/webmozart/assert.git",
"reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
"reference": "88e6d84706d09a236046d686bbea96f07b3a34f4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
"reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
"url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4",
"reference": "88e6d84706d09a236046d686bbea96f07b3a34f4",
"shasum": ""
},
"require": {
@ -9749,8 +9755,7 @@
"symfony/polyfill-ctype": "^1.8"
},
"require-dev": {
"phpunit/phpunit": "^4.6",
"sebastian/version": "^1.0.1"
"phpunit/phpunit": "^4.8.36 || ^7.5.13"
},
"type": "library",
"extra": {
@ -9779,7 +9784,7 @@
"check",
"validate"
],
"time": "2018-12-25T11:19:39+00:00"
"time": "2019-08-24T08:43:50+00:00"
}
],
"aliases": [],

View File

@ -40,6 +40,7 @@ return function (\Azura\EventDispatcher $dispatcher)
new Command\Internal\DjOff,
new Command\Internal\Feedback,
new Command\Internal\FtpAuth,
new Command\Internal\FtpUpload,
// Locales
new Command\LocaleGenerate,

View File

@ -0,0 +1,87 @@
<?php
namespace App\Console\Command\Internal;
use App\Entity;
use App\Message;
use App\MessageQueue;
use App\Radio\Filesystem;
use Azura\Console\Command\CommandAbstract;
use Doctrine\ORM\EntityManager;
use Monolog\Logger;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class FtpUpload extends CommandAbstract
{
/**
* {@inheritdoc}
*/
protected function configure()
{
$this->setName('azuracast:internal:ftp-upload')
->setDescription('Process a file uploaded in PureFTPD')
->addArgument(
'path',
InputArgument::REQUIRED,
'The path of the newly uploaded file.'
);
}
/**
* {@inheritdoc}
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
// PureFTPD sends the "real" path (with symlinks resolved) to us.
$path = $input->getArgument('path');
/** @var Logger $logger */
$logger = $this->get(Logger::class);
$logger->info('FTP file uploaded', ['path' => $path]);
/** @var EntityManager $em */
$em = $this->get(EntityManager::class);
/** @var Entity\Repository\StationRepository $station_repo */
$stations_repo = $em->getRepository(Entity\Station::class);
// Working backwards from the media's path, find the associated station(s) to process.
$stations = [];
$parts = explode('/', dirname($path));
for($i = count($parts); $i >= 1; $i--) {
$search_path = implode('/', array_slice($parts, 0, $i));
$stations = $stations_repo->findBy([
'radio_media_dir' => $search_path,
]);
if (!empty($stations)) {
break;
}
}
/** @var Filesystem $filesystem */
$filesystem = $this->get(Filesystem::class);
/** @var MessageQueue $message_queue */
$message_queue = $this->get(MessageQueue::class);
foreach($stations as $station) {
/** @var Entity\Station $station */
$fs = $filesystem->getForStation($station);
$fs->flushAllCaches();
$relative_path = str_replace($station->getRadioMediaDir().'/', '', $path);
$message = new Message\AddNewMediaMessage;
$message->station_id = $station->getId();
$message->path = $relative_path;
$message_queue->produce($message);
}
return null;
}
}

View File

@ -77,9 +77,11 @@ class Ftp
return $error;
}
// Some FTP clients URL Encode the username, particularly the '@' of the e-mail address.
$username = urldecode($username);
$this->logger->info('FTP Authentication attempt.', [
'username' => $username,
'password' => $password,
]);
$user = $this->user_repo->authenticate($username, $password);