Changeset View
Changeset View
Standalone View
Standalone View
src/app/Http/Controllers/API/V4/SharedFoldersController.php
Show First 20 Lines • Show All 194 Lines • ▼ Show 20 Lines | class SharedFoldersController extends RelationController | ||||
* | * | ||||
* @return \Illuminate\Http\JsonResponse|null The error response on error | * @return \Illuminate\Http\JsonResponse|null The error response on error | ||||
*/ | */ | ||||
protected function validateFolderRequest(Request $request, $folder, $owner) | protected function validateFolderRequest(Request $request, $folder, $owner) | ||||
{ | { | ||||
$errors = []; | $errors = []; | ||||
if (empty($folder)) { | if (empty($folder)) { | ||||
$name = $request->input('name'); | |||||
$domain = $request->input('domain'); | $domain = $request->input('domain'); | ||||
$rules = [ | $rules = [ | ||||
'name' => ['required', 'string', new SharedFolderName($owner, $domain)], | 'name' => ['required', 'string', new SharedFolderName($owner, $domain)], | ||||
'type' => ['required', 'string', new SharedFolderType()], | 'type' => ['required', 'string', new SharedFolderType()], | ||||
]; | ]; | ||||
} else { | } else { | ||||
// On update validate the folder name (if changed) | // On update validate the folder name (if changed) | ||||
$name = $request->input('name'); | $name = $request->input('name'); | ||||
if ($name !== null && $name != $folder->name) { | |||||
$domain = explode('@', $folder->email, 2)[1]; | $domain = explode('@', $folder->email, 2)[1]; | ||||
if ($name !== null && $name != $folder->name) { | |||||
$rules = ['name' => ['required', 'string', new SharedFolderName($owner, $domain)]]; | $rules = ['name' => ['required', 'string', new SharedFolderName($owner, $domain)]]; | ||||
} | } | ||||
} | } | ||||
if (!empty($rules)) { | if (!empty($rules)) { | ||||
$v = Validator::make($request->all(), $rules); | $v = Validator::make($request->all(), $rules); | ||||
if ($v->fails()) { | if ($v->fails()) { | ||||
Show All 11 Lines | protected function validateFolderRequest(Request $request, $folder, $owner) | ||||
// Alias cannot be the same as the email address | // Alias cannot be the same as the email address | ||||
if (!empty($folder) && Str::lower($alias) == Str::lower($folder->email)) { | if (!empty($folder) && Str::lower($alias) == Str::lower($folder->email)) { | ||||
continue; | continue; | ||||
} | } | ||||
// validate new aliases | // validate new aliases | ||||
if ( | if ( | ||||
!in_array($alias, $existing_aliases) | !in_array($alias, $existing_aliases) | ||||
&& ($error = UsersController::validateAlias($alias, $owner)) | && ($error = self::validateAlias($alias, $owner, $name, $domain)) | ||||
) { | ) { | ||||
if (!isset($errors['aliases'])) { | if (!isset($errors['aliases'])) { | ||||
$errors['aliases'] = []; | $errors['aliases'] = []; | ||||
} | } | ||||
$errors['aliases'][$idx] = $error; | $errors['aliases'][$idx] = $error; | ||||
continue; | continue; | ||||
} | } | ||||
$aliases[] = $alias; | $aliases[] = $alias; | ||||
} | } | ||||
} | } | ||||
$request->aliases = $aliases; | $request->aliases = $aliases; | ||||
} | } | ||||
if (!empty($errors)) { | if (!empty($errors)) { | ||||
return response()->json(['status' => 'error', 'errors' => $errors], 422); | return response()->json(['status' => 'error', 'errors' => $errors], 422); | ||||
} | } | ||||
return null; | return null; | ||||
} | } | ||||
/** | |||||
* Email address validation for use as a shared folder alias. | |||||
* | |||||
* @param string $alias Email address | |||||
* @param \App\User $owner The account owner | |||||
* @param string $folderName Folder name | |||||
* @param string $domain Folder domain | |||||
* | |||||
* @return ?string Error message on validation error | |||||
*/ | |||||
public static function validateAlias(string $alias, \App\User $owner, string $folderName, string $domain): ?string | |||||
{ | |||||
$lmtp_alias = "shared+shared/{$folderName}@{$domain}"; | |||||
if ($alias === $lmtp_alias) { | |||||
return null; | |||||
} | |||||
return UsersController::validateAlias($alias, $owner); | |||||
} | |||||
} | } |