Class: WifiWand::Platforms::Mac::NetworkIdentityReader

Inherits:
Object
  • Object
show all
Includes:
ConnectedNetworkFlagContext
Defined in:
lib/wifi_wand/platforms/mac/network_identity_reader.rb

Constant Summary collapse

NO_CONNECTED_NETWORK =
Object.new.freeze

Constants included from ConnectedNetworkFlagContext

ConnectedNetworkFlagContext::FLAG_CONTEXTS_KEY

Instance Method Summary collapse

Constructor Details

#initialize(helper_client_provider:, command_runner:, system_profiler_wifi_data_reader:, system_profiler_wifi_data_cache_runner:, wifi_power_reader:, wifi_interface_provider:, default_interface_provider:, ipv4_addresses_reader:, ipv6_addresses_reader:) ⇒ NetworkIdentityReader

Returns a new instance of NetworkIdentityReader.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/wifi_wand/platforms/mac/network_identity_reader.rb', line 18

def initialize(
  helper_client_provider:,
  command_runner:,
  system_profiler_wifi_data_reader:,
  system_profiler_wifi_data_cache_runner:,
  wifi_power_reader:,
  wifi_interface_provider:,
  default_interface_provider:,
  ipv4_addresses_reader:,
  ipv6_addresses_reader:
)
  @helper_client_provider = helper_client_provider
  @command_runner = command_runner
  @system_profiler_wifi_data_reader = system_profiler_wifi_data_reader
  @system_profiler_wifi_data_cache_runner = system_profiler_wifi_data_cache_runner
  @wifi_power_reader = wifi_power_reader
  @wifi_interface_provider = wifi_interface_provider
  @default_interface_provider = default_interface_provider
  @ipv4_addresses_reader = ipv4_addresses_reader
  @ipv6_addresses_reader = ipv6_addresses_reader
end

Instance Method Details

#associated?Boolean

Returns:

  • (Boolean)


40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/wifi_wand/platforms/mac/network_identity_reader.rb', line 40

def associated?
  with_system_profiler_wifi_data_cache_scope do
    return false unless wifi_on?

    result = helper_client.connected_network_name
    return true if result.payload && !placeholder_network_name?(result.payload)
    return false if result.not_connected?

    interface_associated_in_system_profiler_wifi_data?(system_profiler_wifi_interface_data)
  end
rescue WifiWand::Error
  false
end

#connected?Boolean

Returns:

  • (Boolean)


54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/wifi_wand/platforms/mac/network_identity_reader.rb', line 54

def connected?
  with_system_profiler_wifi_data_cache_scope do
    return false unless wifi_on?

    result = helper_client.connected_network_name
    return true if result.payload && !placeholder_network_name?(result.payload)
    return false if result.not_connected?

    interface_data = system_profiler_wifi_interface_data
    return true if interface_associated_in_system_profiler_wifi_data?(interface_data)

    associated_without_ssid?
  end
end

#connected_network_nameObject

Callers reach this only through Mac::Model#_connected_network_name, which BaseModel#connected_network_name already guards with a wifi_on? check.



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/wifi_wand/platforms/mac/network_identity_reader.rb', line 71

def connected_network_name
  with_connected_network_flag_scope do
    with_system_profiler_wifi_data_cache_scope do
      network_name = connected_network_name_raw
      return network_name if network_name
      return nil if connected_network_authoritatively_disconnected?

      if connected? && network_identity_redacted?
        raise MacOsRedactionError.new(
          operation_description: 'Current WiFi network queries',
          reason:                network_identity_redaction_reason
        )
      end

      nil
    end
  end
end

#connected_network_name_rawObject



90
91
92
93
94
95
# File 'lib/wifi_wand/platforms/mac/network_identity_reader.rb', line 90

def connected_network_name_raw
  network_name = connected_network_name_candidate
  return mark_connected_network_authoritatively_disconnected if no_connected_network?(network_name)

  network_name
end

#network_identity_redacted?Boolean

Returns:

  • (Boolean)


124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/wifi_wand/platforms/mac/network_identity_reader.rb', line 124

def network_identity_redacted?
  return true if connected_network_fallback_identity_redacted?

  with_system_profiler_wifi_data_cache_scope do
    result = helper_client.connected_network_name
    result.location_services_error? ||
      helper_placeholder_network_name?(result.payload) ||
      fallback_network_identity_missing?
  end
rescue WifiWand::Error
  false
end

#network_identity_redaction_reasonObject



137
138
139
140
141
142
# File 'lib/wifi_wand/platforms/mac/network_identity_reader.rb', line 137

def network_identity_redaction_reason
  return nil unless network_identity_redacted?

  'macOS is redacting WiFi network names until Location Services access is granted ' \
    'to wifiwand-helper, the macOS helper application'
end