X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a274406038e13cf678e14d65dfa70d04ead67206..refs/pull/3245/head:/app/Http/Controllers/UserController.php diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index a0da220ee..3903682eb 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -12,7 +12,9 @@ use BookStack\Exceptions\UserUpdateException; use BookStack\Uploads\ImageRepo; use Exception; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; +use Illuminate\Validation\Rules\Password; use Illuminate\Validation\ValidationException; class UserController extends Controller @@ -60,6 +62,7 @@ class UserController extends Controller $this->checkPermission('users-manage'); $authMethod = config('auth.method'); $roles = $this->userRepo->getAllRoles(); + $this->setPageTitle(trans('settings.users_add_new')); return view('users.create', ['authMethod' => $authMethod, 'roles' => $roles]); } @@ -74,18 +77,19 @@ class UserController extends Controller { $this->checkPermission('users-manage'); $validationRules = [ - 'name' => 'required', - 'email' => 'required|email|unique:users,email', + 'name' => ['required'], + 'email' => ['required', 'email', 'unique:users,email'], + 'setting' => ['array'], ]; $authMethod = config('auth.method'); $sendInvite = ($request->get('send_invite', 'false') === 'true'); if ($authMethod === 'standard' && !$sendInvite) { - $validationRules['password'] = 'required|min:6'; - $validationRules['password-confirm'] = 'required|same:password'; - } elseif ($authMethod === 'ldap' || $authMethod === 'saml2') { - $validationRules['external_auth_id'] = 'required'; + $validationRules['password'] = ['required', Password::default()]; + $validationRules['password-confirm'] = ['required', 'same:password']; + } elseif ($authMethod === 'ldap' || $authMethod === 'saml2' || $authMethod === 'openid') { + $validationRules['external_auth_id'] = ['required']; } $this->validate($request, $validationRules); @@ -93,25 +97,35 @@ class UserController extends Controller if ($authMethod === 'standard') { $user->password = bcrypt($request->get('password', Str::random(32))); - } elseif ($authMethod === 'ldap' || $authMethod === 'saml2') { + } elseif ($authMethod === 'ldap' || $authMethod === 'saml2' || $authMethod === 'openid') { $user->external_auth_id = $request->get('external_auth_id'); } $user->refreshSlug(); - $user->save(); - if ($sendInvite) { - $this->inviteService->sendInvitation($user); - } + DB::transaction(function () use ($user, $sendInvite, $request) { + $user->save(); - if ($request->filled('roles')) { - $roles = $request->get('roles'); - $this->userRepo->setUserRoles($user, $roles); - } + // Save user-specific settings + if ($request->filled('setting')) { + foreach ($request->get('setting') as $key => $value) { + setting()->putUser($user, $key, $value); + } + } + + if ($sendInvite) { + $this->inviteService->sendInvitation($user); + } + + if ($request->filled('roles')) { + $roles = $request->get('roles'); + $this->userRepo->setUserRoles($user, $roles); + } - $this->userRepo->downloadAndAssignUserAvatar($user); + $this->userRepo->downloadAndAssignUserAvatar($user); - $this->logActivity(ActivityType::USER_CREATE, $user); + $this->logActivity(ActivityType::USER_CREATE, $user); + }); return redirect('/settings/users'); } @@ -155,12 +169,12 @@ class UserController extends Controller $this->checkPermissionOrCurrentUser('users-manage', $id); $this->validate($request, [ - 'name' => 'min:2', - 'email' => 'min:2|email|unique:users,email,' . $id, - 'password' => 'min:6|required_with:password_confirm', - 'password-confirm' => 'same:password|required_with:password', - 'setting' => 'array', - 'profile_image' => 'nullable|' . $this->getImageValidationRules(), + 'name' => ['min:2'], + 'email' => ['min:2', 'email', 'unique:users,email,' . $id], + 'password' => ['required_with:password_confirm', Password::default()], + 'password-confirm' => ['same:password', 'required_with:password'], + 'setting' => ['array'], + 'profile_image' => array_merge(['nullable'], $this->getImageValidationRules()), ]); $user = $this->userRepo->getById($id); @@ -193,7 +207,7 @@ class UserController extends Controller $user->external_auth_id = $request->get('external_auth_id'); } - // Save an user-specific settings + // Save user-specific settings if ($request->filled('setting')) { foreach ($request->get('setting') as $key => $value) { setting()->putUser($user, $key, $value);