proxy_validator.dart 1.87 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4 5 6 7
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'dart:async';

import 'doctor.dart';
8
import 'globals.dart' as globals;
9 10 11 12 13 14 15 16 17 18 19 20 21

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) =>
22 23
      globals.platform.environment[key.toLowerCase()]?.trim() ??
      globals.platform.environment[key.toUpperCase()]?.trim() ??
24 25 26 27 28 29 30
      '';

  @override
  Future<ValidationResult> validate() async {
    final List<ValidationMessage> messages = <ValidationMessage>[];

    if (_httpProxy.isNotEmpty) {
31
      messages.add(const ValidationMessage('HTTP_PROXY is set'));
32 33

      if (_noProxy.isEmpty) {
34
        messages.add(const ValidationMessage.hint('NO_PROXY is not set'));
35 36
      } else {
        messages.add(ValidationMessage('NO_PROXY is $_noProxy'));
37
        for (final String host in const <String>['127.0.0.1', 'localhost']) {
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
          final ValidationMessage msg = _noProxy.contains(host)
              ? ValidationMessage('NO_PROXY contains $host')
              : ValidationMessage.hint('NO_PROXY does not contain $host');

          messages.add(msg);
        }
      }
    }

    final bool hasIssues =
        messages.any((ValidationMessage msg) => msg.isHint || msg.isHint);

    return ValidationResult(
      hasIssues ? ValidationType.partial : ValidationType.installed,
      messages,
    );
  }
}