blob: 211a9d5833ca5dbde66808993b0d5a3b899feb00 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:async';
import 'base/platform.dart';
import 'doctor.dart';
class ProxyValidator extends DoctorValidator {
ProxyValidator() : super('Proxy Configuration');
static bool get shouldShow => _getEnv('HTTP_PROXY').isNotEmpty;
final String _httpProxy = _getEnv('HTTP_PROXY');
final String _noProxy = _getEnv('NO_PROXY');
/// Gets a trimmed, non-null environment variable. If the variable is not set
/// an empty string will be returned. Checks for the lowercase version of the
/// environment variable first, then uppercase to match Dart's HTTP implementation.
static String _getEnv(String key) =>
platform.environment[key.toLowerCase()]?.trim() ??
platform.environment[key.toUpperCase()]?.trim() ??
Future<ValidationResult> validate() async {
final List<ValidationMessage> messages = <ValidationMessage>[];
if (_httpProxy.isNotEmpty) {
messages.add(ValidationMessage('HTTP_PROXY is set'));
if (_noProxy.isEmpty) {
messages.add(ValidationMessage.hint('NO_PROXY is not set'));
} else {
messages.add(ValidationMessage('NO_PROXY is $_noProxy'));
for (String host in const <String>['', 'localhost']) {
final ValidationMessage msg = _noProxy.contains(host)
? ValidationMessage('NO_PROXY contains $host')
: ValidationMessage.hint('NO_PROXY does not contain $host');
final bool hasIssues =
messages.any((ValidationMessage msg) => msg.isHint || msg.isHint);
return ValidationResult(
hasIssues ? ValidationType.partial : ValidationType.installed,