From 9ac101504256ee1d7f7d5d90ad531a11a856ced5 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Tue, 8 Mar 2022 21:45:05 -0700 Subject: [PATCH] Add LDAP support --- composer.json | 5 +- composer.lock | 686 ++++++++++++++---- config/auth.php | 16 +- config/ldap.php | 73 ++ ...042023_add_ldap_columns_to_users_table.php | 29 + 5 files changed, 653 insertions(+), 156 deletions(-) create mode 100644 config/ldap.php create mode 100644 database/migrations/2022_03_09_042023_add_ldap_columns_to_users_table.php diff --git a/composer.json b/composer.json index 3ac5bf2ff..37ea44ced 100644 --- a/composer.json +++ b/composer.json @@ -13,8 +13,10 @@ "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", + "bacon/bacon-qr-code": "^2.0.3", "brick/math": "^0.8", "buzz/laravel-h-captcha": "1.0.2", + "directorytree/ldaprecord-laravel": "^2.5", "doctrine/dbal": "^2.7", "fideloper/proxy": "^4.0", "fruitcake/laravel-cors": "^2.0", @@ -31,11 +33,10 @@ "league/iso3166": "^2.1|^4.0", "pbmedia/laravel-ffmpeg": "^7.0", "phpseclib/phpseclib": "~2.0", - "bacon/bacon-qr-code": "^2.0.3", "pixelfed/fractal": "^0.18.0", - "pragmarx/google2fa": "^8.0", "pixelfed/laravel-snowflake": "^2.0", "pixelfed/zttp": "^0.4", + "pragmarx/google2fa": "^8.0", "predis/predis": "^1.1", "spatie/laravel-backup": "^6.0.0", "spatie/laravel-image-optimizer": "^1.1", diff --git a/composer.lock b/composer.lock index 22a4c8e51..8ed63f719 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "442419b4602f53dcc519f7cc438e0680", + "content-hash": "946f8335440aef533250756003527450", "packages": [ { "name": "alchemy/binary-driver", @@ -180,16 +180,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.208.5", + "version": "3.208.7", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "58fa9d8b522b0afa260299179ff950c783ff0ee1" + "reference": "41a800dd7cf5c4ac0ef9bf8db01e838ab6a3698c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/58fa9d8b522b0afa260299179ff950c783ff0ee1", - "reference": "58fa9d8b522b0afa260299179ff950c783ff0ee1", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/41a800dd7cf5c4ac0ef9bf8db01e838ab6a3698c", + "reference": "41a800dd7cf5c4ac0ef9bf8db01e838ab6a3698c", "shasum": "" }, "require": { @@ -265,9 +265,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.208.5" + "source": "https://github.com/aws/aws-sdk-php/tree/3.208.7" }, - "time": "2021-12-13T20:17:56+00:00" + "time": "2021-12-21T19:16:39+00:00" }, { "name": "bacon/bacon-qr-code", @@ -635,17 +635,154 @@ "time": "2021-08-13T13:06:58+00:00" }, { - "name": "doctrine/cache", - "version": "1.12.1", + "name": "directorytree/ldaprecord", + "version": "v2.11.0", "source": { "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "4cf401d14df219fa6f38b671f5493449151c9ad8" + "url": "https://github.com/DirectoryTree/LdapRecord.git", + "reference": "1ac0c94fa819c0de3176d886ce7cbf6f1cbc0252" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/4cf401d14df219fa6f38b671f5493449151c9ad8", - "reference": "4cf401d14df219fa6f38b671f5493449151c9ad8", + "url": "https://api.github.com/repos/DirectoryTree/LdapRecord/zipball/1ac0c94fa819c0de3176d886ce7cbf6f1cbc0252", + "reference": "1ac0c94fa819c0de3176d886ce7cbf6f1cbc0252", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-ldap": "*", + "illuminate/contracts": "^5.0|^6.0|^7.0|^8.0|^9.0", + "nesbot/carbon": "^1.0|^2.0", + "php": ">=7.3", + "psr/log": "*", + "psr/simple-cache": "^1.0|^2.0", + "tightenco/collect": "^5.6|^6.0|^7.0|^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^9.0", + "spatie/ray": "^1.24" + }, + "type": "library", + "autoload": { + "psr-4": { + "LdapRecord\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Steve Bauman", + "email": "steven_bauman@outlook.com", + "role": "Developer" + } + ], + "description": "A fully-featured LDAP ORM.", + "homepage": "https://www.ldaprecord.com", + "keywords": [ + "active directory", + "ad", + "adLDAP", + "adldap2", + "directory", + "ldap", + "ldaprecord", + "orm", + "windows" + ], + "support": { + "docs": "https://ldaprecord.com", + "email": "steven_bauman@outlook.com", + "issues": "https://github.com/DirectoryTree/LdapRecord/issues", + "source": "https://github.com/DirectoryTree/LdapRecord" + }, + "funding": [ + { + "url": "https://github.com/stevebauman", + "type": "github" + } + ], + "time": "2022-03-08T14:16:44+00:00" + }, + { + "name": "directorytree/ldaprecord-laravel", + "version": "v2.5.4", + "source": { + "type": "git", + "url": "https://github.com/DirectoryTree/LdapRecord-Laravel.git", + "reference": "6283cac3ee5df4817eafdd1f145f72c6861b3a76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/DirectoryTree/LdapRecord-Laravel/zipball/6283cac3ee5df4817eafdd1f145f72c6861b3a76", + "reference": "6283cac3ee5df4817eafdd1f145f72c6861b3a76", + "shasum": "" + }, + "require": { + "directorytree/ldaprecord": "^2.4.4", + "ext-ldap": "*", + "illuminate/support": "^5.6|^6.0|^7.0|^8.0|^9.0", + "php": ">=7.3", + "ramsey/uuid": "*" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "orchestra/testbench": "^3.7|^4.0|^5.0|^6.0|^7.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0", + "spatie/ray": "^1.28" + }, + "type": "project", + "extra": { + "laravel": { + "providers": [ + "LdapRecord\\Laravel\\LdapServiceProvider", + "LdapRecord\\Laravel\\LdapAuthServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "LdapRecord\\Laravel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "LDAP Authentication & Management for Laravel.", + "keywords": [ + "adldap2", + "laravel", + "ldap", + "ldaprecord" + ], + "support": { + "issues": "https://github.com/DirectoryTree/LdapRecord-Laravel/issues", + "source": "https://github.com/DirectoryTree/LdapRecord-Laravel/tree/v2.5.4" + }, + "funding": [ + { + "url": "https://github.com/stevebauman", + "type": "github" + } + ], + "time": "2022-02-09T14:41:23+00:00" + }, + { + "name": "doctrine/cache", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce", + "reference": "331b4d5dbaeab3827976273e9356b3b453c300ce", "shasum": "" }, "require": { @@ -715,7 +852,7 @@ ], "support": { "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/1.12.1" + "source": "https://github.com/doctrine/cache/tree/2.1.1" }, "funding": [ { @@ -731,7 +868,7 @@ "type": "tidelift" } ], - "time": "2021-07-17T14:39:21+00:00" + "time": "2021-07-17T14:49:29+00:00" }, { "name": "doctrine/dbal", @@ -1328,24 +1465,21 @@ }, { "name": "ezyang/htmlpurifier", - "version": "v4.13.0", + "version": "v4.14.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75" + "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75", - "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/12ab42bd6e742c70c0a52f7b82477fcd44e64b75", + "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75", "shasum": "" }, "require": { "php": ">=5.2" }, - "require-dev": { - "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd" - }, "type": "library", "autoload": { "psr-0": { @@ -1376,9 +1510,9 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/master" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.14.0" }, - "time": "2020-06-29T00:56:53+00:00" + "time": "2021-12-25T01:21:49+00:00" }, { "name": "fideloper/proxy", @@ -1901,16 +2035,16 @@ }, { "name": "intervention/image", - "version": "2.7.0", + "version": "2.7.1", "source": { "type": "git", "url": "https://github.com/Intervention/image.git", - "reference": "9a8cc99d30415ec0b3f7649e1647d03a55698545" + "reference": "744ebba495319501b873a4e48787759c72e3fb8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/9a8cc99d30415ec0b3f7649e1647d03a55698545", - "reference": "9a8cc99d30415ec0b3f7649e1647d03a55698545", + "url": "https://api.github.com/repos/Intervention/image/zipball/744ebba495319501b873a4e48787759c72e3fb8c", + "reference": "744ebba495319501b873a4e48787759c72e3fb8c", "shasum": "" }, "require": { @@ -1969,7 +2103,7 @@ ], "support": { "issues": "https://github.com/Intervention/image/issues", - "source": "https://github.com/Intervention/image/tree/2.7.0" + "source": "https://github.com/Intervention/image/tree/2.7.1" }, "funding": [ { @@ -1981,7 +2115,7 @@ "type": "github" } ], - "time": "2021-10-03T14:17:12+00:00" + "time": "2021-12-16T16:49:26+00:00" }, { "name": "jaybizzle/crawler-detect", @@ -2629,16 +2763,16 @@ }, { "name": "laravel/ui", - "version": "v3.4.0", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "b3e804559bf3973ecca160a4ae1068e6c7c167c6" + "reference": "9a1e52442dd238647905b98d773d59e438eb9f9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/b3e804559bf3973ecca160a4ae1068e6c7c167c6", - "reference": "b3e804559bf3973ecca160a4ae1068e6c7c167c6", + "url": "https://api.github.com/repos/laravel/ui/zipball/9a1e52442dd238647905b98d773d59e438eb9f9d", + "reference": "9a1e52442dd238647905b98d773d59e438eb9f9d", "shasum": "" }, "require": { @@ -2684,9 +2818,9 @@ "ui" ], "support": { - "source": "https://github.com/laravel/ui/tree/v3.4.0" + "source": "https://github.com/laravel/ui/tree/v3.4.1" }, - "time": "2021-11-30T16:22:00+00:00" + "time": "2021-12-22T10:40:50+00:00" }, { "name": "lcobucci/clock", @@ -3925,24 +4059,24 @@ }, { "name": "neutron/temporary-filesystem", - "version": "3.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/romainneutron/Temporary-Filesystem.git", - "reference": "60e79adfd16f42f4b888e351ad49f9dcb959e3c2" + "reference": "55f3d4896eff3bf070e491916e6c564db5e640b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/romainneutron/Temporary-Filesystem/zipball/60e79adfd16f42f4b888e351ad49f9dcb959e3c2", - "reference": "60e79adfd16f42f4b888e351ad49f9dcb959e3c2", + "url": "https://api.github.com/repos/romainneutron/Temporary-Filesystem/zipball/55f3d4896eff3bf070e491916e6c564db5e640b5", + "reference": "55f3d4896eff3bf070e491916e6c564db5e640b5", "shasum": "" }, "require": { "php": ">=5.6", - "symfony/filesystem": "^2.3 || ^3.0 || ^4.0 || ^5.0" + "symfony/filesystem": "^2.3 || ^3.0 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { - "symfony/phpunit-bridge": "^5.0.4" + "symfony/phpunit-bridge": "^5.0.4 || ^6.0" }, "type": "library", "autoload": { @@ -3963,9 +4097,9 @@ "description": "Symfony filesystem extension to handle temporary files", "support": { "issues": "https://github.com/romainneutron/Temporary-Filesystem/issues", - "source": "https://github.com/romainneutron/Temporary-Filesystem/tree/3.0" + "source": "https://github.com/romainneutron/Temporary-Filesystem/tree/3.0.1" }, - "time": "2020-07-27T14:00:33+00:00" + "time": "2021-12-14T07:30:33+00:00" }, { "name": "nikic/php-parser", @@ -4284,34 +4418,34 @@ }, { "name": "pbmedia/laravel-ffmpeg", - "version": "7.5.12", + "version": "7.6.0", "source": { "type": "git", "url": "https://github.com/protonemedia/laravel-ffmpeg.git", - "reference": "c3c0e4297277adda9bc2fa00aa6c39489d7d45e8" + "reference": "206fa796845e4fcd6b7a80c404b4c7ab8c1f508c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/protonemedia/laravel-ffmpeg/zipball/c3c0e4297277adda9bc2fa00aa6c39489d7d45e8", - "reference": "c3c0e4297277adda9bc2fa00aa6c39489d7d45e8", + "url": "https://api.github.com/repos/protonemedia/laravel-ffmpeg/zipball/206fa796845e4fcd6b7a80c404b4c7ab8c1f508c", + "reference": "206fa796845e4fcd6b7a80c404b4c7ab8c1f508c", "shasum": "" }, "require": { "evenement/evenement": "^3.0", - "illuminate/bus": "^6.0|^7.0|^8.0", - "illuminate/config": "^6.0|^7.0|^8.0", - "illuminate/filesystem": "^6.0|^7.0|^8.0", - "illuminate/log": "^6.0|^7.0|^8.0", - "illuminate/support": "^6.0|^7.0|^8.0", - "league/flysystem": "^1.0.34", - "php": "^7.3|^8.0", - "php-ffmpeg/php-ffmpeg": "^0.18.0" + "illuminate/bus": "^8.67", + "illuminate/config": "^8.67", + "illuminate/filesystem": "^8.67", + "illuminate/log": "^8.67", + "illuminate/support": "^8.67", + "league/flysystem": "^1.1.4", + "php": "^7.4|^8.0|^8.1", + "php-ffmpeg/php-ffmpeg": "^0.19.0" }, "require-dev": { "league/flysystem-memory": "^1.0", "mockery/mockery": "^1.3.3", - "orchestra/testbench": "^4.0|^5.0|^6.0", - "phpunit/phpunit": "^8.0|9.4.*", + "orchestra/testbench": "^6.0", + "phpunit/phpunit": "9.4.*", "spatie/image": "^1.7", "twistor/flysystem-http": "^0.2.0" }, @@ -4357,7 +4491,7 @@ ], "support": { "issues": "https://github.com/protonemedia/laravel-ffmpeg/issues", - "source": "https://github.com/protonemedia/laravel-ffmpeg/tree/7.5.12" + "source": "https://github.com/protonemedia/laravel-ffmpeg/tree/7.6.0" }, "funding": [ { @@ -4365,31 +4499,30 @@ "type": "github" } ], - "time": "2021-07-05T20:42:13+00:00" + "time": "2021-12-20T12:55:32+00:00" }, { "name": "php-ffmpeg/php-ffmpeg", - "version": "v0.18.0", + "version": "v0.19.0", "source": { "type": "git", "url": "https://github.com/PHP-FFMpeg/PHP-FFMpeg.git", - "reference": "edc0a7729d8818ed883e77b3d26ceb6d49ec41de" + "reference": "22b71931fd1a97207788636b283eee1c0067eff7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-FFMpeg/PHP-FFMpeg/zipball/edc0a7729d8818ed883e77b3d26ceb6d49ec41de", - "reference": "edc0a7729d8818ed883e77b3d26ceb6d49ec41de", + "url": "https://api.github.com/repos/PHP-FFMpeg/PHP-FFMpeg/zipball/22b71931fd1a97207788636b283eee1c0067eff7", + "reference": "22b71931fd1a97207788636b283eee1c0067eff7", "shasum": "" }, "require": { "alchemy/binary-driver": "^1.5 || ~2.0.0 || ^5.0", - "doctrine/cache": "^1.0", "evenement/evenement": "^3.0 || ^2.0 || ^1.0", "neutron/temporary-filesystem": "^2.1.1 || ^3.0", - "php": ">=5.3.9" + "php": ">=5.5.9", + "symfony/cache": "^3.1 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { - "silex/silex": "~1.0", "symfony/phpunit-bridge": "^5.0.4", "symfony/process": "2.8 || 3.3" }, @@ -4451,9 +4584,9 @@ ], "support": { "issues": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/issues", - "source": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/tree/v0.18.0" + "source": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/tree/v0.19.0" }, - "time": "2021-03-29T20:20:00+00:00" + "time": "2021-12-20T11:51:26+00:00" }, { "name": "php-http/message-factory", @@ -5696,27 +5829,27 @@ }, { "name": "spatie/image-optimizer", - "version": "1.6.1", + "version": "1.6.2", "source": { "type": "git", "url": "https://github.com/spatie/image-optimizer.git", - "reference": "8bad7f04fd7d31d021b4752ee89f8a450dad8017" + "reference": "6db75529cbf8fa84117046a9d513f277aead90a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/8bad7f04fd7d31d021b4752ee89f8a450dad8017", - "reference": "8bad7f04fd7d31d021b4752ee89f8a450dad8017", + "url": "https://api.github.com/repos/spatie/image-optimizer/zipball/6db75529cbf8fa84117046a9d513f277aead90a0", + "reference": "6db75529cbf8fa84117046a9d513f277aead90a0", "shasum": "" }, "require": { "ext-fileinfo": "*", "php": "^7.3|^8.0", "psr/log": "^1.0 | ^2.0 | ^3.0", - "symfony/process": "^4.2|^5.0" + "symfony/process": "^4.2|^5.0|^6.0" }, "require-dev": { "phpunit/phpunit": "^8.5.21|^9.4.4", - "symfony/var-dumper": "^4.2|^5.0" + "symfony/var-dumper": "^4.2|^5.0|^6.0" }, "type": "library", "autoload": { @@ -5744,9 +5877,9 @@ ], "support": { "issues": "https://github.com/spatie/image-optimizer/issues", - "source": "https://github.com/spatie/image-optimizer/tree/1.6.1" + "source": "https://github.com/spatie/image-optimizer/tree/1.6.2" }, - "time": "2021-11-17T10:36:45+00:00" + "time": "2021-12-21T10:08:05+00:00" }, { "name": "spatie/laravel-backup", @@ -6100,17 +6233,193 @@ "time": "2021-10-18T15:26:12+00:00" }, { - "name": "symfony/console", - "version": "v5.4.1", + "name": "symfony/cache", + "version": "v5.4.2", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4" + "url": "https://github.com/symfony/cache.git", + "reference": "8aad4b69a10c5c51ab54672e78995860f5e447ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4", - "reference": "9130e1a0fc93cb0faadca4ee917171bd2ca9e5f4", + "url": "https://api.github.com/repos/symfony/cache/zipball/8aad4b69a10c5c51ab54672e78995860f5e447ec", + "reference": "8aad4b69a10c5c51ab54672e78995860f5e447ec", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0", + "psr/log": "^1.1|^2|^3", + "symfony/cache-contracts": "^1.1.7|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/var-exporter": "^4.4|^5.0|^6.0" + }, + "conflict": { + "doctrine/dbal": "<2.13.1", + "symfony/dependency-injection": "<4.4", + "symfony/http-kernel": "<4.4", + "symfony/var-dumper": "<4.4" + }, + "provide": { + "psr/cache-implementation": "1.0|2.0", + "psr/simple-cache-implementation": "1.0|2.0", + "symfony/cache-implementation": "1.0|2.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "^1.6|^2.0", + "doctrine/dbal": "^2.13.1|^3.0", + "predis/predis": "^1.1", + "psr/simple-cache": "^1.0|^2.0", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/filesystem": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/messenger": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an extended PSR-6, PSR-16 (and tags) implementation", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "support": { + "source": "https://github.com/symfony/cache/tree/v5.4.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-12-28T17:15:56+00:00" + }, + { + "name": "symfony/cache-contracts", + "version": "v2.5.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache-contracts.git", + "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ac2e168102a2e06a2624f0379bde94cd5854ced2", + "reference": "ac2e168102a2e06a2624f0379bde94cd5854ced2", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/cache": "^1.0|^2.0|^3.0" + }, + "suggest": { + "symfony/cache-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Cache\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to caching", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/cache-contracts/tree/v2.5.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-08-17T14:20:01+00:00" + }, + { + "name": "symfony/console", + "version": "v5.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/a2c6b7ced2eb7799a35375fb9022519282b5405e", + "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e", "shasum": "" }, "require": { @@ -6180,7 +6489,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.1" + "source": "https://github.com/symfony/console/tree/v5.4.2" }, "funding": [ { @@ -6196,20 +6505,20 @@ "type": "tidelift" } ], - "time": "2021-12-09T11:22:43+00:00" + "time": "2021-12-20T16:11:12+00:00" }, { "name": "symfony/css-selector", - "version": "v5.4.0", + "version": "v5.4.2", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "44b933f98bb4b5220d10bed9ce5662f8c2d13dcc" + "reference": "cfcbee910e159df402603502fe387e8b677c22fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/44b933f98bb4b5220d10bed9ce5662f8c2d13dcc", - "reference": "44b933f98bb4b5220d10bed9ce5662f8c2d13dcc", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/cfcbee910e159df402603502fe387e8b677c22fd", + "reference": "cfcbee910e159df402603502fe387e8b677c22fd", "shasum": "" }, "require": { @@ -6246,7 +6555,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.4.0" + "source": "https://github.com/symfony/css-selector/tree/v5.4.2" }, "funding": [ { @@ -6262,7 +6571,7 @@ "type": "tidelift" } ], - "time": "2021-09-09T08:06:01+00:00" + "time": "2021-12-16T21:58:21+00:00" }, { "name": "symfony/deprecation-contracts", @@ -6333,16 +6642,16 @@ }, { "name": "symfony/error-handler", - "version": "v5.4.1", + "version": "v5.4.2", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "1e3cb3565af49cd5f93e5787500134500a29f0d9" + "reference": "e0c0dd0f9d4120a20158fc9aec2367d07d38bc56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/1e3cb3565af49cd5f93e5787500134500a29f0d9", - "reference": "1e3cb3565af49cd5f93e5787500134500a29f0d9", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/e0c0dd0f9d4120a20158fc9aec2367d07d38bc56", + "reference": "e0c0dd0f9d4120a20158fc9aec2367d07d38bc56", "shasum": "" }, "require": { @@ -6384,7 +6693,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.4.1" + "source": "https://github.com/symfony/error-handler/tree/v5.4.2" }, "funding": [ { @@ -6400,7 +6709,7 @@ "type": "tidelift" } ], - "time": "2021-12-01T15:04:08+00:00" + "time": "2021-12-19T20:02:00+00:00" }, { "name": "symfony/event-dispatcher", @@ -6632,16 +6941,16 @@ }, { "name": "symfony/finder", - "version": "v5.4.0", + "version": "v5.4.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590" + "reference": "e77046c252be48c48a40816187ed527703c8f76c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d2f29dac98e96a98be467627bd49c2efb1bc2590", - "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590", + "url": "https://api.github.com/repos/symfony/finder/zipball/e77046c252be48c48a40816187ed527703c8f76c", + "reference": "e77046c252be48c48a40816187ed527703c8f76c", "shasum": "" }, "require": { @@ -6675,7 +6984,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.0" + "source": "https://github.com/symfony/finder/tree/v5.4.2" }, "funding": [ { @@ -6691,20 +7000,20 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2021-12-15T11:06:13+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.1", + "version": "v5.4.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5dad3780023a707f4c24beac7d57aead85c1ce3c" + "reference": "ce952af52877eaf3eab5d0c08cc0ea865ed37313" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5dad3780023a707f4c24beac7d57aead85c1ce3c", - "reference": "5dad3780023a707f4c24beac7d57aead85c1ce3c", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ce952af52877eaf3eab5d0c08cc0ea865ed37313", + "reference": "ce952af52877eaf3eab5d0c08cc0ea865ed37313", "shasum": "" }, "require": { @@ -6748,7 +7057,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.1" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.2" }, "funding": [ { @@ -6764,7 +7073,7 @@ "type": "tidelift" } ], - "time": "2021-12-09T12:46:57+00:00" + "time": "2021-12-28T17:15:56+00:00" }, { "name": "symfony/http-kernel", @@ -6884,16 +7193,16 @@ }, { "name": "symfony/mime", - "version": "v5.4.0", + "version": "v5.4.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "d4365000217b67c01acff407573906ff91bcfb34" + "reference": "1bfd938cf9562822c05c4d00e8f92134d3c8e42d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/d4365000217b67c01acff407573906ff91bcfb34", - "reference": "d4365000217b67c01acff407573906ff91bcfb34", + "url": "https://api.github.com/repos/symfony/mime/zipball/1bfd938cf9562822c05c4d00e8f92134d3c8e42d", + "reference": "1bfd938cf9562822c05c4d00e8f92134d3c8e42d", "shasum": "" }, "require": { @@ -6947,7 +7256,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.0" + "source": "https://github.com/symfony/mime/tree/v5.4.2" }, "funding": [ { @@ -6963,7 +7272,7 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2021-12-28T17:15:56+00:00" }, { "name": "symfony/polyfill-ctype", @@ -7775,16 +8084,16 @@ }, { "name": "symfony/process", - "version": "v5.4.0", + "version": "v5.4.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "5be20b3830f726e019162b26223110c8f47cf274" + "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5be20b3830f726e019162b26223110c8f47cf274", - "reference": "5be20b3830f726e019162b26223110c8f47cf274", + "url": "https://api.github.com/repos/symfony/process/zipball/2b3ba8722c4aaf3e88011be5e7f48710088fb5e4", + "reference": "2b3ba8722c4aaf3e88011be5e7f48710088fb5e4", "shasum": "" }, "require": { @@ -7817,7 +8126,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.0" + "source": "https://github.com/symfony/process/tree/v5.4.2" }, "funding": [ { @@ -7833,7 +8142,7 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2021-12-27T21:01:00+00:00" }, { "name": "symfony/psr-http-message-bridge", @@ -8098,16 +8407,16 @@ }, { "name": "symfony/string", - "version": "v5.4.0", + "version": "v5.4.2", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d" + "reference": "e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", - "reference": "9ffaaba53c61ba75a3c7a3a779051d1e9ec4fd2d", + "url": "https://api.github.com/repos/symfony/string/zipball/e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d", + "reference": "e6a5d5ecf6589c5247d18e0e74e30b11dfd51a3d", "shasum": "" }, "require": { @@ -8164,7 +8473,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.0" + "source": "https://github.com/symfony/string/tree/v5.4.2" }, "funding": [ { @@ -8180,20 +8489,20 @@ "type": "tidelift" } ], - "time": "2021-11-24T10:02:00+00:00" + "time": "2021-12-16T21:52:00+00:00" }, { "name": "symfony/translation", - "version": "v5.4.1", + "version": "v5.4.2", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "8c82cd35ed861236138d5ae1c78c0c7ebcd62107" + "reference": "ff8bb2107b6a549dc3c5dd9c498dcc82c9c098ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/8c82cd35ed861236138d5ae1c78c0c7ebcd62107", - "reference": "8c82cd35ed861236138d5ae1c78c0c7ebcd62107", + "url": "https://api.github.com/repos/symfony/translation/zipball/ff8bb2107b6a549dc3c5dd9c498dcc82c9c098ca", + "reference": "ff8bb2107b6a549dc3c5dd9c498dcc82c9c098ca", "shasum": "" }, "require": { @@ -8261,7 +8570,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.4.1" + "source": "https://github.com/symfony/translation/tree/v5.4.2" }, "funding": [ { @@ -8277,7 +8586,7 @@ "type": "tidelift" } ], - "time": "2021-12-05T20:33:52+00:00" + "time": "2021-12-25T19:45:36+00:00" }, { "name": "symfony/translation-contracts", @@ -8359,16 +8668,16 @@ }, { "name": "symfony/var-dumper", - "version": "v5.4.1", + "version": "v5.4.2", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "2366ac8d8abe0c077844613c1a4f0c0a9f522dcc" + "reference": "1b56c32c3679002b3a42384a580e16e2600f41c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2366ac8d8abe0c077844613c1a4f0c0a9f522dcc", - "reference": "2366ac8d8abe0c077844613c1a4f0c0a9f522dcc", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1b56c32c3679002b3a42384a580e16e2600f41c1", + "reference": "1b56c32c3679002b3a42384a580e16e2600f41c1", "shasum": "" }, "require": { @@ -8428,7 +8737,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.1" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.2" }, "funding": [ { @@ -8444,7 +8753,80 @@ "type": "tidelift" } ], - "time": "2021-12-01T15:04:08+00:00" + "time": "2021-12-29T10:10:35+00:00" + }, + { + "name": "symfony/var-exporter", + "version": "v5.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-exporter.git", + "reference": "2360c8525815b8535caac27cbc1994e2fa8644ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/2360c8525815b8535caac27cbc1994e2fa8644ba", + "reference": "2360c8525815b8535caac27cbc1994e2fa8644ba", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", + "keywords": [ + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" + ], + "support": { + "source": "https://github.com/symfony/var-exporter/tree/v5.4.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-12-16T21:58:21+00:00" }, { "name": "tightenco/collect", @@ -8998,16 +9380,16 @@ }, { "name": "facade/ignition", - "version": "2.17.2", + "version": "2.17.4", "source": { "type": "git", "url": "https://github.com/facade/ignition.git", - "reference": "af3cd70d58ca3ef5189ff0e59efbe5a5c043e2d2" + "reference": "95c80bd35ee6858e9e1439b2f6a698295eeb2070" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/af3cd70d58ca3ef5189ff0e59efbe5a5c043e2d2", - "reference": "af3cd70d58ca3ef5189ff0e59efbe5a5c043e2d2", + "url": "https://api.github.com/repos/facade/ignition/zipball/95c80bd35ee6858e9e1439b2f6a698295eeb2070", + "reference": "95c80bd35ee6858e9e1439b2f6a698295eeb2070", "shasum": "" }, "require": { @@ -9072,7 +9454,7 @@ "issues": "https://github.com/facade/ignition/issues", "source": "https://github.com/facade/ignition" }, - "time": "2021-11-29T14:04:22+00:00" + "time": "2021-12-27T15:11:24+00:00" }, { "name": "facade/ignition-contracts", @@ -10179,16 +10561,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.10", + "version": "9.5.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a" + "reference": "2406855036db1102126125537adb1406f7242fdd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c814a05837f2edb0d1471d6e3f4ab3501ca3899a", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2406855036db1102126125537adb1406f7242fdd", + "reference": "2406855036db1102126125537adb1406f7242fdd", "shasum": "" }, "require": { @@ -10266,11 +10648,11 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.10" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.11" }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { @@ -10278,7 +10660,7 @@ "type": "github" } ], - "time": "2021-09-25T07:38:51+00:00" + "time": "2021-12-25T07:07:57+00:00" }, { "name": "sebastian/cli-parser", @@ -11311,5 +11693,5 @@ "ext-openssl": "*" }, "platform-dev": [], - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.3.0" } diff --git a/config/auth.php b/config/auth.php index e0c437b27..b91d6042d 100644 --- a/config/auth.php +++ b/config/auth.php @@ -65,14 +65,26 @@ return [ */ 'providers' => [ + + // Comment out or remove below for LDAP 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], + // Uncomment below for LDAP // 'users' => [ - // 'driver' => 'database', - // 'table' => 'users', + // 'driver' => 'ldap', + // 'model' => LdapRecord\Models\ActiveDirectory\User::class, + // 'rules' => [], + // 'database' => [ + // 'model' => App\User::class, + // 'sync_passwords' => false, + // 'sync_attributes' => [ + // 'name' => 'cn', + // 'email' => 'mail', + // ], + // ], // ], ], diff --git a/config/ldap.php b/config/ldap.php new file mode 100644 index 000000000..fd94d32e7 --- /dev/null +++ b/config/ldap.php @@ -0,0 +1,73 @@ + env('LDAP_CONNECTION', 'default'), + + /* + |-------------------------------------------------------------------------- + | LDAP Connections + |-------------------------------------------------------------------------- + | + | Below you may configure each LDAP connection your application requires + | access to. Be sure to include a valid base DN - otherwise you may + | not receive any results when performing LDAP search operations. + | + */ + + 'connections' => [ + + 'default' => [ + 'hosts' => [env('LDAP_HOST', '127.0.0.1')], + 'username' => env('LDAP_USERNAME', 'cn=user,dc=local,dc=com'), + 'password' => env('LDAP_PASSWORD', 'secret'), + 'port' => env('LDAP_PORT', 389), + 'base_dn' => env('LDAP_BASE_DN', 'dc=local,dc=com'), + 'timeout' => env('LDAP_TIMEOUT', 5), + 'use_ssl' => env('LDAP_SSL', false), + 'use_tls' => env('LDAP_TLS', false), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | LDAP Logging + |-------------------------------------------------------------------------- + | + | When LDAP logging is enabled, all LDAP search and authentication + | operations are logged using the default application logging + | driver. This can assist in debugging issues and more. + | + */ + + 'logging' => env('LDAP_LOGGING', true), + + /* + |-------------------------------------------------------------------------- + | LDAP Cache + |-------------------------------------------------------------------------- + | + | LDAP caching enables the ability of caching search results using the + | query builder. This is great for running expensive operations that + | may take many seconds to complete, such as a pagination request. + | + */ + + 'cache' => [ + 'enabled' => env('LDAP_CACHE', false), + 'driver' => env('CACHE_DRIVER', 'file'), + ], + +]; diff --git a/database/migrations/2022_03_09_042023_add_ldap_columns_to_users_table.php b/database/migrations/2022_03_09_042023_add_ldap_columns_to_users_table.php new file mode 100644 index 000000000..58bc88809 --- /dev/null +++ b/database/migrations/2022_03_09_042023_add_ldap_columns_to_users_table.php @@ -0,0 +1,29 @@ +string('guid')->unique()->nullable(); + $table->string('domain')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn(['guid', 'domain']); + }); + } +}