]> BookStack Code Mirror - bookstack/commitdiff
Merge branch 'feature/saml' of git://github.com/Xiphoseer/BookStack into Xiphoseer...
authorDan Brown <redacted>
Sat, 16 Nov 2019 12:42:45 +0000 (12:42 +0000)
committerDan Brown <redacted>
Sat, 16 Nov 2019 12:42:45 +0000 (12:42 +0000)
1  2 
app/Config/app.php
app/Config/services.php
app/Http/Controllers/Auth/LoginController.php
app/Http/Kernel.php
composer.json
resources/lang/de/errors.php
resources/lang/de_informal/errors.php
resources/lang/en/errors.php
resources/views/auth/login.blade.php
resources/views/settings/roles/form.blade.php
resources/views/users/form.blade.php

index 0d06a9b21d7d846a94b49ab8677ced43b3c676cf,23025a6c45e4c819fd5668c77f1c36546edbd7f8..9dae697da54f7fab813c1c75487b42261efc7a55
@@@ -105,7 -106,9 +105,8 @@@ return 
          Intervention\Image\ImageServiceProvider::class,
          Barryvdh\DomPDF\ServiceProvider::class,
          Barryvdh\Snappy\ServiceProvider::class,
+         Aacotroneo\Saml2\Saml2ServiceProvider::class,
  
 -
          // BookStack replacement service providers (Extends Laravel)
          BookStack\Providers\PaginationServiceProvider::class,
          BookStack\Providers\TranslationServiceProvider::class,
index 923015f6e62815e66b388a21f6e9d4b0b2282388,b3dc9f08779ff2e6225bdb37e39d159e40d7246d..0f80a9fc15f4f66c57369d71a19096721b2df4f4
@@@ -126,10 -143,23 +126,23 @@@ return 
          'email_attribute' => env('LDAP_EMAIL_ATTRIBUTE', 'mail'),
          'display_name_attribute' => env('LDAP_DISPLAY_NAME_ATTRIBUTE', 'cn'),
          'follow_referrals' => env('LDAP_FOLLOW_REFERRALS', false),
 -        'user_to_groups' => env('LDAP_USER_TO_GROUPS',false),
 +        'user_to_groups' => env('LDAP_USER_TO_GROUPS', false),
          'group_attribute' => env('LDAP_GROUP_ATTRIBUTE', 'memberOf'),
 -        'remove_from_groups' => env('LDAP_REMOVE_FROM_GROUPS',false),
 +        'remove_from_groups' => env('LDAP_REMOVE_FROM_GROUPS', false),
          'tls_insecure' => env('LDAP_TLS_INSECURE', false),
+     ],
+     'saml' => [
+         'name' => env('SAML_NAME', 'SSO'),
+         'enabled' => env('SAML2_ENABLED', false),
+         'auto_register' => env('SAML_AUTO_REGISTER', false),
+         'email_attribute' => env('SAML_EMAIL_ATTRIBUTE', 'email'),
+         'display_name_attribute' => explode('|', env('SAML_DISPLAY_NAME_ATTRIBUTE', 'username')),
+         'user_name_attribute' => env('SAML_USER_NAME_ATTRIBUTE', null),
+         'group_attribute' => env('SAML_GROUP_ATTRIBUTE', 'group'),
+         'remove_from_groups' => env('SAML_REMOVE_FROM_GROUPS',false),
+         'user_to_groups' => env('SAML_USER_TO_GROUPS', false),
+         'id_is_user_name' => env('SAML_ID_IS_USER_NAME', true),
      ]
  
  ];
