3 namespace BookStack\Providers;
5 use BookStack\Api\ApiTokenGuard;
6 use BookStack\Auth\Access\ExternalBaseUserProvider;
7 use BookStack\Auth\Access\Guards\AsyncExternalBaseSessionGuard;
8 use BookStack\Auth\Access\Guards\LdapSessionGuard;
9 use BookStack\Auth\Access\Ldap\LdapService;
10 use BookStack\Auth\Access\LoginService;
11 use BookStack\Auth\Access\RegistrationService;
12 use Illuminate\Support\Facades\Auth;
13 use Illuminate\Support\ServiceProvider;
14 use Illuminate\Validation\Rules\Password;
16 class AuthServiceProvider extends ServiceProvider
19 * Bootstrap the application services.
23 public function boot()
25 // Password Configuration
26 // Changes here must be reflected in ApiDocsGenerate@getValidationAsString.
27 Password::defaults(fn () => Password::min(8));
30 Auth::extend('api-token', function ($app, $name, array $config) {
31 return new ApiTokenGuard($app['request'], $app->make(LoginService::class));
34 Auth::extend('ldap-session', function ($app, $name, array $config) {
35 $provider = Auth::createUserProvider($config['provider']);
37 return new LdapSessionGuard(
40 $app['session.store'],
41 $app[LdapService::class],
42 $app[RegistrationService::class]
46 Auth::extend('async-external-session', function ($app, $name, array $config) {
47 $provider = Auth::createUserProvider($config['provider']);
49 return new AsyncExternalBaseSessionGuard(
52 $app['session.store'],
53 $app[RegistrationService::class]
59 * Register the application services.
63 public function register()
65 Auth::provider('external-users', function ($app, array $config) {
66 return new ExternalBaseUserProvider($config['model']);