- Turnstile (App\Support\Turnstile, middleware turnstile) cho login admin và login/register/forgot/reset của khách; cấu hình ở setting key=turnstile, secret mã hoá SignRSA. - Menu sidebar khách (setting client_menu) và nút tắt topbar (setting client_quick_links) do admin sửa qua administrator/client-menu[/quick-links], khách đọc v1/setting/menu, v1/setting/quick-links. - v1/setting và settings/public chỉ trả whitelist PublicSetting::FIELDS (trước đây lộ bot_token, inet_api_key). - Cài đặt tài khoản khách (preferences), rate limit theo IP cho register/resend-verify. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
73 lines
2.4 KiB
PHP
73 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api\Client\Concerns;
|
|
|
|
use App\Http\Requests\Api\Client\ClientPreferencesRequest;
|
|
use App\Http\Resources\Api\Client\ClientResource;
|
|
use App\Models\ActivityLog;
|
|
use Illuminate\Http\Request;
|
|
|
|
trait ManagesClientAccountSettings
|
|
{
|
|
public function loginHistory(Request $request)
|
|
{
|
|
$validated = $request->validate([
|
|
'page' => ['sometimes', 'integer', 'min:1'],
|
|
'per_page' => ['sometimes', 'integer', 'in:10,20,50'],
|
|
]);
|
|
$customer = auth('client')->user();
|
|
|
|
$history = ActivityLog::query()
|
|
->where('log_name', 'auth')
|
|
->where('causer_type', 'customer')
|
|
->where('causer_id', $customer->id)
|
|
->whereIn('event', ['login', 'logout'])
|
|
->latest('created_at')
|
|
->paginate($validated['per_page'] ?? 10);
|
|
|
|
return response()->json([
|
|
'error' => false,
|
|
'data' => collect($history->items())->map(fn (ActivityLog $log) => [
|
|
'id' => $log->id,
|
|
'event' => $log->event,
|
|
'ip_address' => $log->ip_address,
|
|
'user_agent' => $log->user_agent,
|
|
'created_at' => $log->created_at?->toIso8601String(),
|
|
])->values(),
|
|
'meta' => [
|
|
'current_page' => $history->currentPage(),
|
|
'per_page' => $history->perPage(),
|
|
'total' => $history->total(),
|
|
'last_page' => $history->lastPage(),
|
|
],
|
|
]);
|
|
}
|
|
|
|
public function updatePreferences(ClientPreferencesRequest $request)
|
|
{
|
|
$customer = auth('client')->user();
|
|
$oldValues = $customer->only(['email_marketing', 'receive_deposit']);
|
|
|
|
$customer->fill($request->validated());
|
|
$dirty = $customer->getDirty();
|
|
$customer->save();
|
|
|
|
if ($dirty !== []) {
|
|
$this->activityLogger->log(
|
|
event: 'preferences_update',
|
|
logName: 'Customer',
|
|
description: "Customer {$customer->email} cập nhật tuỳ chọn tài khoản",
|
|
subject: $customer,
|
|
oldValues: array_intersect_key($oldValues, $dirty),
|
|
newValues: $dirty,
|
|
);
|
|
}
|
|
|
|
return response()->json([
|
|
'error' => false,
|
|
'message' => 'Đã lưu cài đặt tài khoản.',
|
|
'data' => ['client' => new ClientResource($customer->fresh())],
|
|
]);
|
|
}
|
|
}
|