Simple merge
diff --cc composer.json
index a8b9456a1856c01fb2bf65e14ea32de0f7c55a15,457ce5093710bbcf6dd6550577759ed838951e72..1d952a0c50ac3b560f8a75858917bd414e95e919
@@@ -5,42 -5,43 +5,43 @@@
      "license": "MIT",
      "type": "project",
      "require": {
 -        "php": ">=7.0.5",
 +        "php": "^7.2",
 +        "ext-curl": "*",
 +        "ext-dom": "*",
 +        "ext-gd": "*",
          "ext-json": "*",
 +        "ext-mbstring": "*",
          "ext-tidy": "*",
 -        "ext-dom": "*",
          "ext-xml": "*",
 -        "ext-mbstring": "*",
 -        "ext-gd": "*",
 -        "ext-curl": "*",
 -        "laravel/framework": "~5.5.44",
 -        "fideloper/proxy": "~3.3",
 -        "intervention/image": "^2.4",
 -        "laravel/socialite": "3.0.x-dev",
 +        "barryvdh/laravel-dompdf": "^0.8.5",
 +        "barryvdh/laravel-snappy": "^0.4.5",
 +        "doctrine/dbal": "^2.9",
 +        "fideloper/proxy": "^4.0",
 +        "gathercontent/htmldiff": "^0.2.1",
 +        "intervention/image": "^2.5",
 +        "laravel/framework": "^6.0",
 +        "laravel/socialite": "^4.2",
          "league/flysystem-aws-s3-v3": "^1.0",
 -        "barryvdh/laravel-dompdf": "^0.8.1",
          "predis/predis": "^1.1",
 -        "gathercontent/htmldiff": "^0.2.1",
 -        "barryvdh/laravel-snappy": "^0.4.0",
 -        "socialiteproviders/slack": "^3.0",
 +        "socialiteproviders/discord": "^2.0",
 +        "socialiteproviders/gitlab": "^3.0",
          "socialiteproviders/microsoft-azure": "^3.0",
          "socialiteproviders/okta": "^1.0",
 -        "socialiteproviders/gitlab": "^3.0",
 -        "socialiteproviders/twitch": "^3.0",
 -        "socialiteproviders/discord": "^2.0",
 -        "doctrine/dbal": "^2.5",
 +        "socialiteproviders/slack": "^3.0",
-         "socialiteproviders/twitch": "^5.0"
++        "socialiteproviders/twitch": "^5.0",
+         "aacotroneo/laravel-saml2": "^1.0"
      },
      "require-dev": {
 -        "filp/whoops": "~2.0",
 -        "fzaninotto/faker": "~1.4",
 -        "mockery/mockery": "~1.0",
 -        "phpunit/phpunit": "~6.0",
 -        "symfony/css-selector": "3.1.*",
 -        "symfony/dom-crawler": "3.1.*",
 -        "laravel/browser-kit-testing": "^2.0",
 -        "barryvdh/laravel-ide-helper": "^2.4.1",
 -        "barryvdh/laravel-debugbar": "^3.1.0",
 -        "squizlabs/php_codesniffer": "^3.2"
 +        "barryvdh/laravel-debugbar": "^3.2.8",
 +        "barryvdh/laravel-ide-helper": "^2.6.4",
 +        "facade/ignition": "^1.4",
 +        "fzaninotto/faker": "^1.4",
 +        "laravel/browser-kit-testing": "^5.1",
 +        "mockery/mockery": "^1.0",
 +        "nunomaduro/collision": "^3.0",
 +        "phpunit/phpunit": "^8.0",
 +        "squizlabs/php_codesniffer": "^3.4",
 +        "wnx/laravel-stats": "^2.0"
      },
      "autoload": {
          "classmap": [
Simple merge
index 9b5b5166b810d40cab20f4f94e40cc0a26b3e7fa,420c35c8d5bd849f3195020d25ed78bc0bbf7c09..e6235015660218d3c65faa587c90246ead863d1a
@@@ -9,25 -7,13 +9,20 @@@ return 
      'permissionJson' => 'Du hast keine Berechtigung, die angeforderte Aktion auszuführen.',
  
      // Auth
++    'saml_already_logged_in' => 'Du bist bereits angemeldet',
 +    'error_user_exists_different_creds' => 'Ein Benutzer mit der E-Mail-Adresse :email ist bereits mit anderen Anmeldedaten registriert.',
      'email_already_confirmed' => 'Die E-Mail-Adresse ist bereits bestätigt. Bitte melde dich an.',
      'email_confirmation_invalid' => 'Der Bestätigungslink ist nicht gültig oder wurde bereits verwendet. Bitte registriere dich erneut.',
-     'email_confirmation_expired' => 'Der Bestätigungslink ist abgelaufen. Es wurde eine neue Bestätigungs-E-Mail gesendet.',
-     'ldap_fail_anonymous' => 'Anonymer LDAP-Zugriff ist fehlgeschlafgen',
-     'ldap_fail_authed' => 'LDAP-Zugriff mit DN und Passwort ist fehlgeschlagen',
-     'ldap_extension_not_installed' => 'LDAP-PHP-Erweiterung ist nicht installiert.',
-     'ldap_cannot_connect' => 'Die Verbindung zum LDAP-Server ist fehlgeschlagen. Beim initialen Verbindungsaufbau trat ein Fehler auf.',
-     'social_no_action_defined' => 'Es ist keine Aktion definiert',
-     'social_login_bad_response' => "Fehler bei der :socialAccount-Anmeldung: \n:error",
 -    'saml_already_logged_in' => 'Du bist bereits angemeldet',
++
      'social_account_in_use' => 'Dieses :socialAccount-Konto wird bereits verwendet. Bitte melde dich mit dem :socialAccount-Konto an.',
      'social_account_email_in_use' => 'Die E-Mail-Adresse ":email" ist bereits registriert. Wenn Du bereits registriert bist, kannst Du Dein :socialAccount-Konto in Deinen Profil-Einstellungen verknüpfen.',
 +    'social_account_existing' => 'Dieses :socialAccount-Konto ist bereits mit Ihrem Profil verknüpft.',
 +    'social_account_already_used_existing' => 'Dieses :socialAccount-Konto wird bereits von einem anderen Benutzer verwendet.',
      'social_account_not_used' => 'Dieses :socialAccount-Konto ist bisher keinem Benutzer zugeordnet. Du kannst das in Deinen Profil-Einstellungen tun.',
      'social_account_register_instructions' => 'Wenn Du bisher kein Social-Media Konto besitzt, kannst Du ein solches Konto mit der :socialAccount Option anlegen.',
 +    'social_driver_not_found' => 'Treiber für Social-Media-Konten nicht gefunden',
 +    'social_driver_not_configured' => 'Ihr :socialAccount-Konto ist nicht korrekt konfiguriert.',
 +    'invite_token_expired' => 'This invitation link has expired. You can instead try to reset your account password.',
  
      // System
      'path_not_writable' => 'Die Datei kann nicht in den angegebenen Pfad :filePath hochgeladen werden. Stelle sicher, dass dieser Ordner auf dem Server beschreibbar ist.',
Simple merge
Simple merge
index 32b717ec8c2ec4db4ef10211f54f0b1aab30f054,7a3d44935ba8ec16e9f2bfa41d4e3b53b2a95df9..6c08cad44f12a85c87f4f9b695c47b710b4cddd7
  @endif
  
  @if($authMethod === 'standard')
 -    <div>
 +    <div new-user-password>
          <label class="setting-list-label">{{ trans('settings.users_password') }}</label>
 -        <p class="small">{{ trans('settings.users_password_desc') }}</p>
 -        @if(isset($model))
 +
 +        @if(!isset($model))
              <p class="small">
 -                {{ trans('settings.users_password_warning') }}
 +                {{ trans('settings.users_send_invite_text') }}
              </p>
 +
 +            @include('components.toggle-switch', [
 +                'name' => 'send_invite',
 +                'value' => old('send_invite', 'true') === 'true',
 +                'label' => trans('settings.users_send_invite_option')
 +            ])
 +
          @endif
 -        <div class="grid half mt-m gap-xl">
 -            <div>
 -                <label for="password">{{ trans('auth.password') }}</label>
 -                @include('form.password', ['name' => 'password'])
 -            </div>
 -            <div>
 -                <label for="password-confirm">{{ trans('auth.password_confirm') }}</label>
 -                @include('form.password', ['name' => 'password-confirm'])
 +
 +        <div id="password-input-container" @if(!isset($model)) style="display: none;" @endif>
 +            <p class="small">{{ trans('settings.users_password_desc') }}</p>
 +            @if(isset($model))
 +                <p class="small">
 +                    {{ trans('settings.users_password_warning') }}
 +                </p>
 +            @endif
 +            <div class="grid half mt-m gap-xl">
 +                <div>
 +                    <label for="password">{{ trans('auth.password') }}</label>
 +                    @include('form.password', ['name' => 'password'])
 +                </div>
 +                <div>
 +                    <label for="password-confirm">{{ trans('auth.password_confirm') }}</label>
 +                    @include('form.password', ['name' => 'password-confirm'])
 +                </div>
              </div>
          </div>
 +
      </div>
- @endif
+ @endif