Changeset View
Changeset View
Standalone View
Standalone View
src/app/Http/Controllers/API/V4/UsersController.php
Show All 10 Lines | |||||
use Illuminate\Http\Request; | use Illuminate\Http\Request; | ||||
use Illuminate\Support\Facades\Auth; | use Illuminate\Support\Facades\Auth; | ||||
use Illuminate\Support\Facades\DB; | use Illuminate\Support\Facades\DB; | ||||
use Illuminate\Support\Facades\Validator; | use Illuminate\Support\Facades\Validator; | ||||
use Illuminate\Support\Str; | use Illuminate\Support\Str; | ||||
class UsersController extends Controller | class UsersController extends Controller | ||||
{ | { | ||||
// List of user settings keys available for modification in UI | |||||
public const USER_SETTINGS = [ | |||||
'billing_address', | |||||
'country', | |||||
'currency', | |||||
'external_email', | |||||
'first_name', | |||||
'last_name', | |||||
'organization', | |||||
'phone', | |||||
]; | |||||
/** | /** | ||||
* Delete a user. | * Delete a user. | ||||
* | * | ||||
* @param int $id User identifier | * @param int $id User identifier | ||||
* | * | ||||
* @return \Illuminate\Http\JsonResponse The response | * @return \Illuminate\Http\JsonResponse The response | ||||
*/ | */ | ||||
public function destroy($id) | public function destroy($id) | ||||
▲ Show 20 Lines • Show All 146 Lines • ▼ Show 20 Lines | public function store(Request $request) | ||||
return response()->json(['status' => 'error', 'errors' => $errors], 422); | return response()->json(['status' => 'error', 'errors' => $errors], 422); | ||||
} | } | ||||
if ($package->isDomain()) { | if ($package->isDomain()) { | ||||
$errors = ['package' => \trans('validation.packageinvalid')]; | $errors = ['package' => \trans('validation.packageinvalid')]; | ||||
return response()->json(['status' => 'error', 'errors' => $errors], 422); | return response()->json(['status' => 'error', 'errors' => $errors], 422); | ||||
} | } | ||||
$user_name = !empty($settings['first_name']) ? $settings['first_name'] : ''; | |||||
if (!empty($settings['last_name'])) { | |||||
$user_name .= ' ' . $settings['last_name']; | |||||
} | |||||
DB::beginTransaction(); | DB::beginTransaction(); | ||||
// Create user record | // Create user record | ||||
$user = User::create([ | $user = User::create([ | ||||
'name' => $user_name, | |||||
'email' => $request->email, | 'email' => $request->email, | ||||
'password' => $request->password, | 'password' => $request->password, | ||||
]); | ]); | ||||
$owner->assignPackage($package, $user); | $owner->assignPackage($package, $user); | ||||
if (!empty($settings)) { | if (!empty($settings)) { | ||||
$user->setSettings($settings); | $user->setSettings($settings); | ||||
▲ Show 20 Lines • Show All 138 Lines • ▼ Show 20 Lines | // 'cost' => $ent->cost, | ||||
* | * | ||||
* @return array Response data | * @return array Response data | ||||
*/ | */ | ||||
public static function userResponse(User $user): array | public static function userResponse(User $user): array | ||||
{ | { | ||||
$response = $user->toArray(); | $response = $user->toArray(); | ||||
// Settings | // Settings | ||||
// TODO: It might be reasonable to limit the list of settings here to these | |||||
// that are safe and are used in the UI | |||||
$response['settings'] = []; | $response['settings'] = []; | ||||
foreach ($user->settings as $item) { | foreach ($user->settings()->whereIn('key', self::USER_SETTINGS)->get() as $item) { | ||||
$response['settings'][$item->key] = $item->value; | $response['settings'][$item->key] = $item->value; | ||||
} | } | ||||
// Aliases | // Aliases | ||||
$response['aliases'] = []; | $response['aliases'] = []; | ||||
foreach ($user->aliases as $item) { | foreach ($user->aliases as $item) { | ||||
$response['aliases'][] = $item->alias; | $response['aliases'][] = $item->alias; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | // 'cost' => $ent->cost, | ||||
* | * | ||||
* @return \Illuminate\Http\JsonResponse The response on error | * @return \Illuminate\Http\JsonResponse The response on error | ||||
*/ | */ | ||||
protected function validateUserRequest(Request $request, $user, &$settings = []) | protected function validateUserRequest(Request $request, $user, &$settings = []) | ||||
{ | { | ||||
$rules = [ | $rules = [ | ||||
'external_email' => 'nullable|email', | 'external_email' => 'nullable|email', | ||||
'phone' => 'string|nullable|max:64|regex:/^[0-9+() -]+$/', | 'phone' => 'string|nullable|max:64|regex:/^[0-9+() -]+$/', | ||||
'first_name' => 'string|nullable|max:512', | 'first_name' => 'string|nullable|max:128', | ||||
'last_name' => 'string|nullable|max:512', | 'last_name' => 'string|nullable|max:128', | ||||
'organization' => 'string|nullable|max:512', | |||||
'billing_address' => 'string|nullable|max:1024', | 'billing_address' => 'string|nullable|max:1024', | ||||
'country' => 'string|nullable|alpha|size:2', | 'country' => 'string|nullable|alpha|size:2', | ||||
'currency' => 'string|nullable|alpha|size:3', | 'currency' => 'string|nullable|alpha|size:3', | ||||
'aliases' => 'array|nullable', | 'aliases' => 'array|nullable', | ||||
]; | ]; | ||||
if (empty($user) || !empty($request->password) || !empty($request->password_confirmation)) { | if (empty($user) || !empty($request->password) || !empty($request->password_confirmation)) { | ||||
$rules['password'] = 'required|min:4|max:2048|confirmed'; | $rules['password'] = 'required|min:4|max:2048|confirmed'; | ||||
▲ Show 20 Lines • Show All 64 Lines • Show Last 20 Lines |