From: Dan Brown Date: Sat, 16 Nov 2019 12:42:45 +0000 (+0000) Subject: Merge branch 'feature/saml' of git://github.com/Xiphoseer/BookStack into Xiphoseer... X-Git-Tag: v0.28.0~1^2~47^2~8 X-Git-Url: http://source.bookstackapp.com/bookstack/commitdiff_plain/bb1f43cbd882b51550007020f72667fd0fb10171?ds=inline;hp=-c Merge branch 'feature/saml' of git://github.com/Xiphoseer/BookStack into Xiphoseer-feature/saml --- bb1f43cbd882b51550007020f72667fd0fb10171 diff --combined app/Config/app.php index 0d06a9b21,23025a6c4..9dae697da --- a/app/Config/app.php +++ b/app/Config/app.php @@@ -52,14 -52,11 +52,14 @@@ return 'locale' => env('APP_LANG', 'en'), // Locales available - 'locales' => ['en', 'ar', 'de', 'de_informal', 'es', 'es_AR', 'fr', 'hu', 'nl', 'pt_BR', 'sk', 'cs', 'sv', 'kr', 'ja', 'pl', 'it', 'ru', 'uk', 'zh_CN', 'zh_TW'], + 'locales' => ['en', 'ar', 'de', 'de_informal', 'es', 'es_AR', 'fr', 'hu', 'nl', 'pt_BR', 'sk', 'cs', 'sv', 'ko', 'ja', 'pl', 'it', 'ru', 'uk', 'zh_CN', 'zh_TW', 'tr'], // Application Fallback Locale 'fallback_locale' => 'en', + // Faker Locale + 'faker_locale' => 'en_GB', + // Enable right-to-left text control. 'rtl' => false, @@@ -75,6 -72,10 +75,6 @@@ // Encryption cipher 'cipher' => 'AES-256-CBC', - // Logging configuration - // Options: single, daily, syslog, errorlog - 'log' => env('APP_LOGGING', 'single'), - // Application Services Provides 'providers' => [ @@@ -105,7 -106,9 +105,8 @@@ 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, @@@ -135,7 -138,6 +136,7 @@@ // Laravel 'App' => Illuminate\Support\Facades\App::class, + 'Arr' => Illuminate\Support\Arr::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Auth' => Illuminate\Support\Facades\Auth::class, 'Blade' => Illuminate\Support\Facades\Blade::class, @@@ -165,7 -167,6 +166,7 @@@ 'Schema' => Illuminate\Support\Facades\Schema::class, 'Session' => Illuminate\Support\Facades\Session::class, 'Storage' => Illuminate\Support\Facades\Storage::class, + 'Str' => Illuminate\Support\Str::class, 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, @@@ -181,7 -182,6 +182,7 @@@ 'Setting' => BookStack\Facades\Setting::class, 'Views' => BookStack\Facades\Views::class, 'Images' => BookStack\Facades\Images::class, + 'Permissions' => BookStack\Facades\Permissions::class, ], diff --combined app/Config/services.php index 923015f6e,b3dc9f087..0f80a9fc1 --- a/app/Config/services.php +++ b/app/Config/services.php @@@ -22,6 -22,23 +22,6 @@@ return // Callback URL for social authentication methods 'callback_url' => env('APP_URL', false), - 'mailgun' => [ - 'domain' => '', - 'secret' => '', - ], - - 'ses' => [ - 'key' => '', - 'secret' => '', - 'region' => 'us-east-1', - ], - - 'stripe' => [ - 'model' => \BookStack\Auth\User::class, - 'key' => '', - 'secret' => '', - ], - 'github' => [ 'client_id' => env('GITHUB_APP_ID', false), 'client_secret' => env('GITHUB_APP_SECRET', false), @@@ -126,10 -143,23 +126,23 @@@ '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), ] ]; diff --combined app/Http/Controllers/Auth/LoginController.php index 2b51ab997,0a9537995..0cb050a89 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@@ -98,7 -98,6 +98,7 @@@ class LoginController extends Controlle $user->save(); $this->userRepo->attachDefaultRole($user); + $this->userRepo->downloadAndAssignUserAvatar($user); auth()->login($user); } @@@ -119,6 -118,7 +119,7 @@@ { $socialDrivers = $this->socialAuthService->getActiveDrivers(); $authMethod = config('auth.method'); + $samlEnabled = config('services.saml.enabled') == true; if ($request->has('email')) { session()->flashInput([ @@@ -127,7 -127,11 +128,11 @@@ ]); } - return view('auth.login', ['socialDrivers' => $socialDrivers, 'authMethod' => $authMethod]); + return view('auth.login', [ + 'socialDrivers' => $socialDrivers, + 'authMethod' => $authMethod, + 'samlEnabled' => $samlEnabled, + ]); } /** diff --combined app/Http/Kernel.php index f9752da09,7794f3401..027e469c8 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@@ -12,7 -12,7 +12,7 @@@ class Kernel extends HttpKerne * @var array */ protected $middleware = [ - \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, + \BookStack\Http\Middleware\CheckForMaintenanceMode::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \BookStack\Http\Middleware\TrimStrings::class, \BookStack\Http\Middleware\TrustProxies::class, @@@ -29,16 -29,19 +29,21 @@@ \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \Illuminate\Routing\Middleware\ThrottleRequests::class, \BookStack\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, - \BookStack\Http\Middleware\Localization::class + \BookStack\Http\Middleware\Localization::class, + \BookStack\Http\Middleware\GlobalViewData::class, ], 'api' => [ 'throttle:60,1', 'bindings', ], + 'saml' => [ + \BookStack\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + ], ]; /** diff --combined composer.json index a8b9456a1,457ce5093..1d952a0c5 --- a/composer.json +++ b/composer.json @@@ -5,47 -5,47 +5,48 @@@ "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": [ - "database" + "database/seeds", + "database/factories" ], "psr-4": { "BookStack\\": "app/" @@@ -58,45 -58,37 +59,45 @@@ }, "scripts": { "post-root-package-install": [ - "php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ - "php artisan key:generate" + "@php artisan key:generate --ansi" ], "pre-update-cmd": [ - "php -r \"!file_exists('bootstrap/cache/services.php') || @unlink('bootstrap/cache/services.php');\"", - "php -r \"!file_exists('bootstrap/cache/compiled.php') || @unlink('bootstrap/cache/compiled.php');\"" + "@php -r \"!file_exists('bootstrap/cache/services.php') || @unlink('bootstrap/cache/services.php');\"", + "@php -r \"!file_exists('bootstrap/cache/compiled.php') || @unlink('bootstrap/cache/compiled.php');\"" ], "pre-install-cmd": [ - "php -r \"!file_exists('bootstrap/cache/services.php') || @unlink('bootstrap/cache/services.php');\"", - "php -r \"!file_exists('bootstrap/cache/compiled.php') || @unlink('bootstrap/cache/compiled.php');\"" + "@php -r \"!file_exists('bootstrap/cache/services.php') || @unlink('bootstrap/cache/services.php');\"", + "@php -r \"!file_exists('bootstrap/cache/compiled.php') || @unlink('bootstrap/cache/compiled.php');\"" ], "post-install-cmd": [ - "php artisan cache:clear", - "php artisan view:clear" + "@php artisan cache:clear", + "@php artisan view:clear" ], "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", - "@php artisan package:discover" + "@php artisan package:discover --ansi" ], "refresh-test-database": [ - "php artisan migrate:refresh --database=mysql_testing", - "php artisan db:seed --class=DummyContentSeeder --database=mysql_testing" + "@php artisan migrate:refresh --database=mysql_testing", + "@php artisan db:seed --class=DummyContentSeeder --database=mysql_testing" ] }, "config": { "optimize-autoloader": true, "preferred-install": "dist", + "sort-packages": true, "platform": { - "php": "7.0.5" + "php": "7.2.0" + } + }, + "extra": { + "laravel": { + "dont-discover": [] } - } + }, + "minimum-stability": "dev", + "prefer-stable": true } diff --combined resources/lang/de/errors.php index ccec60561,2cd9d8b30..ff2bf8653 --- a/resources/lang/de/errors.php +++ b/resources/lang/de/errors.php @@@ -1,13 -1,11 +1,13 @@@ 'Sie haben keine Berechtigung, auf diese Seite zuzugreifen.', 'permissionJson' => 'Sie haben keine Berechtigung, die angeforderte Aktion auszuführen.', + // Auth '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 melden Sie sich an.', @@@ -17,6 -15,8 +17,8 @@@ '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.', + 'saml_already_logged_in' => 'Sie sind bereits angemeldet', + 'saml_user_not_registered' => 'Kein Benutzer mit ID :name registriert und die automatische Registrierung ist deaktiviert', 'social_no_action_defined' => 'Es ist keine Aktion definiert', 'social_login_bad_response' => "Fehler bei der :socialAccount-Anmeldung: \n:error", 'social_account_in_use' => 'Dieses :socialAccount-Konto wird bereits verwendet. Bitte melden Sie sich mit dem :socialAccount-Konto an.', @@@ -27,8 -27,6 +29,8 @@@ 'social_account_register_instructions' => 'Wenn Sie bisher keinen Social-Media Konto besitzen, können Sie 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. Stellen Sie sicher, dass dieser Ordner auf dem Server beschreibbar ist.', 'cannot_get_image_from_url' => 'Bild konnte nicht von der URL :url geladen werden.', @@@ -42,25 -40,21 +44,25 @@@ // Attachments 'attachment_page_mismatch' => 'Die Seite stimmte nach dem Hochladen des Anhangs nicht überein.', 'attachment_not_found' => 'Anhang konnte nicht gefunden werden.', + // Pages 'page_draft_autosave_fail' => 'Fehler beim Speichern des Entwurfs. Stellen Sie sicher, dass Sie mit dem Internet verbunden sind, bevor Sie den Entwurf dieser Seite speichern.', 'page_custom_home_deletion' => 'Eine als Startseite gesetzte Seite kann nicht gelöscht werden.', + // Entities 'entity_not_found' => 'Eintrag nicht gefunden', - 'book_not_found' => 'Buch nicht gefunden', 'bookshelf_not_found' => 'Regal nicht gefunden', + 'book_not_found' => 'Buch nicht gefunden', 'page_not_found' => 'Seite nicht gefunden', 'chapter_not_found' => 'Kapitel nicht gefunden', 'selected_book_not_found' => 'Das gewählte Buch wurde nicht gefunden.', 'selected_book_chapter_not_found' => 'Das gewählte Buch oder Kapitel wurde nicht gefunden.', 'guests_cannot_save_drafts' => 'Gäste können keine Entwürfe speichern', + // Users 'users_cannot_delete_only_admin' => 'Sie können den einzigen Administrator nicht löschen.', 'users_cannot_delete_guest' => 'Sie können den Gast-Benutzer nicht löschen', + // Roles 'role_cannot_be_edited' => 'Diese Rolle kann nicht bearbeitet werden.', 'role_system_cannot_be_deleted' => 'Dies ist eine Systemrolle und kann nicht gelöscht werden', @@@ -73,13 -67,11 +75,13 @@@ 'comment_add' => 'Beim Hinzufügen des Kommentars ist ein Fehler aufgetreten.', 'comment_delete' => 'Beim Löschen des Kommentars ist ein Fehler aufgetreten.', 'empty_comment' => 'Kann keinen leeren Kommentar hinzufügen', + // Error pages '404_page_not_found' => 'Seite nicht gefunden', 'sorry_page_not_found' => 'Entschuldigung. Die Seite, die Sie angefordert haben, wurde nicht gefunden.', 'return_home' => 'Zurück zur Startseite', 'error_occurred' => 'Es ist ein Fehler aufgetreten', 'app_down' => ':appName befindet sich aktuell im Wartungsmodus.', - 'back_soon' => 'Wir werden so schnell wie möglich wieder online sein.' + 'back_soon' => 'Wir werden so schnell wie möglich wieder online sein.', + ]; diff --combined resources/lang/de_informal/errors.php index 9b5b5166b,420c35c8d..e62350156 --- a/resources/lang/de_informal/errors.php +++ b/resources/lang/de_informal/errors.php @@@ -1,85 -1,33 +1,80 @@@ 'Du hast keine Berechtigung, auf diese Seite zuzugreifen.', '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.', + 'cannot_get_image_from_url' => 'Bild konnte nicht von der URL :url geladen werden.', 'cannot_create_thumbs' => 'Der Server kann keine Vorschau-Bilder erzeugen. Bitte prüfe, ob die GD PHP-Erweiterung installiert ist.', 'server_upload_limit' => 'Der Server verbietet das Hochladen von Dateien mit dieser Dateigröße. Bitte versuche es mit einer kleineren Datei.', + 'uploaded' => 'Der Server verbietet das Hochladen von Dateien mit dieser Dateigröße. Bitte versuchen Sie es mit einer kleineren Datei.', + 'image_upload_error' => 'Beim Hochladen des Bildes trat ein Fehler auf.', + 'image_upload_type_error' => 'Der Bildtyp der hochgeladenen Datei ist ungültig.', + 'file_upload_timeout' => 'Der Upload der Datei ist abgelaufen.', + + // Attachments + 'attachment_page_mismatch' => 'Die Seite stimmte nach dem Hochladen des Anhangs nicht überein.', + 'attachment_not_found' => 'Anhang konnte nicht gefunden werden.', // Pages 'page_draft_autosave_fail' => 'Fehler beim Speichern des Entwurfs. Stelle sicher, dass Du mit dem Internet verbunden bist, bevor Du den Entwurf dieser Seite speicherst.', 'page_custom_home_deletion' => 'Eine als Startseite gesetzte Seite kann nicht gelöscht werden.', + // Entities + 'entity_not_found' => 'Eintrag nicht gefunden', + 'bookshelf_not_found' => 'Regal nicht gefunden', + 'book_not_found' => 'Buch nicht gefunden', + 'page_not_found' => 'Seite nicht gefunden', + 'chapter_not_found' => 'Kapitel nicht gefunden', + 'selected_book_not_found' => 'Das gewählte Buch wurde nicht gefunden.', + 'selected_book_chapter_not_found' => 'Das gewählte Buch oder Kapitel wurde nicht gefunden.', + 'guests_cannot_save_drafts' => 'Gäste können keine Entwürfe speichern', + // Users 'users_cannot_delete_only_admin' => 'Du kannst den einzigen Administrator nicht löschen.', 'users_cannot_delete_guest' => 'Du kannst den Gast-Benutzer nicht löschen', + // Roles + 'role_cannot_be_edited' => 'Diese Rolle kann nicht bearbeitet werden.', + 'role_system_cannot_be_deleted' => 'Dies ist eine Systemrolle und kann nicht gelöscht werden', + 'role_registration_default_cannot_delete' => 'Diese Rolle kann nicht gelöscht werden, solange sie als Standardrolle für neue Registrierungen gesetzt ist', + 'role_cannot_remove_only_admin' => 'Dieser Benutzer ist der einzige Benutzer, welchem die Administratorrolle zugeordnet ist. Ordnen Sie die Administratorrolle einem anderen Benutzer zu, bevor Sie versuchen, sie hier zu entfernen.', + + // Comments + 'comment_list' => 'Beim Abrufen der Kommentare ist ein Fehler aufgetreten.', + 'cannot_add_comment_to_draft' => 'Du kannst keine Kommentare zu einem Entwurf hinzufügen.', + 'comment_add' => 'Beim Hinzufügen des Kommentars ist ein Fehler aufgetreten.', + 'comment_delete' => 'Beim Löschen des Kommentars ist ein Fehler aufgetreten.', + 'empty_comment' => 'Kann keinen leeren Kommentar hinzufügen', + // Error pages + '404_page_not_found' => 'Seite nicht gefunden', 'sorry_page_not_found' => 'Entschuldigung. Die Seite, die Du angefordert hast, wurde nicht gefunden.', + 'return_home' => 'Zurück zur Startseite', + 'error_occurred' => 'Es ist ein Fehler aufgetreten', + 'app_down' => ':appName befindet sich aktuell im Wartungsmodus.', + 'back_soon' => 'Wir werden so schnell wie möglich wieder online sein.', + ]; diff --combined resources/lang/en/errors.php index c3b47744d,40c0bbffb..37de5dcc1 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@@ -17,6 -17,8 +17,8 @@@ return 'ldap_fail_authed' => 'LDAP access failed using given dn & password details', 'ldap_extension_not_installed' => 'LDAP PHP extension not installed', 'ldap_cannot_connect' => 'Cannot connect to ldap server, Initial connection failed', + 'saml_already_logged_in' => 'Already logged in', + 'saml_user_not_registered' => 'The user :name is not registered and automatic registration is disabled', 'social_no_action_defined' => 'No action defined', 'social_login_bad_response' => "Error received during :socialAccount login: \n:error", 'social_account_in_use' => 'This :socialAccount account is already in use, Try logging in via the :socialAccount option.', @@@ -27,7 -29,6 +29,7 @@@ 'social_account_register_instructions' => 'If you do not yet have an account, You can register an account using the :socialAccount option.', 'social_driver_not_found' => 'Social driver not found', 'social_driver_not_configured' => 'Your :socialAccount social settings are not configured correctly.', + 'invite_token_expired' => 'This invitation link has expired. You can instead try to reset your account password.', // System 'path_not_writable' => 'File path :filePath could not be uploaded to. Ensure it is writable to the server.', diff --combined resources/views/auth/login.blade.php index fbf540d71,8d89c1288..7e4a3992b --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@@ -7,7 -7,7 +7,7 @@@
 
