tplinkrouterc6u 5.12.0__tar.gz → 5.12.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/PKG-INFO +9 -3
  2. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/README.md +8 -2
  3. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/setup.py +1 -1
  4. tplinkrouterc6u-5.12.2/test/test_client_mr_200.py +43 -0
  5. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/client/c6u.py +3 -1
  6. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/client/mr200.py +9 -9
  7. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u.egg-info/PKG-INFO +9 -3
  8. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u.egg-info/SOURCES.txt +1 -0
  9. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/LICENSE +0 -0
  10. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/setup.cfg +0 -0
  11. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/test/__init__.py +0 -0
  12. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/test/test_client_c1200.py +0 -0
  13. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/test/test_client_c6u.py +0 -0
  14. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/test/test_client_c80.py +0 -0
  15. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/test/test_client_deco.py +0 -0
  16. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/test/test_client_ex.py +0 -0
  17. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/test/test_client_mr.py +0 -0
  18. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/test/test_client_re330.py +0 -0
  19. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/test/test_client_wdr.py +0 -0
  20. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/test/test_client_xdr.py +0 -0
  21. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/__init__.py +0 -0
  22. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/client/__init__.py +0 -0
  23. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/client/c1200.py +0 -0
  24. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/client/c5400x.py +0 -0
  25. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/client/c80.py +0 -0
  26. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/client/deco.py +0 -0
  27. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/client/ex.py +0 -0
  28. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/client/mr.py +0 -0
  29. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/client/re330.py +0 -0
  30. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/client/vr.py +0 -0
  31. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/client/wdr.py +0 -0
  32. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/client/xdr.py +0 -0
  33. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/client_abstract.py +0 -0
  34. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/common/__init__.py +0 -0
  35. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/common/dataclass.py +0 -0
  36. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/common/encryption.py +0 -0
  37. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/common/exception.py +0 -0
  38. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/common/helper.py +0 -0
  39. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/common/package_enum.py +0 -0
  40. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u/provider.py +0 -0
  41. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u.egg-info/dependency_links.txt +0 -0
  42. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u.egg-info/requires.txt +0 -0
  43. {tplinkrouterc6u-5.12.0 → tplinkrouterc6u-5.12.2}/tplinkrouterc6u.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tplinkrouterc6u
3
- Version: 5.12.0
3
+ Version: 5.12.2
4
4
  Summary: TP-Link Router API (supports also Mercusys Router)
5
5
  Home-page: https://github.com/AlexandrErohin/TP-Link-Archer-C6U
6
6
  Author: Alex Erohin
