proxy_validator.dart 1.83 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 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
// 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() ??
      '';

  @override
  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>['127.0.0.1', 'localhost']) {
          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,
    );
  }
}