-

{{ title_case(trans('auth.log_in')) }}

+

{{ Str::title(trans('auth.log_in')) }}

{!! csrf_field() !!} @@@ -22,12 -22,13 +22,12 @@@ 'name' => 'remember', 'checked' => false, 'value' => 'on', - 'tabindex' => 1, 'label' => trans('auth.remember_me'), ])
- +
@@@ -45,6 -46,16 +45,16 @@@ @endforeach @endif + @if($samlEnabled) +
+
+ + {{-- @icon('auth/github') --}} + {{ trans('auth.log_in_with', ['socialDriver' => config('services.saml.name')]) }} + +
+ @endif + @if(setting('registration-enabled', false))

@@@ -54,4 -65,4 +64,4 @@@
- @stop + @stop diff --combined resources/views/settings/roles/form.blade.php index 20b8d65ed,d7c1fc47c..94e63b158 --- a/resources/views/settings/roles/form.blade.php +++ b/resources/views/settings/roles/form.blade.php @@@ -19,7 -19,7 +19,7 @@@ @include('form.text', ['name' => 'description']) - @if(config('auth.method') === 'ldap') + @if(config('auth.method') === 'ldap' || config('services.saml.enabled') === true)
@include('form.text', ['name' => 'external_auth_id']) @@@ -38,7 -38,6 +38,7 @@@
@include('settings.roles.checkbox', ['permission' => 'user-roles-manage', 'label' => trans('settings.role_manage_roles')])
@include('settings.roles.checkbox', ['permission' => 'restrictions-manage-all', 'label' => trans('settings.role_manage_entity_permissions')])
@include('settings.roles.checkbox', ['permission' => 'restrictions-manage-own', 'label' => trans('settings.role_manage_own_entity_permissions')])
+
@include('settings.roles.checkbox', ['permission' => 'templates-manage', 'label' => trans('settings.role_manage_page_templates')])
@include('settings.roles.checkbox', ['permission' => 'settings-manage', 'label' => trans('settings.role_manage_settings')])
@@@ -224,7 -223,7 +224,7 @@@ @if (isset($role) && $role->id) id}") }}" class="button outline">{{ trans('settings.role_delete') }} @endif - + @@@ -255,4 -254,4 +255,4 @@@ {{ trans('settings.role_users_none') }}

