import 'package:http/http.dart' as http; import 'package:http/io_client.dart'; import '../../model/endpoint_data.dart'; import '../errors/network_exception.dart'; import 'demo_mode.dart'; /// Demo sessions carry made-up credentials. Every request they sent to the /// real Nextcloud would count as a failed login there and, in bulk, trip the /// server's brute-force throttle for the whole IP (HTTP 429 for everyone /// behind it). Installed app-wide via [http.runWithClient]. class DemoHttpClient extends http.BaseClient { final http.Client _inner = IOClient(); @override Future send(http.BaseRequest request) { if (DemoMode.active && isNextcloudHost(request.url)) { return Future.error(NetworkException.demoBlocked(request.url)); } return _inner.send(request); } @override void close() => _inner.close(); static bool isNextcloudHost(Uri url) => url.host == EndpointData().nextcloud().domain; }