From 5e2bf7c3e4ecbad479f61f68decb286292acd3de Mon Sep 17 00:00:00 2001 From: BlackSheep <blsheepmail@gmail.com> Date: Mon, 29 Jan 2018 09:28:56 +0100 Subject: [PATCH 1/5] Add twitch socialite auth provider --- .env.example | 3 ++ app/Providers/EventServiceProvider.php | 1 + app/Services/SocialAuthService.php | 2 +- composer.json | 3 +- config/services.php | 7 +++ resources/assets/icons/twitch.svg | 59 ++++++++++++++++++++++++++ 6 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 resources/assets/icons/twitch.svg diff --git a/.env.example b/.env.example index ddb32c0bc..9901189b4 100644 --- a/.env.example +++ b/.env.example @@ -49,6 +49,9 @@ GOOGLE_APP_SECRET=false OKTA_BASE_URL=false OKTA_KEY=false OKTA_SECRET=false +TWITCH_KEY=false +TWITCH_SECRET=false +TWITCH_REDIRECT_URI=false # External services such as Gravatar DISABLE_EXTERNAL_SERVICES=false diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 05f9c57c1..5a690069c 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -18,6 +18,7 @@ class EventServiceProvider extends ServiceProvider 'SocialiteProviders\Slack\SlackExtendSocialite@handle', 'SocialiteProviders\Azure\AzureExtendSocialite@handle', 'SocialiteProviders\Okta\OktaExtendSocialite@handle', + 'SocialiteProviders\Twitch\TwitchExtendSocialite@handle', ], ]; diff --git a/app/Services/SocialAuthService.php b/app/Services/SocialAuthService.php index 30f7eed0e..6eb5202ae 100644 --- a/app/Services/SocialAuthService.php +++ b/app/Services/SocialAuthService.php @@ -16,7 +16,7 @@ class SocialAuthService protected $socialite; protected $socialAccount; - protected $validSocialDrivers = ['google', 'github', 'facebook', 'slack', 'twitter', 'azure', 'okta']; + protected $validSocialDrivers = ['google', 'github', 'facebook', 'slack', 'twitter', 'azure', 'okta', 'twitch']; /** * SocialAuthService constructor. diff --git a/composer.json b/composer.json index 2750b7cb3..54eb3f26c 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,8 @@ "barryvdh/laravel-snappy": "^0.4.0", "socialiteproviders/slack": "^3.0", "socialiteproviders/microsoft-azure": "^3.0", - "socialiteproviders/okta": "^1.0" + "socialiteproviders/okta": "^1.0", + "socialiteproviders/twitch": "^3.0" }, "require-dev": { "filp/whoops": "~2.0", diff --git a/config/services.php b/config/services.php index 18649c093..a630e8297 100644 --- a/config/services.php +++ b/config/services.php @@ -92,6 +92,13 @@ return [ 'redirect' => env('APP_URL') . '/login/service/okta/callback', 'base_url' => env('OKTA_BASE_URL'), 'name' => 'Okta', + ], + + 'twitch' => [ + 'client_id' => env('TWITCH_KEY'), + 'client_secret' => env('TWITCH_SECRET'), + 'redirect' => env('TWITCH_REDIRECT_URI'), + 'name' => 'Twitch', ], 'ldap' => [ diff --git a/resources/assets/icons/twitch.svg b/resources/assets/icons/twitch.svg new file mode 100644 index 000000000..0293ed9a1 --- /dev/null +++ b/resources/assets/icons/twitch.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + id="svg2985" + version="1.1" + inkscape:version="0.48.2 r9819" + width="1000" + height="1139.412" + xml:space="preserve" + sodipodi:docname="Twitch logo black.svg"><metadata + id="metadata2991"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs + id="defs2989" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1234" + inkscape:window-height="1038" + id="namedview2987" + showgrid="false" + fit-margin-left="0.5" + fit-margin-bottom="0.5" + fit-margin-top="0.5" + fit-margin-right="0.5" + inkscape:zoom="0.33712566" + inkscape:cx="344.76544" + inkscape:cy="201.71567" + inkscape:window-x="675" + inkscape:window-y="11" + inkscape:window-maximized="0" + inkscape:current-layer="g2993" /><g + id="g2993" + inkscape:groupmode="layer" + inkscape:label="Twitch_IntegrationGuidelines" + transform="matrix(1.25,0,0,-1.25,-779.56837,2089.8162)"><g + id="g2995" + transform="matrix(9.5324427,0,0,9.5324427,1348.9493,1188.2344)"><path + d="m 0,0 -13.652,-13.651 -21.445,0 -11.699,-11.697 0,11.697 -17.548,0 0,56.544 L 0,42.893 0,0 z m -72.146,50.692 -3.899,-15.599 0,-70.19 17.55,0 0,-9.751 9.746,0 9.752,9.751 15.596,0 31.196,31.192 0,54.597 -79.941,0 z" + style="fill:#6441a5;fill-opacity:1;fill-rule:evenodd;stroke:none" + id="path2997" + inkscape:connector-curvature="0" /></g><path + d="m 940.03601,1225.3756 74.34349,0 0,223.0687 -74.34349,0 0,-223.0687 z m 204.43279,0 74.3435,0 0,223.0687 -74.3435,0 0,-223.0687 z" + style="fill:#6441a5;fill-opacity:1;fill-rule:evenodd;stroke:none" + id="path2999" + inkscape:connector-curvature="0" /></g></svg> \ No newline at end of file From 1651c807cbb289fdd19f09ef46bdc7949c21c2d6 Mon Sep 17 00:00:00 2001 From: BlackSheep <blsheepmail@gmail.com> Date: Tue, 30 Jan 2018 09:59:56 +0100 Subject: [PATCH 2/5] Update... --- composer.lock | 187 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 112 insertions(+), 75 deletions(-) diff --git a/composer.lock b/composer.lock index 9db080bab..bf9bc489f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "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": "8ad5cb7acc1115a77404d1be899984ac", + "content-hash": "96d5f23f0652b8093d7939e8c29bdf18", "packages": [ { "name": "aws/aws-sdk-php", - "version": "3.45.3", + "version": "3.52.2", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "d0abb0b1194fa64973b135191f56df991bc5787c" + "reference": "69ba4e07288a532fe7635f7cdd73cffa6509f538" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d0abb0b1194fa64973b135191f56df991bc5787c", - "reference": "d0abb0b1194fa64973b135191f56df991bc5787c", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/69ba4e07288a532fe7635f7cdd73cffa6509f538", + "reference": "69ba4e07288a532fe7635f7cdd73cffa6509f538", "shasum": "" }, "require": { @@ -84,7 +84,7 @@ "s3", "sdk" ], - "time": "2017-12-08T21:36:50+00:00" + "time": "2018-01-26T22:17:57+00:00" }, { "name": "barryvdh/laravel-dompdf", @@ -898,16 +898,16 @@ }, { "name": "knplabs/knp-snappy", - "version": "v1.0.3", + "version": "v1.0.4", "source": { "type": "git", "url": "https://github.com/KnpLabs/snappy.git", - "reference": "68590ef3aa94425b1c0019cc28ce471729f51fcb" + "reference": "144c4ecd1ccaeda936bf832b93079efc490e6850" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/KnpLabs/snappy/zipball/68590ef3aa94425b1c0019cc28ce471729f51fcb", - "reference": "68590ef3aa94425b1c0019cc28ce471729f51fcb", + "url": "https://api.github.com/repos/KnpLabs/snappy/zipball/144c4ecd1ccaeda936bf832b93079efc490e6850", + "reference": "144c4ecd1ccaeda936bf832b93079efc490e6850", "shasum": "" }, "require": { @@ -960,20 +960,20 @@ "thumbnail", "wkhtmltopdf" ], - "time": "2017-12-03T23:18:18+00:00" + "time": "2018-01-22T19:40:51+00:00" }, { "name": "laravel/framework", - "version": "v5.5.24", + "version": "v5.5.32", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "06135405bb1f736dac5e9529ed1541fc446c9c0f" + "reference": "254e4c3e133f5bc8d6068cdf28ea062abc10adf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/06135405bb1f736dac5e9529ed1541fc446c9c0f", - "reference": "06135405bb1f736dac5e9529ed1541fc446c9c0f", + "url": "https://api.github.com/repos/laravel/framework/zipball/254e4c3e133f5bc8d6068cdf28ea062abc10adf2", + "reference": "254e4c3e133f5bc8d6068cdf28ea062abc10adf2", "shasum": "" }, "require": { @@ -1053,6 +1053,7 @@ "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (~6.0).", "laravel/tinker": "Required to use the tinker console command (~1.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", + "league/flysystem-cached-adapter": "Required to use Flysystem caching (~1.0).", "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0).", "nexmo/client": "Required to use the Nexmo transport (~1.0).", "pda/pheanstalk": "Required to use the beanstalk queue driver (~3.0).", @@ -1093,7 +1094,7 @@ "framework", "laravel" ], - "time": "2017-12-07T01:28:21+00:00" + "time": "2018-01-18T13:27:23+00:00" }, { "name": "laravel/socialite", @@ -1159,16 +1160,16 @@ }, { "name": "league/flysystem", - "version": "1.0.41", + "version": "1.0.42", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "f400aa98912c561ba625ea4065031b7a41e5a155" + "reference": "09eabc54e199950041aef258a85847676496fe8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f400aa98912c561ba625ea4065031b7a41e5a155", - "reference": "f400aa98912c561ba625ea4065031b7a41e5a155", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/09eabc54e199950041aef258a85847676496fe8e", + "reference": "09eabc54e199950041aef258a85847676496fe8e", "shasum": "" }, "require": { @@ -1179,12 +1180,13 @@ }, "require-dev": { "ext-fileinfo": "*", - "mockery/mockery": "~0.9", - "phpspec/phpspec": "^2.2", - "phpunit/phpunit": "~4.8" + "phpspec/phpspec": "^3.4", + "phpunit/phpunit": "^5.7" }, "suggest": { "ext-fileinfo": "Required for MimeType", + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", @@ -1238,7 +1240,7 @@ "sftp", "storage" ], - "time": "2017-08-06T17:41:04+00:00" + "time": "2018-01-27T16:03:56+00:00" }, { "name": "league/flysystem-aws-s3-v3", @@ -1951,16 +1953,16 @@ }, { "name": "ramsey/uuid", - "version": "3.7.1", + "version": "3.7.3", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "45cffe822057a09e05f7bd09ec5fb88eeecd2334" + "reference": "44abcdad877d9a46685a3a4d221e3b2c4b87cb76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/45cffe822057a09e05f7bd09ec5fb88eeecd2334", - "reference": "45cffe822057a09e05f7bd09ec5fb88eeecd2334", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/44abcdad877d9a46685a3a4d221e3b2c4b87cb76", + "reference": "44abcdad877d9a46685a3a4d221e3b2c4b87cb76", "shasum": "" }, "require": { @@ -1971,17 +1973,15 @@ "rhumsaa/uuid": "self.version" }, "require-dev": { - "apigen/apigen": "^4.1", - "codeception/aspect-mock": "^1.0 | ^2.0", + "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", + "mockery/mockery": "^0.9.9", "moontoast/math": "^1.1", "php-mock/php-mock-phpunit": "^0.3|^1.1", - "phpunit/phpunit": "^4.7|>=5.0 <5.4", - "satooshi/php-coveralls": "^0.6.1", + "phpunit/phpunit": "^4.7|^5.0", "squizlabs/php_codesniffer": "^2.3" }, "suggest": { @@ -2029,7 +2029,7 @@ "identifier", "uuid" ], - "time": "2017-09-22T20:46:04+00:00" + "time": "2018-01-20T00:28:24+00:00" }, { "name": "sabberworm/php-css-parser", @@ -2077,16 +2077,16 @@ }, { "name": "socialiteproviders/manager", - "version": "v3.3.0", + "version": "v3.3.1", "source": { "type": "git", "url": "https://github.com/SocialiteProviders/Manager.git", - "reference": "ac108bce073135a55dfebf28ceaf1459669348e8" + "reference": "1de3f3d874392da6f1a4c0bf30d843e9cd903ea7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/ac108bce073135a55dfebf28ceaf1459669348e8", - "reference": "ac108bce073135a55dfebf28ceaf1459669348e8", + "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/1de3f3d874392da6f1a4c0bf30d843e9cd903ea7", + "reference": "1de3f3d874392da6f1a4c0bf30d843e9cd903ea7", "shasum": "" }, "require": { @@ -2122,7 +2122,7 @@ } ], "description": "Easily add new or override built-in providers in Laravel Socialite.", - "time": "2017-09-21T07:21:55+00:00" + "time": "2017-11-20T08:42:57+00:00" }, { "name": "socialiteproviders/microsoft-azure", @@ -2235,6 +2235,43 @@ "description": "Slack OAuth2 Provider for Laravel Socialite", "time": "2017-04-10T05:10:48+00:00" }, + { + "name": "socialiteproviders/twitch", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/SocialiteProviders/Twitch.git", + "reference": "a7ad148c0b42d0c607d8a034b6e47faf5fc85e93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/SocialiteProviders/Twitch/zipball/a7ad148c0b42d0c607d8a034b6e47faf5fc85e93", + "reference": "a7ad148c0b42d0c607d8a034b6e47faf5fc85e93", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "socialiteproviders/manager": "~3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "SocialiteProviders\\Twitch\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Faust", + "email": "hello@brianfaust.de" + } + ], + "description": "Twitch OAuth2 Provider for Laravel Socialite", + "time": "2017-01-25T09:48:29+00:00" + }, { "name": "swiftmailer/swiftmailer", "version": "v6.0.2", @@ -3040,29 +3077,29 @@ }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.0", + "version": "2.2.1", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b" + "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b", - "reference": "ab03919dfd85a74ae0372f8baf9f3c7d5c03b04b", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", + "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", "shasum": "" }, "require": { - "php": "^5.5 || ^7", - "symfony/css-selector": "^2.7|~3.0" + "php": "^5.5 || ^7.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0" }, "require-dev": { - "phpunit/phpunit": "~4.8|5.1.*" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.2.x-dev" } }, "autoload": { @@ -3083,7 +3120,7 @@ ], "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "time": "2016-09-20T12:50:39+00:00" + "time": "2017-11-27T11:13:29+00:00" }, { "name": "vlucas/phpdotenv", @@ -3917,16 +3954,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.2.0", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "66465776cfc249844bde6d117abff1d22e06c2da" + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", - "reference": "66465776cfc249844bde6d117abff1d22e06c2da", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", "shasum": "" }, "require": { @@ -3964,7 +4001,7 @@ } ], "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-11-27T17:38:31+00:00" + "time": "2017-11-30T07:14:17+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -4327,16 +4364,16 @@ }, { "name": "phpunit/phpunit", - "version": "6.5.3", + "version": "6.5.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "882e886cc928a0abd3c61282b2a64026237d14a4" + "reference": "83d27937a310f2984fd575686138597147bdc7df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/882e886cc928a0abd3c61282b2a64026237d14a4", - "reference": "882e886cc928a0abd3c61282b2a64026237d14a4", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/83d27937a310f2984fd575686138597147bdc7df", + "reference": "83d27937a310f2984fd575686138597147bdc7df", "shasum": "" }, "require": { @@ -4354,7 +4391,7 @@ "phpunit/php-file-iterator": "^1.4.3", "phpunit/php-text-template": "^1.2.1", "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^5.0.4", + "phpunit/phpunit-mock-objects": "^5.0.5", "sebastian/comparator": "^2.1", "sebastian/diff": "^2.0", "sebastian/environment": "^3.1", @@ -4407,27 +4444,27 @@ "testing", "xunit" ], - "time": "2017-12-06T09:42:03+00:00" + "time": "2017-12-17T06:31:19+00:00" }, { "name": "phpunit/phpunit-mock-objects", - "version": "5.0.4", + "version": "5.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "16b50f4167e5e85e81ca8a3dd105d0a5fd32009a" + "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/16b50f4167e5e85e81ca8a3dd105d0a5fd32009a", - "reference": "16b50f4167e5e85e81ca8a3dd105d0a5fd32009a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/33fd41a76e746b8fa96d00b49a23dadfa8334cdf", + "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.5", "php": "^7.0", "phpunit/php-text-template": "^1.2.1", - "sebastian/exporter": "^3.0" + "sebastian/exporter": "^3.1" }, "conflict": { "phpunit/phpunit": "<6.0" @@ -4466,7 +4503,7 @@ "mock", "xunit" ], - "time": "2017-12-02T05:31:19+00:00" + "time": "2018-01-06T05:45:45+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -4515,16 +4552,16 @@ }, { "name": "sebastian/comparator", - "version": "2.1.0", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1174d9018191e93cb9d719edec01257fc05f8158" + "reference": "11c07feade1d65453e06df3b3b90171d6d982087" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1174d9018191e93cb9d719edec01257fc05f8158", - "reference": "1174d9018191e93cb9d719edec01257fc05f8158", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/11c07feade1d65453e06df3b3b90171d6d982087", + "reference": "11c07feade1d65453e06df3b3b90171d6d982087", "shasum": "" }, "require": { @@ -4575,7 +4612,7 @@ "compare", "equality" ], - "time": "2017-11-03T07:16:52+00:00" + "time": "2018-01-12T06:34:42+00:00" }, { "name": "sebastian/diff", @@ -5232,16 +5269,16 @@ }, { "name": "webmozart/assert", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + "reference": "0df1908962e7a3071564e857d86874dad1ef204a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a", "shasum": "" }, "require": { @@ -5278,7 +5315,7 @@ "check", "validate" ], - "time": "2016-11-23T20:04:58+00:00" + "time": "2018-01-29T19:49:41+00:00" } ], "aliases": [], From f51e0e9eb95c02a7d7d0b6bf90439629ac968a7d Mon Sep 17 00:00:00 2001 From: BlackSheep <moutonnoireu@users.noreply.github.com> Date: Thu, 1 Feb 2018 08:51:35 +0100 Subject: [PATCH 3/5] Update services.php --- config/services.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/services.php b/config/services.php index a630e8297..81f2af360 100644 --- a/config/services.php +++ b/config/services.php @@ -95,11 +95,11 @@ return [ ], 'twitch' => [ - 'client_id' => env('TWITCH_KEY'), - 'client_secret' => env('TWITCH_SECRET'), - 'redirect' => env('TWITCH_REDIRECT_URI'), + 'client_id' => env('TWITCH_APP_ID'), + 'client_secret' => env('TWITCH_APP_SECRET'), + 'redirect' => env('APP_URL') . '/login/service/twitch/callback', 'name' => 'Twitch', - ], + ], 'ldap' => [ 'server' => env('LDAP_SERVER', false), From 6f7cfe7206511953aee0a3d060ebc01241d35b0d Mon Sep 17 00:00:00 2001 From: BlackSheep <moutonnoireu@users.noreply.github.com> Date: Thu, 1 Feb 2018 08:53:08 +0100 Subject: [PATCH 4/5] Update .env.example --- .env.example | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index 9901189b4..d06ef675b 100644 --- a/.env.example +++ b/.env.example @@ -49,9 +49,8 @@ GOOGLE_APP_SECRET=false OKTA_BASE_URL=false OKTA_KEY=false OKTA_SECRET=false -TWITCH_KEY=false -TWITCH_SECRET=false -TWITCH_REDIRECT_URI=false +TWITCH_APP_ID=false +TWITCH_APP_SECRET=false # External services such as Gravatar DISABLE_EXTERNAL_SERVICES=false @@ -70,4 +69,4 @@ MAIL_HOST=localhost MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null -MAIL_ENCRYPTION=null \ No newline at end of file +MAIL_ENCRYPTION=null From addfb9600277f0ce7d9a4159f3b77d9daf4ea36f Mon Sep 17 00:00:00 2001 From: BlackSheep <blsheepmail@gmail.com> Date: Thu, 1 Feb 2018 09:55:37 +0100 Subject: [PATCH 5/5] reduced icon size --- package.json | 2 +- resources/assets/icons/twitch.svg | 90 +++++++++++-------------------- 2 files changed, 32 insertions(+), 60 deletions(-) diff --git a/package.json b/package.json index 23b01cf6e..42e892333 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "babelify": "^7.3.0", "browserify": "^14.3.0", "envify": "^4.0.0", - "gulp": "3.9.1", + "gulp": "^3.9.1", "gulp-autoprefixer": "3.1.1", "gulp-clean-css": "^3.0.4", "gulp-livereload": "^3.8.1", diff --git a/resources/assets/icons/twitch.svg b/resources/assets/icons/twitch.svg index 0293ed9a1..2281f2223 100644 --- a/resources/assets/icons/twitch.svg +++ b/resources/assets/icons/twitch.svg @@ -1,59 +1,31 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<!-- Created with Inkscape (http://www.inkscape.org/) --> - -<svg - xmlns:dc="http://purl.org/dc/elements/1.1/" - xmlns:cc="http://creativecommons.org/ns#" - xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" - xmlns:svg="http://www.w3.org/2000/svg" - xmlns="http://www.w3.org/2000/svg" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - id="svg2985" - version="1.1" - inkscape:version="0.48.2 r9819" - width="1000" - height="1139.412" - xml:space="preserve" - sodipodi:docname="Twitch logo black.svg"><metadata - id="metadata2991"><rdf:RDF><cc:Work - rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type - rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs - id="defs2989" /><sodipodi:namedview - pagecolor="#ffffff" - bordercolor="#666666" - borderopacity="1" - objecttolerance="10" - gridtolerance="10" - guidetolerance="10" - inkscape:pageopacity="0" - inkscape:pageshadow="2" - inkscape:window-width="1234" - inkscape:window-height="1038" - id="namedview2987" - showgrid="false" - fit-margin-left="0.5" - fit-margin-bottom="0.5" - fit-margin-top="0.5" - fit-margin-right="0.5" - inkscape:zoom="0.33712566" - inkscape:cx="344.76544" - inkscape:cy="201.71567" - inkscape:window-x="675" - inkscape:window-y="11" - inkscape:window-maximized="0" - inkscape:current-layer="g2993" /><g - id="g2993" - inkscape:groupmode="layer" - inkscape:label="Twitch_IntegrationGuidelines" - transform="matrix(1.25,0,0,-1.25,-779.56837,2089.8162)"><g - id="g2995" - transform="matrix(9.5324427,0,0,9.5324427,1348.9493,1188.2344)"><path - d="m 0,0 -13.652,-13.651 -21.445,0 -11.699,-11.697 0,11.697 -17.548,0 0,56.544 L 0,42.893 0,0 z m -72.146,50.692 -3.899,-15.599 0,-70.19 17.55,0 0,-9.751 9.746,0 9.752,9.751 15.596,0 31.196,31.192 0,54.597 -79.941,0 z" - style="fill:#6441a5;fill-opacity:1;fill-rule:evenodd;stroke:none" - id="path2997" - inkscape:connector-curvature="0" /></g><path - d="m 940.03601,1225.3756 74.34349,0 0,223.0687 -74.34349,0 0,-223.0687 z m 204.43279,0 74.3435,0 0,223.0687 -74.3435,0 0,-223.0687 z" - style="fill:#6441a5;fill-opacity:1;fill-rule:evenodd;stroke:none" - id="path2999" - inkscape:connector-curvature="0" /></g></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="267" height="267" viewBox="0 0 267 267"> + <metadata><?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> +<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c142 79.160924, 2017/07/13-01:06:39 "> + <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <rdf:Description rdf:about=""/> + </rdf:RDF> +</x:xmpmeta> + + + + + + + + + + + + + + + + + + + + + +<?xpacket end="w"?></metadata> +<image id="Calque_0" data-name="Calque 0" width="267" height="267" xlink:href="data:img/png;base64,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"/> +</svg>