@endif - + diff --combined resources/views/users/form.blade.php index 32b717ec8,7a3d44935..6c08cad44 --- a/resources/views/users/form.blade.php +++ b/resources/views/users/form.blade.php @@@ -19,13 -19,13 +19,13 @@@
@if($authMethod !== 'ldap' || userCan('users-manage')) - @include('form.text', ['name' => 'email']) + @include('form.text', ['name' => 'email', 'disabled' => !userCan('users-manage')]) @endif
- @if($authMethod === 'ldap' && userCan('users-manage')) + @if(($authMethod === 'ldap' || config('services.saml.enabled') === true) && userCan('users-manage'))
@@@ -48,40 -48,23 +48,40 @@@ @endif @if($authMethod === 'standard') -
+
-

{{ trans('settings.users_password_desc') }}

- @if(isset($model)) + + @if(!isset($model))

- {{ trans('settings.users_password_warning') }} + {{ trans('settings.users_send_invite_text') }}

+ + @include('components.toggle-switch', [ + 'name' => 'send_invite', + 'value' => old('send_invite', 'true') === 'true', + 'label' => trans('settings.users_send_invite_option') + ]) + @endif -
-
- - @include('form.password', ['name' => 'password']) -
-
- - @include('form.password', ['name' => 'password-confirm']) + + +
- @endif + @endif