@@ -49,7 +49,9 @@ Python package for API access and management for TP-Link and Mercusys Routers. S
49
49
  - [pycryptodome](https://pypi.org/project/pycryptodome/)
50
50
 
51
51
  ## Usage
52
- Enter the host & credentials used to log in to your router management page. Username is `admin` by default. But you may pass username as third parameter. Some routers have default username - `user`
52
+ - Enter the host & credentials used to log in to your router management page. Username is `admin` by default. But you may pass username as third parameter. Some routers have default username - `user`
53
+ - Use Local Password which is for Log In with Local Password. Login with TP-LINK ID doesnt work
54
+ - If you use `https` connection - You need to turn on "Local Management via HTTPS" (advanced->system->administration) in the router web UI
53
55
 
54
56
  ```python
55
57
  from tplinkrouterc6u import (
@@ -304,7 +306,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
304
306
  - [TP-LINK routers](#tplink)
305
307
  - [MERCUSYS routers](#mercusys)
306
308
  ### <a id="tplink">TP-LINK routers</a>
307
- - Archer A6 V2.0
309
+ - Archer A6 (2.0, 4.0)
308
310
  - Archer A7 V5
309
311
  - Archer A8 (1.0, 2.20)
310
312
  - Archer A9 V6
@@ -323,6 +325,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
323
325
  - Archer AX73 (V1, V2.0)
324
326
  - Archer AX75 V1
325
327
  - Archer AX90 V1.20
328
+ - Archer AX95 v1.0
326
329
  - Archer AXE75 V1
327
330
  - Archer AXE5400 v1.0
328
331
  - Archer AXE16000
@@ -330,6 +333,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
330
333
  - Archer AX3000 V1
331
334
  - Archer AX6000 V1
332
335
  - Archer AX11000 V1
336
+ - Archer BE220 v1.0
333
337
  - Archer BE230 v1.0
334
338
  - Archer BE400 v1.0
335
339
  - Archer BE550 v1.0
@@ -391,6 +395,8 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
391
395
  - VX420-G2h v1.1
392
396
  - VX800v v1
393
397
  - XC220-G3v v2.30
398
+ - RE305 4.0
399
+ - RE315 1.0
394
400
  - RE330 v1
395
401
  ### <a id="mercusys">MERCUSYS routers</a>
396
402
  - AC10 1.20
@@ -16,7 +16,9 @@ Python package for API access and management for TP-Link and Mercusys Routers. S
16
16
  - [pycryptodome](https://pypi.org/project/pycryptodome/)
17
17
 
18
18
  ## Usage
19
- Enter the host & credentials used to log in to your router management page. Username is `admin` by default. But you may pass username as third parameter. Some routers have default username - `user`
19
+ - Enter the host & credentials used to log in to your router management page. Username is `admin` by default. But you may pass username as third parameter. Some routers have default username - `user`
20
+ - Use Local Password which is for Log In with Local Password. Login with TP-LINK ID doesnt work
21
+ - If you use `https` connection - You need to turn on "Local Management via HTTPS" (advanced->system->administration) in the router web UI
20
22
 
21
23
  ```python
22
24
  from tplinkrouterc6u import (
@@ -271,7 +273,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
271
273
  - [TP-LINK routers](#tplink)
272
274
  - [MERCUSYS routers](#mercusys)
273
275
  ### <a id="tplink">TP-LINK routers</a>
274
- - Archer A6 V2.0
276
+ - Archer A6 (2.0, 4.0)
275
277
  - Archer A7 V5
276
278
  - Archer A8 (1.0, 2.20)
277
279
  - Archer A9 V6
@@ -290,6 +292,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
290
292
  - Archer AX73 (V1, V2.0)
291
293
  - Archer AX75 V1
292
294
  - Archer AX90 V1.20
295
+ - Archer AX95 v1.0
293
296
  - Archer AXE75 V1
294
297
  - Archer AXE5400 v1.0
295
298
  - Archer AXE16000
@@ -297,6 +300,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
297
300
  - Archer AX3000 V1
298
301
  - Archer AX6000 V1
299
302
  - Archer AX11000 V1
303
+ - Archer BE220 v1.0
300
304
  - Archer BE230 v1.0
301
305
  - Archer BE400 v1.0
302
306
  - Archer BE550 v1.0
@@ -358,6 +362,8 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
358
362
  - VX420-G2h v1.1
359
363
  - VX800v v1
360
364
  - XC220-G3v v2.30
365
+ - RE305 4.0
366
+ - RE315 1.0
361
367
  - RE330 v1
362
368
  ### <a id="mercusys">MERCUSYS routers</a>
363
369
  - AC10 1.20
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
5
5
 
6
6
  setuptools.setup(
7
7
  name="tplinkrouterc6u",
8
- version="5.12.0",
8
+ version="5.12.2",
9
9
  author="Alex Erohin",
10
10
  author_email="alexanderErohin@yandex.ru",
11
11
  description="TP-Link Router API (supports also Mercusys Router)",
@@ -0,0 +1,43 @@
1
+ from unittest import main, TestCase
2
+ from unittest.mock import patch, MagicMock
3
+ from requests import Session
4
+ from tplinkrouterc6u import TPLinkMR200Client
5
+
6
+
7
+ class TestTPLinkMR200Client(TestCase):
8
+ def setUp(self):
9
+ self.obj = TPLinkMR200Client('', '')
10
+
11
+ def test_supports_false(self):
12
+ responses = [
13
+ 'var param1="0x1A"\nvar param2="0x2B"\nignored line\n',
14
+ '404',
15
+ 'var nn="dfgdfg"\nvar ee="0x2B"\n'
16
+ ]
17
+
18
+ fake_responses = []
19
+ for text in responses:
20
+ r = MagicMock()
21
+ r.text = text
22
+ fake_responses.append(r)
23
+
24
+ with patch.object(Session, "get", side_effect=fake_responses):
25
+ for _ in range(len(fake_responses)):
26
+ result = self.obj.supports()
27
+ self.assertFalse(result)
28
+
29
+ def test_supports_true(self):
30
+ fake_response = MagicMock()
31
+ fake_response.text = (
32
+ 'var nn="0x1A"\n'
33
+ 'var ee="0x2B"\n'
34
+ )
35
+
36
+ with patch.object(Session, "get", return_value=fake_response):
37
+ result = self.obj.supports()
38
+
39
+ self.assertEqual(result, True)
40
+
41
+
42
+ if __name__ == '__main__':
43
+ main()
@@ -240,6 +240,7 @@ class TplinkBaseRouter(AbstractRouter, TplinkRequest):
240
240
  self._url_firmware = 'admin/firmware?form=upgrade&operation=read'
241
241
  self._url_ipv4_reservations = 'admin/dhcps?form=reservation&operation=load'
242
242
  self._url_ipv4_dhcp_leases = 'admin/dhcps?form=client&operation=load'
243
+ self._url_smart_network = 'admin/smart_network?form=game_accelerator&operation=loadDevice'
243
244
  self._url_openvpn = 'admin/openvpn?form=config&operation=read'
244
245
  self._url_pptpd = 'admin/pptpd?form=config&operation=read'
245
246
  self._url_vpnconn_openvpn = 'admin/vpnconn?form=config&operation=list&vpntype=openvpn'
@@ -341,7 +342,7 @@ class TplinkBaseRouter(AbstractRouter, TplinkRequest):
341
342
  smart_network = None
342
343
  if self._smart_network:
343
344
  try:
344
- smart_network = self.request('admin/smart_network?form=game_accelerator', 'operation=loadDevice')
345
+ smart_network = self.request(self._url_smart_network, 'operation=loadDevice')
345
346
  except Exception:
346
347
  self._smart_network = False
347
348
 
@@ -483,6 +484,7 @@ class TplinkRouter(TplinkEncryption, TplinkBaseRouter):
483
484
  self._url_firmware = 'admin/firmware?form=upgrade'
484
485
  self._url_ipv4_reservations = 'admin/dhcps?form=reservation'
485
486
  self._url_ipv4_dhcp_leases = 'admin/dhcps?form=client'
487
+ self._url_smart_network = 'admin/smart_network?form=game_accelerator'
486
488
  self._url_openvpn = 'admin/openvpn?form=config'
487
489
  self._url_pptpd = 'admin/pptpd?form=config'
488
490
  self._url_vpnconn_openvpn = 'admin/vpnconn?form=config'
@@ -22,12 +22,10 @@ class TPLinkMR200Client(TPLinkMRClient):
22
22
  return False
23
23
 
24
24
  def authorize(self) -> None:
25
- params = self.__get_params()
25
+ self.__get_params()
26
26
 
27
27
  # Construct the RSA public key manually using modulus (n) and exponent (e)
28
- n = int(params["nn"])
29
- e = int(params["ee"])
30
- pub_key = RSA.construct((n, e))
28
+ pub_key = RSA.construct((self._nn, self._ee))
31
29
 
32
30
  # Create an RSA cipher with PKCS#1 v1.5 padding (same as rsa.encrypt)
33
31
  cipher = PKCS1_v1_5.new(pub_key)
@@ -116,7 +114,7 @@ class TPLinkMR200Client(TPLinkMRClient):
116
114
 
117
115
  return status
118
116
 
119
- def __get_params(self, retry=False):
117
+ def __get_params(self, retry=False) -> None:
120
118
  self.req.headers = {'referer': f'{self.host}/', 'origin': self.host}
121
119
  try:
122
120
  r = self.req.get(f"{self.host}/cgi/getParm", timeout=5)
@@ -124,11 +122,13 @@ class TPLinkMR200Client(TPLinkMRClient):
124
122
  for line in r.text.splitlines()[0:2]:
125
123
  match = search(r"var (.*)=\"(.*)\"", line)
126
124
  result[match.group(1)] = int(match.group(2), 16)
127
- return result
128
- except Exception:
125
+
126
+ self._nn = int(result["nn"])
127
+ self._ee = int(result["ee"])
128
+ except Exception as e:
129
129
  if not retry:
130
- return self.__get_params(True)
131
- raise ClientException()
130
+ self.__get_params(True)
131
+ raise ClientException(str(e))
132
132
 
133
133
  def req_act(self, acts: list):
134
134
  '''
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tplinkrouterc6u
3
- Version: 5.12.0
3
+ Version: 5.12.2
4
4
  Summary: TP-Link Router API (supports also Mercusys Router)
5
5
  Home-page: https://github.com/AlexandrErohin/TP-Link-Archer-C6U
6
6
  Author: Alex Erohin
@@ -49,7 +49,9 @@ Python package for API access and management for TP-Link and Mercusys Routers. S
49
49
  - [pycryptodome](https://pypi.org/project/pycryptodome/)
50
50
 
51
51
  ## Usage
52
- Enter the host & credentials used to log in to your router management page. Username is `admin` by default. But you may pass username as third parameter. Some routers have default username - `user`
52
+ - Enter the host & credentials used to log in to your router management page. Username is `admin` by default. But you may pass username as third parameter. Some routers have default username - `user`
53
+ - Use Local Password which is for Log In with Local Password. Login with TP-LINK ID doesnt work
54
+ - If you use `https` connection - You need to turn on "Local Management via HTTPS" (advanced->system->administration) in the router web UI
53
55
 
54
56
  ```python
55
57
  from tplinkrouterc6u import (
@@ -304,7 +306,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
304
306
  - [TP-LINK routers](#tplink)
305
307
  - [MERCUSYS routers](#mercusys)
306
308
  ### <a id="tplink">TP-LINK routers</a>
307
- - Archer A6 V2.0
309
+ - Archer A6 (2.0, 4.0)
308
310
  - Archer A7 V5
309
311
  - Archer A8 (1.0, 2.20)
310
312
  - Archer A9 V6
@@ -323,6 +325,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
323
325
  - Archer AX73 (V1, V2.0)
324
326
  - Archer AX75 V1
325
327
  - Archer AX90 V1.20
328
+ - Archer AX95 v1.0
326
329
  - Archer AXE75 V1
327
330
  - Archer AXE5400 v1.0
328
331
  - Archer AXE16000
@@ -330,6 +333,7 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
330
333
  - Archer AX3000 V1
331
334
  - Archer AX6000 V1
332
335
  - Archer AX11000 V1
336
+ - Archer BE220 v1.0
333
337
  - Archer BE230 v1.0
334
338
  - Archer BE400 v1.0
335
339
  - Archer BE550 v1.0
@@ -391,6 +395,8 @@ or you have TP-link C5400X or similar router you need to get web encrypted passw
391
395
  - VX420-G2h v1.1
392
396
  - VX800v v1
393
397
  - XC220-G3v v2.30
398
+ - RE305 4.0
399
+ - RE315 1.0
394
400
  - RE330 v1
395
401
  ### <a id="mercusys">MERCUSYS routers</a>
396
402
  - AC10 1.20
@@ -8,6 +8,7 @@ test/test_client_c80.py
8
8
  test/test_client_deco.py
9
9
  test/test_client_ex.py
10
10
  test/test_client_mr.py
11
+ test/test_client_mr_200.py
11
12
  test/test_client_re330.py
12
13
  test/test_client_wdr.py
13
14
  test/test_client_xdr.py