Skip to content

Commit

Permalink
Merge pull request #31 from jadolg/add-rich-access-key-creation-options
Browse files Browse the repository at this point in the history
Add parameters for key creation (New in v1.8.0)
  • Loading branch information
jadolg authored Feb 5, 2024
2 parents 80bf3aa + 433b1c7 commit 19579e3
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 10 deletions.
29 changes: 23 additions & 6 deletions outline_vpn/outline_vpn.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,9 +133,28 @@ 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,
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 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(
Expand All @@ -146,13 +165,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"""
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
20 changes: 17 additions & 3 deletions test_outline_vpn.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -45,14 +44,29 @@ 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")

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",
data_limit=1024 * 1024 * 20,
method="aes-192-gcm",
password="test",
)
assert key.name == "Another test key"
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
Expand Down

0 comments on commit 19579e3

Please sign in to comment.