false, 'blocked_countries' => [], 'allowed_countries' => [], 'mode' => 'blacklist', // 'blacklist' or 'whitelist' 'vpn_block' => false, 'vpn_provider' => 'none', // 'none', 'ipqualityscore', 'proxycheck' 'vpn_api_key' => '', 'block_message' => 'This service is not available in your region.', 'redirect_url' => '', ]; public function show() { $saved = AppSetting::get(self::KEY, []); $settings = array_merge($this->defaults, is_array($saved) ? $saved : []); return Inertia::render('Admin/GeoBlock', [ 'settings' => $settings, ]); } public function save(Request $request) { $data = $request->validate([ 'enabled' => 'boolean', 'mode' => 'required|in:blacklist,whitelist', 'blocked_countries' => 'array', 'blocked_countries.*' => 'string|size:2', 'allowed_countries' => 'array', 'allowed_countries.*' => 'string|size:2', 'vpn_block' => 'boolean', 'vpn_provider' => 'required|in:none,ipqualityscore,proxycheck', 'vpn_api_key' => 'nullable|string|max:200', 'block_message' => 'required|string|max:500', 'redirect_url' => 'nullable|url|max:500', ]); AppSetting::put(self::KEY, $data); return back()->with('success', 'GeoBlock settings saved.'); } }