From 3f8459d6a63ab88a4a65a1c5578fecb5c2057c6e Mon Sep 17 00:00:00 2001 From: "Jorge Alberto Diaz Orozco (Akiel)" Date: Mon, 5 Feb 2024 20:57:02 +0100 Subject: [PATCH 1/3] Add parameters for key creation (New in v1.8.0) --- outline_vpn/outline_vpn.py | 32 ++++++++++++++++++++++++++------ test_outline_vpn.py | 22 +++++++++++++++++++--- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/outline_vpn/outline_vpn.py b/outline_vpn/outline_vpn.py index bfe1e11..35ee87f 100644 --- a/outline_vpn/outline_vpn.py +++ b/outline_vpn/outline_vpn.py @@ -133,9 +133,31 @@ def get_key(self, key_id: str) -> OutlineKey: else: raise OutlineServerErrorException("Unable to get key") - def create_key(self, key_name=None) -> OutlineKey: + def create_key( + self, + name: str = None, + method: str = None, + password: str = None, + port: int = None, + data_limit: int = None, + ) -> OutlineKey: """Create a new key""" - response = self.session.post(f"{self.api_url}/access-keys/", verify=False) + + payload = {} + if name: + payload["name"] = name + if method: + payload["method"] = method + if password: + payload["password"] = password + if port: + payload["port"] = port + if data_limit: + payload["limit"] = {"bytes": data_limit} + + response = self.session.post( + f"{self.api_url}/access-keys", verify=False, json=payload + ) if response.status_code == 201: key = response.json() outline_key = OutlineKey( @@ -146,13 +168,11 @@ def create_key(self, key_name=None) -> OutlineKey: method=key.get("method"), access_url=key.get("accessUrl"), used_bytes=0, - data_limit=None, + data_limit=key.get("dataLimit", {}).get("bytes") ) - if key_name and self.rename_key(outline_key.key_id, key_name): - outline_key.name = key_name return outline_key - raise OutlineServerErrorException("Unable to create key") + raise OutlineServerErrorException(f"Unable to create key. {response.text}") def delete_key(self, key_id: str) -> bool: """Delete a key""" diff --git a/test_outline_vpn.py b/test_outline_vpn.py index 02403a0..37f1ba9 100644 --- a/test_outline_vpn.py +++ b/test_outline_vpn.py @@ -18,8 +18,7 @@ def client() -> OutlineVPN: api_data = json.loads(json_text) api_url = re.sub("https://[^:]+:", "https://127.0.0.1:", api_data.get("apiUrl")) - client = OutlineVPN( - api_url=api_url, cert_sha256=api_data.get("certSha256")) + client = OutlineVPN(api_url=api_url, cert_sha256=api_data.get("certSha256")) return client @@ -45,7 +44,7 @@ def test_crud_key(client: OutlineVPN): # pylint: disable=W0621 assert read_key is not None assert read_key.key_id == new_key.key_id - named_key = client.create_key(key_name="Test Key") + named_key = client.create_key(name="Test Key") assert named_key.name == "Test Key" assert client.rename_key(new_key.key_id, "a_name") @@ -53,6 +52,23 @@ def test_crud_key(client: OutlineVPN): # pylint: disable=W0621 assert client.delete_key(new_key.key_id) +def test_create_key_with_attributes(client: OutlineVPN): + """Test creating a key with attributes""" + key = client.create_key( + name="Another test key", + port=9090, + data_limit=1024 * 1024 * 20, + method="aes-192-gcm", + password="test", + ) + assert key.name == "Another test key" + assert key.port == 9090 + assert key.method == "aes-192-gcm" + assert key.password == "test" + assert key.data_limit == 1024 * 1024 * 20 + assert client.delete_key(key.key_id) + + def test_limits(client: OutlineVPN): # pylint: disable=W0621 """Test setting, retrieving and removing custom limits""" new_limit = 1024 * 1024 * 20 From 6e12c00bc066364ce6edf03c698b1c467f9b008d Mon Sep 17 00:00:00 2001 From: "Jorge Alberto Diaz Orozco (Akiel)" Date: Mon, 5 Feb 2024 21:03:17 +0100 Subject: [PATCH 2/3] Remove port parameter even though it was added to the API spec, the parameter is missing from implementation. See https://github.com/Jigsaw-Code/outline-server/pull/1273 --- outline_vpn/outline_vpn.py | 3 --- test_outline_vpn.py | 2 -- 2 files changed, 5 deletions(-) diff --git a/outline_vpn/outline_vpn.py b/outline_vpn/outline_vpn.py index 35ee87f..0e06291 100644 --- a/outline_vpn/outline_vpn.py +++ b/outline_vpn/outline_vpn.py @@ -138,7 +138,6 @@ def create_key( name: str = None, method: str = None, password: str = None, - port: int = None, data_limit: int = None, ) -> OutlineKey: """Create a new key""" @@ -150,8 +149,6 @@ def create_key( payload["method"] = method if password: payload["password"] = password - if port: - payload["port"] = port if data_limit: payload["limit"] = {"bytes": data_limit} diff --git a/test_outline_vpn.py b/test_outline_vpn.py index 37f1ba9..b1e0e5e 100644 --- a/test_outline_vpn.py +++ b/test_outline_vpn.py @@ -56,13 +56,11 @@ def test_create_key_with_attributes(client: OutlineVPN): """Test creating a key with attributes""" key = client.create_key( name="Another test key", - port=9090, data_limit=1024 * 1024 * 20, method="aes-192-gcm", password="test", ) assert key.name == "Another test key" - assert key.port == 9090 assert key.method == "aes-192-gcm" assert key.password == "test" assert key.data_limit == 1024 * 1024 * 20 From 433b1c7ee04d88a7f812fcb62a5fc349e8ccc519 Mon Sep 17 00:00:00 2001 From: "Jorge Alberto Diaz Orozco (Akiel)" Date: Mon, 5 Feb 2024 21:08:27 +0100 Subject: [PATCH 3/3] Bump version to 6.0.0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index b545d75..ca9fdc5 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setup( name="outline-vpn-api", - version="5.0.0", + version="6.0.0", packages=["outline_vpn"], url="https://github.com/jadolg/outline-vpn-api/", license="MIT",