Switch to DeviceDetector library.
This commit is contained in:
parent
58b9781b20
commit
80bf66a337
332
composer.json
332
composer.json
|
@ -1,171 +1,171 @@
|
||||||
{
|
{
|
||||||
"name": "azuracast/azuracast",
|
"name": "azuracast/azuracast",
|
||||||
"description": "The AzuraCast self-hosted web radio station management suite.",
|
"description": "The AzuraCast self-hosted web radio station management suite.",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"type": "project",
|
"type": "project",
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.4",
|
"php": ">=7.4",
|
||||||
"ext-PDO": "*",
|
"ext-PDO": "*",
|
||||||
"ext-fileinfo": "*",
|
"ext-fileinfo": "*",
|
||||||
"ext-gd": "*",
|
"ext-gd": "*",
|
||||||
"ext-iconv": "*",
|
"ext-iconv": "*",
|
||||||
"ext-intl": "*",
|
"ext-intl": "*",
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"ext-mbstring": "*",
|
"ext-mbstring": "*",
|
||||||
"ext-redis": "*",
|
"ext-redis": "*",
|
||||||
"ext-simplexml": "*",
|
"ext-simplexml": "*",
|
||||||
"ext-xml": "*",
|
"ext-xml": "*",
|
||||||
"ext-xmlwriter": "*",
|
"ext-xmlwriter": "*",
|
||||||
"azuracast/azuraforms": "dev-master",
|
"azuracast/azuraforms": "dev-master",
|
||||||
"azuracast/nowplaying": "dev-master",
|
"azuracast/nowplaying": "dev-master",
|
||||||
"bacon/bacon-qr-code": "^2.0",
|
"bacon/bacon-qr-code": "^2.0",
|
||||||
"beberlei/doctrineextensions": "^1.2",
|
"beberlei/doctrineextensions": "^1.2",
|
||||||
"brick/math": "^0.9",
|
"brick/math": "^0.9",
|
||||||
"composer/ca-bundle": "^1.2",
|
"composer/ca-bundle": "^1.2",
|
||||||
"doctrine/annotations": "^1.6",
|
"doctrine/annotations": "^1.6",
|
||||||
"doctrine/data-fixtures": "^1.3",
|
"doctrine/data-fixtures": "^1.3",
|
||||||
"doctrine/dbal": "^2.8",
|
"doctrine/dbal": "^2.8",
|
||||||
"doctrine/migrations": "^3.0",
|
"doctrine/migrations": "^3.0",
|
||||||
"doctrine/orm": "~2.6",
|
"doctrine/orm": "~2.6",
|
||||||
"gettext/gettext": "^4.4",
|
"gettext/gettext": "^4.4",
|
||||||
"guzzlehttp/guzzle": "^7.0",
|
"guzzlehttp/guzzle": "^7.0",
|
||||||
"guzzlehttp/oauth-subscriber": "^0.4.0",
|
"guzzlehttp/oauth-subscriber": "^0.4.0",
|
||||||
"http-interop/http-factory-guzzle": "^1.0",
|
"http-interop/http-factory-guzzle": "^1.0",
|
||||||
"james-heinrich/getid3": "dev-master",
|
"james-heinrich/getid3": "dev-master",
|
||||||
"jhofm/flysystem-iterator": "^2.1",
|
"jhofm/flysystem-iterator": "^2.1",
|
||||||
"laminas/laminas-config": "^3.3",
|
"laminas/laminas-config": "^3.3",
|
||||||
"league/flysystem": "^1.0",
|
"league/flysystem": "^1.0",
|
||||||
"league/flysystem-aws-s3-v3": "^1.0",
|
"league/flysystem-aws-s3-v3": "^1.0",
|
||||||
"league/flysystem-cached-adapter": "^1.0",
|
"league/flysystem-cached-adapter": "^1.0",
|
||||||
"league/mime-type-detection": "^1.5",
|
"league/mime-type-detection": "^1.5",
|
||||||
"league/plates": "^3.1",
|
"league/plates": "^3.1",
|
||||||
"lstrojny/fxmlrpc": "dev-master",
|
"lstrojny/fxmlrpc": "dev-master",
|
||||||
"maxmind-db/reader": "~1.0",
|
"matomo/device-detector": "^4.0",
|
||||||
"mezzio/mezzio-session": "^1.3",
|
"maxmind-db/reader": "~1.0",
|
||||||
"mezzio/mezzio-session-cache": "^1.4",
|
"mezzio/mezzio-session": "^1.3",
|
||||||
"mnapoli/silly-php-di": "^1.2",
|
"mezzio/mezzio-session-cache": "^1.4",
|
||||||
"mobiledetect/mobiledetectlib": "^2.8",
|
"mnapoli/silly-php-di": "^1.2",
|
||||||
"monolog/monolog": "^2",
|
"monolog/monolog": "^2",
|
||||||
"myclabs/deep-copy": "^1.10",
|
"myclabs/deep-copy": "^1.10",
|
||||||
"nesbot/carbon": "^2.36",
|
"nesbot/carbon": "^2.36",
|
||||||
"ocramius/doctrine-batch-utils": "^2.0",
|
"ocramius/doctrine-batch-utils": "^2.0",
|
||||||
"overtrue/phplint": "^2.0",
|
"overtrue/phplint": "^2.0",
|
||||||
"php-di/php-di": "^6.0",
|
"php-di/php-di": "^6.0",
|
||||||
"php-di/slim-bridge": "^3.0",
|
"php-di/slim-bridge": "^3.0",
|
||||||
"psr/http-factory": "^1.0",
|
"psr/http-factory": "^1.0",
|
||||||
"psr/simple-cache": "^1.0",
|
"psr/simple-cache": "^1.0",
|
||||||
"ramsey/uuid": "^4.0",
|
"ramsey/uuid": "^4.0",
|
||||||
"rlanvin/php-ip": "^2.0",
|
"rlanvin/php-ip": "^2.0",
|
||||||
"slim/http": "^1.1",
|
"slim/http": "^1.1",
|
||||||
"slim/slim": "^4.2",
|
"slim/slim": "^4.2",
|
||||||
"spatie/flysystem-dropbox": "^1.2",
|
"spatie/flysystem-dropbox": "^1.2",
|
||||||
"spomky-labs/otphp": "^10.0",
|
"spomky-labs/otphp": "^10.0",
|
||||||
"studio24/rotate": "^1.0",
|
"studio24/rotate": "^1.0",
|
||||||
"supervisorphp/supervisor": "dev-master",
|
"supervisorphp/supervisor": "dev-master",
|
||||||
"symfony/cache": "^5.2",
|
"symfony/cache": "^5.2",
|
||||||
"symfony/console": "^5",
|
"symfony/console": "^5",
|
||||||
"symfony/event-dispatcher": "^5",
|
"symfony/event-dispatcher": "^5",
|
||||||
"symfony/finder": "^5",
|
"symfony/finder": "^5",
|
||||||
"symfony/lock": "^5.1",
|
"symfony/lock": "^5.1",
|
||||||
"symfony/messenger": "^5",
|
"symfony/messenger": "^5",
|
||||||
"symfony/process": "^5",
|
"symfony/process": "^5",
|
||||||
"symfony/property-access": "^5",
|
"symfony/property-access": "^5",
|
||||||
"symfony/redis-messenger": "^5",
|
"symfony/redis-messenger": "^5",
|
||||||
"symfony/serializer": "^5",
|
"symfony/serializer": "^5",
|
||||||
"symfony/validator": "^5",
|
"symfony/validator": "^5",
|
||||||
"voku/portable-utf8": "^5.4",
|
"voku/portable-utf8": "^5.4",
|
||||||
"wikimedia/composer-merge-plugin": "dev-feature/composer-v2",
|
"wikimedia/composer-merge-plugin": "dev-feature/composer-v2",
|
||||||
"zircote/swagger-php": "^3"
|
"zircote/swagger-php": "^3"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"codeception/codeception": "^4.0",
|
"codeception/codeception": "^4.0",
|
||||||
"codeception/module-asserts": "^1.1",
|
"codeception/module-asserts": "^1.1",
|
||||||
"codeception/module-cli": "^1.0",
|
"codeception/module-cli": "^1.0",
|
||||||
"codeception/module-doctrine2": "^1.0",
|
"codeception/module-doctrine2": "^1.0",
|
||||||
"codeception/module-phpbrowser": "^1.0",
|
"codeception/module-phpbrowser": "^1.0",
|
||||||
"codeception/module-rest": "^1.0",
|
"codeception/module-rest": "^1.0",
|
||||||
"filp/whoops": "^2",
|
"filp/whoops": "^2",
|
||||||
"mockery/mockery": "^1.0",
|
"mockery/mockery": "^1.0",
|
||||||
"phpstan/phpstan": "^0.12",
|
"phpstan/phpstan": "^0.12",
|
||||||
"phpstan/phpstan-doctrine": "^0.12",
|
"phpstan/phpstan-doctrine": "^0.12",
|
||||||
"phpunit/php-timer": "^5.0",
|
"phpunit/php-timer": "^5.0",
|
||||||
"phpunit/phpunit": "^9.2",
|
"phpunit/phpunit": "^9.2",
|
||||||
"roave/security-advisories": "dev-master",
|
"roave/security-advisories": "dev-master",
|
||||||
"slevomat/coding-standard": "^6.4",
|
"slevomat/coding-standard": "^6.4",
|
||||||
"softcreatr/jsonpath": "^0.7.2",
|
"softcreatr/jsonpath": "^0.7.2",
|
||||||
"squizlabs/php_codesniffer": "^3.5",
|
"squizlabs/php_codesniffer": "^3.5",
|
||||||
"symfony/var-dumper": "^5.1"
|
"symfony/var-dumper": "^5.1"
|
||||||
},
|
},
|
||||||
"replace": {
|
"replace": {
|
||||||
"symfony/polyfill-php71": "1.99",
|
"symfony/polyfill-php71": "1.99",
|
||||||
"symfony/polyfill-php72": "1.99",
|
"symfony/polyfill-php72": "1.99",
|
||||||
"symfony/polyfill-php73": "1.99",
|
"symfony/polyfill-php73": "1.99",
|
||||||
"symfony/polyfill-php74": "1.99",
|
"symfony/polyfill-php74": "1.99",
|
||||||
"symfony/polyfill-iconv": "1.99",
|
"symfony/polyfill-iconv": "1.99",
|
||||||
"symfony/polyfill-intl-grapheme": "1.99",
|
"symfony/polyfill-intl-grapheme": "1.99",
|
||||||
"symfony/polyfill-intl-normalizer": "1.99",
|
"symfony/polyfill-intl-normalizer": "1.99",
|
||||||
"symfony/polyfill-mbstring": "1.99"
|
"symfony/polyfill-mbstring": "1.99"
|
||||||
},
|
},
|
||||||
"repositories": [
|
"repositories": [
|
||||||
{
|
{
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/mcaskill/composer-merge-plugin.git"
|
"url": "https://github.com/mcaskill/composer-merge-plugin.git"
|
||||||
}
|
}
|
||||||
],
|
|
||||||
"scripts": {
|
|
||||||
"cleanup-and-test": [
|
|
||||||
"@phpcbf",
|
|
||||||
"@dev-test"
|
|
||||||
],
|
],
|
||||||
"dev-test": [
|
"scripts": {
|
||||||
"@phplint",
|
"cleanup-and-test": [
|
||||||
"@phpstan",
|
"@phpcbf",
|
||||||
"@phpcs",
|
"@dev-test"
|
||||||
"@codeception-no-coverage"
|
],
|
||||||
|
"dev-test": [
|
||||||
|
"@phplint",
|
||||||
|
"@phpstan",
|
||||||
|
"@phpcs",
|
||||||
|
"@codeception-no-coverage"
|
||||||
|
],
|
||||||
|
"phplint": "phplint",
|
||||||
|
"phpstan": "phpstan analyze",
|
||||||
|
"phpcs": "phpcs",
|
||||||
|
"phpcbf": "phpcbf",
|
||||||
|
"codeception": "codecept run --no-interaction --coverage --coverage-xml --fail-fast",
|
||||||
|
"codeception-no-coverage": "codecept run --no-interaction",
|
||||||
|
"ci-import-locales": [
|
||||||
|
"bin/console locale:import"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Buster Neece",
|
||||||
|
"email": "buster@busterneece.com"
|
||||||
|
}
|
||||||
],
|
],
|
||||||
"phplint": "phplint",
|
"autoload": {
|
||||||
"phpstan": "phpstan analyze",
|
"psr-4": {
|
||||||
"phpcs": "phpcs",
|
"App\\": "src"
|
||||||
"phpcbf": "phpcbf",
|
}
|
||||||
"codeception": "codecept run --no-interaction --coverage --coverage-xml --fail-fast",
|
},
|
||||||
"codeception-no-coverage": "codecept run --no-interaction",
|
"bin": [
|
||||||
"ci-import-locales": [
|
"bin/console"
|
||||||
"bin/console locale:import"
|
],
|
||||||
]
|
"config": {
|
||||||
},
|
"preferred-install": "dist",
|
||||||
"authors": [
|
"discard-changes": true,
|
||||||
{
|
"sort-packages": true
|
||||||
"name": "Buster Neece",
|
},
|
||||||
"email": "buster@busterneece.com"
|
"prefer-stable": true,
|
||||||
|
"minimum-stability": "dev",
|
||||||
|
"extra": {
|
||||||
|
"merge-plugin": {
|
||||||
|
"include": [
|
||||||
|
"plugins/*/composer.json"
|
||||||
|
],
|
||||||
|
"recurse": true,
|
||||||
|
"replace": true,
|
||||||
|
"ignore-duplicates": false,
|
||||||
|
"merge-dev": true,
|
||||||
|
"merge-extra": false,
|
||||||
|
"merge-extra-deep": false,
|
||||||
|
"merge-scripts": false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"App\\": "src"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"bin": [
|
|
||||||
"bin/console"
|
|
||||||
],
|
|
||||||
"config": {
|
|
||||||
"preferred-install": "dist",
|
|
||||||
"discard-changes": true,
|
|
||||||
"sort-packages": true
|
|
||||||
},
|
|
||||||
"prefer-stable": true,
|
|
||||||
"minimum-stability": "dev",
|
|
||||||
"extra": {
|
|
||||||
"merge-plugin": {
|
|
||||||
"include": [
|
|
||||||
"plugins/*/composer.json"
|
|
||||||
],
|
|
||||||
"recurse": true,
|
|
||||||
"replace": true,
|
|
||||||
"ignore-duplicates": false,
|
|
||||||
"merge-dev": true,
|
|
||||||
"merge-extra": false,
|
|
||||||
"merge-extra-deep": false,
|
|
||||||
"merge-scripts": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,20 +4,20 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "e308b78d2f128f2a11789a205aefae53",
|
"content-hash": "152d1c444de811053c2d92c6b87881ab",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "aws/aws-sdk-php",
|
"name": "aws/aws-sdk-php",
|
||||||
"version": "3.168.3",
|
"version": "3.171.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/aws/aws-sdk-php.git",
|
"url": "https://github.com/aws/aws-sdk-php.git",
|
||||||
"reference": "49ef1f905388c8185012c9651b80941b8f2a218d"
|
"reference": "01407effc918634048346d8bd6513b2db0d07ad8"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/49ef1f905388c8185012c9651b80941b8f2a218d",
|
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/01407effc918634048346d8bd6513b2db0d07ad8",
|
||||||
"reference": "49ef1f905388c8185012c9651b80941b8f2a218d",
|
"reference": "01407effc918634048346d8bd6513b2db0d07ad8",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -92,9 +92,9 @@
|
||||||
"support": {
|
"support": {
|
||||||
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
|
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
|
||||||
"issues": "https://github.com/aws/aws-sdk-php/issues",
|
"issues": "https://github.com/aws/aws-sdk-php/issues",
|
||||||
"source": "https://github.com/aws/aws-sdk-php/tree/3.168.3"
|
"source": "https://github.com/aws/aws-sdk-php/tree/3.171.1"
|
||||||
},
|
},
|
||||||
"time": "2020-12-11T19:12:18+00:00"
|
"time": "2020-12-17T19:16:51+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "azuracast/azuraforms",
|
"name": "azuracast/azuraforms",
|
||||||
|
@ -2377,12 +2377,12 @@
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/JamesHeinrich/getID3.git",
|
"url": "https://github.com/JamesHeinrich/getID3.git",
|
||||||
"reference": "475a5291509471d6b087d62b139c60be6fbdd5d1"
|
"reference": "f199994d797754cac398c35240732ba235f5c2fa"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/JamesHeinrich/getID3/zipball/475a5291509471d6b087d62b139c60be6fbdd5d1",
|
"url": "https://api.github.com/repos/JamesHeinrich/getID3/zipball/f199994d797754cac398c35240732ba235f5c2fa",
|
||||||
"reference": "475a5291509471d6b087d62b139c60be6fbdd5d1",
|
"reference": "f199994d797754cac398c35240732ba235f5c2fa",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -2437,7 +2437,7 @@
|
||||||
"issues": "https://github.com/JamesHeinrich/getID3/issues",
|
"issues": "https://github.com/JamesHeinrich/getID3/issues",
|
||||||
"source": "https://github.com/JamesHeinrich/getID3/tree/master"
|
"source": "https://github.com/JamesHeinrich/getID3/tree/master"
|
||||||
},
|
},
|
||||||
"time": "2020-12-09T16:21:59+00:00"
|
"time": "2020-12-15T15:18:21+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "jhofm/flysystem-iterator",
|
"name": "jhofm/flysystem-iterator",
|
||||||
|
@ -3212,6 +3212,75 @@
|
||||||
},
|
},
|
||||||
"time": "2020-11-23T14:42:43+00:00"
|
"time": "2020-11-23T14:42:43+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "matomo/device-detector",
|
||||||
|
"version": "4.0.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/matomo-org/device-detector.git",
|
||||||
|
"reference": "20572bbf8607cfc2f91a11fc75e9a3c6592bdc7a"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/matomo-org/device-detector/zipball/20572bbf8607cfc2f91a11fc75e9a3c6592bdc7a",
|
||||||
|
"reference": "20572bbf8607cfc2f91a11fc75e9a3c6592bdc7a",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"mustangostang/spyc": "*",
|
||||||
|
"php": ">=7.2"
|
||||||
|
},
|
||||||
|
"replace": {
|
||||||
|
"piwik/device-detector": "self.version"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"matthiasmullie/scrapbook": "@stable",
|
||||||
|
"mayflower/mo4-coding-standard": "dev-master#275cb9d",
|
||||||
|
"phpstan/phpstan": "^0.12.52",
|
||||||
|
"phpunit/phpunit": "^8.5.8",
|
||||||
|
"psr/cache": "^1.0.1",
|
||||||
|
"psr/simple-cache": "^1.0.1",
|
||||||
|
"symfony/yaml": "^5.1.7"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"doctrine/cache": "Can directly be used for caching purpose",
|
||||||
|
"ext-yaml": "Necessary for using the Pecl YAML parser"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"DeviceDetector\\": ""
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"Tests/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"LGPL-3.0-or-later"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "The Matomo Team",
|
||||||
|
"email": "hello@matomo.org",
|
||||||
|
"homepage": "https://matomo.org/team/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "The Universal Device Detection library, that parses User Agents and detects devices (desktop, tablet, mobile, tv, cars, console, etc.), clients (browsers, media players, mobile apps, feed readers, libraries, etc), operating systems, devices, brands and models.",
|
||||||
|
"homepage": "https://matomo.org",
|
||||||
|
"keywords": [
|
||||||
|
"devicedetection",
|
||||||
|
"parser",
|
||||||
|
"useragent"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"forum": "http://forum.matomo.org/",
|
||||||
|
"issues": "https://github.com/matomo-org/device-detector/issues",
|
||||||
|
"source": "https://github.com/matomo-org/piwik",
|
||||||
|
"wiki": "https://dev.matomo.org/"
|
||||||
|
},
|
||||||
|
"time": "2020-12-07T09:40:38+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "maxmind-db/reader",
|
"name": "maxmind-db/reader",
|
||||||
"version": "v1.8.0",
|
"version": "v1.8.0",
|
||||||
|
@ -3515,62 +3584,6 @@
|
||||||
},
|
},
|
||||||
"time": "2018-04-05T08:53:27+00:00"
|
"time": "2018-04-05T08:53:27+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "mobiledetect/mobiledetectlib",
|
|
||||||
"version": "2.8.34",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/serbanghita/Mobile-Detect.git",
|
|
||||||
"reference": "6f8113f57a508494ca36acbcfa2dc2d923c7ed5b"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/6f8113f57a508494ca36acbcfa2dc2d923c7ed5b",
|
|
||||||
"reference": "6f8113f57a508494ca36acbcfa2dc2d923c7ed5b",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.0.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"phpunit/phpunit": "~4.8.35||~5.7"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"autoload": {
|
|
||||||
"classmap": [
|
|
||||||
"Mobile_Detect.php"
|
|
||||||
],
|
|
||||||
"psr-0": {
|
|
||||||
"Detection": "namespaced/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Serban Ghita",
|
|
||||||
"email": "serbanghita@gmail.com",
|
|
||||||
"homepage": "http://mobiledetect.net",
|
|
||||||
"role": "Developer"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.",
|
|
||||||
"homepage": "https://github.com/serbanghita/Mobile-Detect",
|
|
||||||
"keywords": [
|
|
||||||
"detect mobile devices",
|
|
||||||
"mobile",
|
|
||||||
"mobile detect",
|
|
||||||
"mobile detector",
|
|
||||||
"php mobile detect"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/serbanghita/Mobile-Detect/issues",
|
|
||||||
"source": "https://github.com/serbanghita/Mobile-Detect/tree/2.8.34"
|
|
||||||
},
|
|
||||||
"time": "2019-09-18T18:44:20+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "monolog/monolog",
|
"name": "monolog/monolog",
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
|
@ -3728,6 +3741,56 @@
|
||||||
},
|
},
|
||||||
"time": "2020-07-31T21:01:56+00:00"
|
"time": "2020-07-31T21:01:56+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "mustangostang/spyc",
|
||||||
|
"version": "0.6.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git@github.com:mustangostang/spyc.git",
|
||||||
|
"reference": "4627c838b16550b666d15aeae1e5289dd5b77da0"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/mustangostang/spyc/zipball/4627c838b16550b666d15aeae1e5289dd5b77da0",
|
||||||
|
"reference": "4627c838b16550b666d15aeae1e5289dd5b77da0",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.1"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "4.3.*@dev"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "0.5.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"Spyc.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "mustangostang",
|
||||||
|
"email": "vlad.andersen@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A simple YAML loader/dumper class for PHP",
|
||||||
|
"homepage": "https://github.com/mustangostang/spyc/",
|
||||||
|
"keywords": [
|
||||||
|
"spyc",
|
||||||
|
"yaml",
|
||||||
|
"yml"
|
||||||
|
],
|
||||||
|
"time": "2019-09-10T13:16:29+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "myclabs/deep-copy",
|
"name": "myclabs/deep-copy",
|
||||||
"version": "1.10.2",
|
"version": "1.10.2",
|
||||||
|
@ -9866,16 +9929,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpstan/phpstan",
|
"name": "phpstan/phpstan",
|
||||||
"version": "0.12.62",
|
"version": "0.12.63",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpstan/phpstan.git",
|
"url": "https://github.com/phpstan/phpstan.git",
|
||||||
"reference": "632393159335bbbdd7ca07d19b3ad50d76aa7fd8"
|
"reference": "c97ec4754bd53099a06c24847bd2870b99966b6a"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/632393159335bbbdd7ca07d19b3ad50d76aa7fd8",
|
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/c97ec4754bd53099a06c24847bd2870b99966b6a",
|
||||||
"reference": "632393159335bbbdd7ca07d19b3ad50d76aa7fd8",
|
"reference": "c97ec4754bd53099a06c24847bd2870b99966b6a",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -9906,7 +9969,7 @@
|
||||||
"description": "PHPStan - PHP Static Analysis Tool",
|
"description": "PHPStan - PHP Static Analysis Tool",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/phpstan/phpstan/issues",
|
"issues": "https://github.com/phpstan/phpstan/issues",
|
||||||
"source": "https://github.com/phpstan/phpstan/tree/0.12.62"
|
"source": "https://github.com/phpstan/phpstan/tree/0.12.63"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -9922,7 +9985,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2020-12-13T13:59:38+00:00"
|
"time": "2020-12-15T16:37:16+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpstan/phpstan-doctrine",
|
"name": "phpstan/phpstan-doctrine",
|
||||||
|
|
|
@ -5,6 +5,7 @@ namespace App\Controller\Api\Stations;
|
||||||
use App\Entity;
|
use App\Entity;
|
||||||
use App\Http\Response;
|
use App\Http\Response;
|
||||||
use App\Http\ServerRequest;
|
use App\Http\ServerRequest;
|
||||||
|
use App\Service\DeviceDetector;
|
||||||
use App\Service\IpGeolocation;
|
use App\Service\IpGeolocation;
|
||||||
use App\Utilities\Csv;
|
use App\Utilities\Csv;
|
||||||
use Carbon\CarbonImmutable;
|
use Carbon\CarbonImmutable;
|
||||||
|
@ -19,10 +20,13 @@ class ListenersController
|
||||||
|
|
||||||
protected IpGeolocation $geoLite;
|
protected IpGeolocation $geoLite;
|
||||||
|
|
||||||
public function __construct(EntityManagerInterface $em, IpGeolocation $geoLite)
|
protected DeviceDetector $deviceDetector;
|
||||||
|
|
||||||
|
public function __construct(EntityManagerInterface $em, IpGeolocation $geoLite, DeviceDetector $deviceDetector)
|
||||||
{
|
{
|
||||||
$this->em = $em;
|
$this->em = $em;
|
||||||
$this->geoLite = $geoLite;
|
$this->geoLite = $geoLite;
|
||||||
|
$this->deviceDetector = $deviceDetector;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -127,7 +131,6 @@ class ListenersController
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$detect = new Mobile_Detect();
|
|
||||||
$locale = $request->getAttribute('locale');
|
$locale = $request->getAttribute('locale');
|
||||||
|
|
||||||
$format = $params['format'] ?? 'json';
|
$format = $params['format'] ?? 'json';
|
||||||
|
@ -153,7 +156,7 @@ class ListenersController
|
||||||
(string)$listener['listener_ip'],
|
(string)$listener['listener_ip'],
|
||||||
Entity\Listener::getListenerSeconds($listener['intervals']),
|
Entity\Listener::getListenerSeconds($listener['intervals']),
|
||||||
(string)$listener['listener_user_agent'],
|
(string)$listener['listener_user_agent'],
|
||||||
$detect->isMobile($listener['listener_user_agent']) ? 'true' : 'false',
|
$this->isMobile($listener['listener_user_agent']) ? 'true' : 'false',
|
||||||
];
|
];
|
||||||
|
|
||||||
if ('success' === $location['status']) {
|
if ('success' === $location['status']) {
|
||||||
|
@ -182,7 +185,7 @@ class ListenersController
|
||||||
$api = new Entity\Api\Listener();
|
$api = new Entity\Api\Listener();
|
||||||
$api->ip = (string)$listener['listener_ip'];
|
$api->ip = (string)$listener['listener_ip'];
|
||||||
$api->user_agent = (string)$listener['listener_user_agent'];
|
$api->user_agent = (string)$listener['listener_user_agent'];
|
||||||
$api->is_mobile = $detect->isMobile($listener['listener_user_agent']);
|
$api->is_mobile = $this->isMobile($listener['listener_user_agent']);
|
||||||
$api->connected_on = (int)$listener['timestamp_start'];
|
$api->connected_on = (int)$listener['timestamp_start'];
|
||||||
$api->connected_time = Entity\Listener::getListenerSeconds($listener['intervals']);
|
$api->connected_time = Entity\Listener::getListenerSeconds($listener['intervals']);
|
||||||
$api->location = $this->geoLite->getLocationInfo($listener['listener_ip'], $locale);
|
$api->location = $this->geoLite->getLocationInfo($listener['listener_ip'], $locale);
|
||||||
|
@ -192,4 +195,10 @@ class ListenersController
|
||||||
|
|
||||||
return $response->withJson($listeners);
|
return $response->withJson($listeners);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function isMobile(string $userAgent): bool
|
||||||
|
{
|
||||||
|
$dd = $this->deviceDetector->parse($userAgent);
|
||||||
|
return $dd->isMobile();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ use App\Entity;
|
||||||
use App\Environment;
|
use App\Environment;
|
||||||
use App\Exception;
|
use App\Exception;
|
||||||
use App\Radio\AutoDJ;
|
use App\Radio\AutoDJ;
|
||||||
|
use App\Service\DeviceDetector;
|
||||||
use Carbon\CarbonImmutable;
|
use Carbon\CarbonImmutable;
|
||||||
use Carbon\CarbonInterface;
|
use Carbon\CarbonInterface;
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
|
@ -17,16 +18,20 @@ class StationRequestRepository extends Repository
|
||||||
{
|
{
|
||||||
protected StationMediaRepository $mediaRepo;
|
protected StationMediaRepository $mediaRepo;
|
||||||
|
|
||||||
|
protected DeviceDetector $deviceDetector;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
EntityManagerInterface $em,
|
EntityManagerInterface $em,
|
||||||
Serializer $serializer,
|
Serializer $serializer,
|
||||||
Environment $environment,
|
Environment $environment,
|
||||||
LoggerInterface $logger,
|
LoggerInterface $logger,
|
||||||
StationMediaRepository $mediaRepo
|
StationMediaRepository $mediaRepo,
|
||||||
|
DeviceDetector $deviceDetector
|
||||||
) {
|
) {
|
||||||
parent::__construct($em, $serializer, $environment, $logger);
|
parent::__construct($em, $serializer, $environment, $logger);
|
||||||
|
|
||||||
$this->mediaRepo = $mediaRepo;
|
$this->mediaRepo = $mediaRepo;
|
||||||
|
$this->deviceDetector = $deviceDetector;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function submit(
|
public function submit(
|
||||||
|
@ -37,7 +42,9 @@ class StationRequestRepository extends Repository
|
||||||
string $userAgent
|
string $userAgent
|
||||||
): int {
|
): int {
|
||||||
// Forbid web crawlers from using this feature.
|
// Forbid web crawlers from using this feature.
|
||||||
if ($this->isCrawler($userAgent)) {
|
$dd = $this->deviceDetector->parse($userAgent);
|
||||||
|
|
||||||
|
if ($dd->isBot()) {
|
||||||
throw new Exception(__('Search engine crawlers are not permitted to use this feature.'));
|
throw new Exception(__('Search engine crawlers are not permitted to use this feature.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,26 +107,6 @@ class StationRequestRepository extends Repository
|
||||||
return $record->getId();
|
return $record->getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function isCrawler(string $userAgent): bool
|
|
||||||
{
|
|
||||||
$userAgent = strtolower($userAgent);
|
|
||||||
|
|
||||||
// phpcs:disable Generic.Files.LineLength
|
|
||||||
$crawlers_agents = strtolower(
|
|
||||||
'Bloglines subscriber|Dumbot|Sosoimagespider|QihooBot|FAST-WebCrawler|Superdownloads Spiderman|LinkWalker|msnbot|ASPSeek|WebAlta Crawler|Lycos|FeedFetcher-Google|Yahoo|YoudaoBot|AdsBot-Google|Googlebot|Scooter|Gigabot|Charlotte|eStyle|AcioRobot|GeonaBot|msnbot-media|Baidu|CocoCrawler|Google|Charlotte t|Yahoo! Slurp China|Sogou web spider|YodaoBot|MSRBOT|AbachoBOT|Sogou head spider|AltaVista|IDBot|Sosospider|Yahoo! Slurp|Java VM|DotBot|LiteFinder|Yeti|Rambler|Scrubby|Baiduspider|accoona'
|
|
||||||
);
|
|
||||||
// phpcs:enable
|
|
||||||
$crawlers = explode('|', $crawlers_agents);
|
|
||||||
|
|
||||||
foreach ($crawlers as $crawler) {
|
|
||||||
if (strpos($userAgent, trim($crawler)) !== false) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the song is already enqueued as a request.
|
* Check if the song is already enqueued as a request.
|
||||||
*
|
*
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Service;
|
||||||
|
|
||||||
|
use DeviceDetector\Cache\CacheInterface;
|
||||||
|
use DeviceDetector\Cache\PSR6Bridge;
|
||||||
|
use Psr\Cache\CacheItemPoolInterface;
|
||||||
|
use Symfony\Component\Cache\Adapter\ProxyAdapter;
|
||||||
|
|
||||||
|
class DeviceDetector
|
||||||
|
{
|
||||||
|
protected CacheInterface $cache;
|
||||||
|
|
||||||
|
public function __construct(CacheItemPoolInterface $cache)
|
||||||
|
{
|
||||||
|
$wrappedCache = new ProxyAdapter($cache, 'device.');
|
||||||
|
$this->cache = new PSR6Bridge($wrappedCache);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function parse(string $userAgent): \DeviceDetector\DeviceDetector
|
||||||
|
{
|
||||||
|
$dd = new \DeviceDetector\DeviceDetector($userAgent);
|
||||||
|
$dd->setCache($this->cache);
|
||||||
|
$dd->parse();
|
||||||
|
|
||||||
|
return $dd;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue