fix(auth): enforce password and agent role boundaries
This commit is contained in:
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Api\V1\Player;
|
||||
use App\Support\ApiResponse;
|
||||
use App\Services\AuditLogger;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Services\Player\PlayerPasswordService;
|
||||
use App\Http\Requests\Player\PlayerPasswordUpdateRequest;
|
||||
@@ -19,22 +20,26 @@ final class PlayerPasswordUpdateController extends Controller
|
||||
$player = $request->lotteryPlayer();
|
||||
abort_if($player === null, 500, 'lottery_player missing');
|
||||
|
||||
$updated = $passwords->change(
|
||||
$player,
|
||||
(string) $request->validated('current_password'),
|
||||
(string) $request->validated('password'),
|
||||
);
|
||||
$updated = DB::transaction(function () use ($passwords, $player, $request) {
|
||||
$updated = $passwords->change(
|
||||
$player,
|
||||
(string) $request->validated('current_password'),
|
||||
(string) $request->validated('password'),
|
||||
);
|
||||
|
||||
AuditLogger::recordForPlayer(
|
||||
$updated,
|
||||
$request,
|
||||
'player_account',
|
||||
'change_password',
|
||||
'player',
|
||||
(string) $updated->id,
|
||||
null,
|
||||
['native_token_version' => (int) $updated->native_token_version],
|
||||
);
|
||||
AuditLogger::recordForPlayer(
|
||||
$updated,
|
||||
$request,
|
||||
'player_account',
|
||||
'change_password',
|
||||
'player',
|
||||
(string) $updated->id,
|
||||
null,
|
||||
['native_token_version' => (int) $updated->native_token_version],
|
||||
);
|
||||
|
||||
return $updated;
|
||||
});
|
||||
|
||||
return ApiResponse::success(['password_changed' => true], request: $request);
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ use Illuminate\Cache\RateLimiting\Limit;
|
||||
use Illuminate\Support\Facades\RateLimiter;
|
||||
use App\Services\Wallet\MainSiteWalletGateway;
|
||||
use App\Services\Wallet\HttpMainSiteWalletGateway;
|
||||
use App\Services\Wallet\StubMainSiteWalletGateway;
|
||||
|
||||
final class AppServiceProvider extends ServiceProvider
|
||||
{
|
||||
@@ -81,5 +80,15 @@ final class AppServiceProvider extends ServiceProvider
|
||||
|
||||
return Limit::perMinute(15)->by($request->ip());
|
||||
});
|
||||
|
||||
RateLimiter::for('player-password-change', function (Request $request) {
|
||||
if ((bool) env('LOTTERY_E2E', false)) {
|
||||
return Limit::none();
|
||||
}
|
||||
|
||||
$playerId = $request->lotteryPlayer()?->getKey();
|
||||
|
||||
return Limit::perMinute(5)->by(($playerId ?? 'guest').'|'.$request->ip());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,9 @@ final class InvalidPlatformAgentRoleCleanup
|
||||
->whereNotExists(static function ($query): void {
|
||||
$query->selectRaw('1')
|
||||
->from('admin_user_agents as cleanup_uag')
|
||||
->whereColumn('cleanup_uag.admin_user_id', 'admin_user_site_roles.admin_user_id');
|
||||
->join('agent_nodes as cleanup_node', 'cleanup_node.id', '=', 'cleanup_uag.agent_node_id')
|
||||
->whereColumn('cleanup_uag.admin_user_id', 'admin_user_site_roles.admin_user_id')
|
||||
->whereColumn('cleanup_node.admin_site_id', 'admin_user_site_roles.site_id');
|
||||
})
|
||||
->delete();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user