51
51
import json
52
52
import secrets
53
53
import traceback
54
- from typing import Optional , Set
54
+ from typing import Optional , Set , Tuple
55
55
from urllib .parse import urlparse
56
56
from aiohttp import web
57
57
from aiohttp .hdrs import METH_GET
@@ -255,36 +255,11 @@ async def async_step_auth_config(
255
255
self ._cc_network_detect_addr = user_input .get (
256
256
'network_detect_addr' , self ._cc_network_detect_addr )
257
257
258
- ip_list : list [str ] = []
259
- url_list : list [str ] = []
260
- if self ._cc_network_detect_addr :
261
- invalid_list : list [str ] = []
262
- for addr in self ._cc_network_detect_addr .split (',' ):
263
- addr = addr .strip ()
264
- if not addr :
265
- continue
266
- # pylint: disable=broad-exception-caught
267
- try :
268
- ipaddress .ip_address (addr )
269
- ip_list .append (addr )
270
- continue
271
- except Exception :
272
- pass
273
- try :
274
- result = urlparse (addr )
275
- if (
276
- result .netloc
277
- and result .scheme .startswith ('http' )
278
- ):
279
- url_list .append (addr )
280
- continue
281
- except Exception :
282
- pass
283
- invalid_list .append (addr )
284
- if invalid_list :
285
- return await self .__show_auth_config_form (
286
- reason = 'invalid_network_addr' )
287
- network_detect_addr : dict = {}
258
+ ip_list , url_list , invalid_list = _handle_network_detect_addr (
259
+ addr_str = self ._cc_network_detect_addr )
260
+ if invalid_list :
261
+ return await self .__show_auth_config_form (
262
+ reason = 'invalid_network_addr' )
288
263
if ip_list or url_list :
289
264
if ip_list and not await self ._miot_network .ping_multi_async (
290
265
ip_list = ip_list ):
@@ -294,13 +269,12 @@ async def async_step_auth_config(
294
269
url_list = url_list ):
295
270
return await self .__show_auth_config_form (
296
271
reason = 'invalid_http_addr' )
297
- network_detect_addr = {
298
- 'ip' : ip_list , 'url' : url_list }
299
272
else :
300
273
if not await self ._miot_network .get_network_status_async ():
301
274
return await self .__show_auth_config_form (
302
275
reason = 'invalid_default_addr' )
303
- network_detect_addr = {'ip' : [], 'url' : []}
276
+ network_detect_addr = {
277
+ 'ip' : ip_list , 'url' : url_list }
304
278
if await self ._miot_storage .update_user_config_async (
305
279
uid = 'global_config' , cloud_server = 'all' , config = {
306
280
'network_detect_addr' : network_detect_addr }):
@@ -1692,36 +1666,11 @@ async def async_step_network_detect_config(
1692
1666
self ._cc_network_detect_addr = user_input .get (
1693
1667
'network_detect_addr' , self ._cc_network_detect_addr )
1694
1668
1695
- ip_list : list [str ] = []
1696
- url_list : list [str ] = []
1697
- if self ._cc_network_detect_addr :
1698
- invalid_list : list [str ] = []
1699
- for addr in self ._cc_network_detect_addr .split (',' ):
1700
- addr = addr .strip ()
1701
- if not addr :
1702
- continue
1703
- # pylint: disable=broad-exception-caught
1704
- try :
1705
- ipaddress .ip_address (addr )
1706
- ip_list .append (addr )
1707
- continue
1708
- except Exception :
1709
- pass
1710
- try :
1711
- result = urlparse (addr )
1712
- if (
1713
- result .netloc
1714
- and result .scheme .startswith ('http' )
1715
- ):
1716
- url_list .append (addr )
1717
- continue
1718
- except Exception :
1719
- pass
1720
- invalid_list .append (addr )
1721
- if invalid_list :
1722
- return await self .__show_network_detect_config_form (
1723
- reason = 'invalid_network_addr' )
1724
- network_detect_addr : dict = {}
1669
+ ip_list , url_list , invalid_list = _handle_network_detect_addr (
1670
+ addr_str = self ._cc_network_detect_addr )
1671
+ if invalid_list :
1672
+ return await self .__show_network_detect_config_form (
1673
+ reason = 'invalid_network_addr' )
1725
1674
if ip_list or url_list :
1726
1675
if ip_list and not await self ._miot_network .ping_multi_async (
1727
1676
ip_list = ip_list ):
@@ -1731,13 +1680,11 @@ async def async_step_network_detect_config(
1731
1680
url_list = url_list ):
1732
1681
return await self .__show_network_detect_config_form (
1733
1682
reason = 'invalid_http_addr' )
1734
- network_detect_addr = {
1735
- 'ip' : ip_list , 'url' : url_list }
1736
1683
else :
1737
1684
if not await self ._miot_network .get_network_status_async ():
1738
1685
return await self .__show_network_detect_config_form (
1739
1686
reason = 'invalid_default_addr' )
1740
- network_detect_addr = {'ip' : [] , 'url' : [] }
1687
+ network_detect_addr : dict = {'ip' : ip_list , 'url' : url_list }
1741
1688
1742
1689
if await self ._miot_storage .update_user_config_async (
1743
1690
uid = 'global_config' , cloud_server = 'all' , config = {
@@ -1932,3 +1879,35 @@ def _handle_devices_filter(
1932
1879
return {}
1933
1880
return {
1934
1881
did : info for did , info in devices .items () if did in include_set }
1882
+
1883
+
1884
+ def _handle_network_detect_addr (
1885
+ addr_str : str
1886
+ ) -> Tuple [list [str ], list [str ], list [str ]]:
1887
+ ip_list : list [str ] = []
1888
+ url_list : list [str ] = []
1889
+ invalid_list : list [str ] = []
1890
+ if addr_str :
1891
+ for addr in addr_str .split (',' ):
1892
+ addr = addr .strip ()
1893
+ if not addr :
1894
+ continue
1895
+ # pylint: disable=broad-exception-caught
1896
+ try :
1897
+ ipaddress .ip_address (addr )
1898
+ ip_list .append (addr )
1899
+ continue
1900
+ except Exception :
1901
+ pass
1902
+ try :
1903
+ result = urlparse (addr )
1904
+ if (
1905
+ result .netloc
1906
+ and result .scheme .startswith ('http' )
1907
+ ):
1908
+ url_list .append (addr )
1909
+ continue
1910
+ except Exception :
1911
+ pass
1912
+ invalid_list .append (addr )
1913
+ return ip_list , url_list , invalid_list
0 commit comments