Skip to content

Commit 685d940

Browse files
committed
Merge branch 'main' of https://github.com/DelineaXPM/python-tss-sdk into Dev.GetAllSecrets
2 parents ac2b6a7 + 893e9b9 commit 685d940

8 files changed

Lines changed: 110 additions & 103 deletions

File tree

.github/workflows/run_tests.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
environment: testing
1010
strategy:
1111
matrix:
12-
python: [3.7, 3.8, 3.9, "3.10"]
12+
python: [3.8, 3.9, "3.10", "3.11"]
1313

1414
steps:
1515
- uses: actions/checkout@v3
@@ -30,5 +30,5 @@ jobs:
3030
TSS_USERNAME: ${{ secrets.TSS_USERNAME }}
3131
TSS_PASSWORD: ${{ secrets.TSS_PASSWORD }}
3232
TSS_TENANT: ${{ secrets.TSS_TENANT }}
33-
SECRET_ID: ${{ secrets.SECRET_ID }}
34-
SECRET_PATH: ${{ secrets.SECRET_PATH }}
33+
TSS_SECRET_ID: ${{ secrets.TSS_SECRET_ID }}
34+
TSS_SECRET_PATH: ${{ secrets.TSS_SECRET_PATH }}

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ When using a self-signed certificate for SSL, the `REQUESTS_CA_BUNDLE` environme
120120

121121
## Create a Build Environment (optional)
122122

123-
The SDK requires [Python 3.7](https://www.python.org/downloads/) or higher.
123+
The SDK requires [Python 3.8](https://www.python.org/downloads/) or higher.
124124

125125
First, ensure Python is in `$PATH`, then run:
126126

@@ -144,8 +144,8 @@ Valid credentials are required to run the unit tests. The credentials should be
144144
export TSS_USERNAME=myusername
145145
export TSS_PASSWORD=mysecretpassword
146146
export TSS_TENANT=mytenant
147-
export SECRET_ID=42
148-
export SECRET_PATH=\Test Secrets\SecretName
147+
export TSS_SECRET_ID=42
148+
export TSS_SECRET_PATH=\Test Secrets\SecretName
149149
```
150150

151151
The tests assume that the user associated with the specified `TSS_USERNAME` and `TSS_PASSWORD` can read the secret to be fetched, and that the Secret itself contains `username` and `password` fields.

conftest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ def env_vars():
1212
"username": os.getenv("TSS_USERNAME"),
1313
"password": os.getenv("TSS_PASSWORD"),
1414
"tenant": os.getenv("TSS_TENANT"),
15-
"secret_id": os.getenv("SECRET_ID"),
16-
"secret_path": os.getenv("SECRET_PATH"),
15+
"secret_id": os.getenv("TSS_SECRET_ID"),
16+
"secret_path": os.getenv("TSS_SECRET_PATH"),
1717
}
1818

1919

delinea/secrets/server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ class SecretServerV0(SecretServer):
430430
It gets an ``access_token`` that it uses to create an *HTTP Authorization
431431
Header* which it includes in each REST API call.
432432
433-
This class maintains backwards compatability with v0.0.5
433+
This class maintains backwards compatibility with v0.0.5
434434
"""
435435

436436
def __init__(

example.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,32 @@
11
import os
2+
from conftest import secret_server
23

34
from delinea.secrets.server import (
5+
SecretServer,
46
SecretServerCloud,
57
SecretServerError,
8+
PasswordGrantAuthorizer,
9+
ServerSecret,
610
)
711

812
if __name__ == "__main__":
9-
creds = {
10-
"username": os.getenv("TSS_USERNAME"),
11-
"password": os.getenv("TSS_PASSWORD"),
12-
"tenant": os.getenv("TSS_TENTANT"),
13-
}
13+
tenant = os.getenv("TSS_TENANT")
14+
base_url = f"https://{tenant}.secretservercloud.com"
15+
authorizer = PasswordGrantAuthorizer(
16+
base_url,
17+
os.getenv("TSS_USERNAME"),
18+
os.getenv("TSS_PASSWORD"),
19+
)
1420

15-
secret_server = SecretServerCloud(**creds)
21+
secret_server_cloud = SecretServerCloud(tenant=tenant, authorizer=authorizer)
1622

1723
try:
18-
secret = secret_server.get_secret(1)
24+
secret = secret_server_cloud.get_secret(os.getenv("TSS_SECRET_ID"))
25+
serverSecret = ServerSecret(**secret)
1926
print(
20-
f"""username: {secret.fields['username'].value}
21-
password: {secret.fields['password'].value}
22-
template: {secret.secret_template_name}"""
27+
f"""username: {serverSecret.fields['username'].value}
28+
password: {serverSecret.fields['password'].value}
29+
template: {serverSecret.secret_template_name}"""
2330
)
2431
except SecretServerError as error:
2532
print(error.response.text)

pyproject.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,14 @@ author-email = "GitHub@delinea.com"
99
classifiers = [
1010
"License :: OSI Approved :: Apache Software License",
1111
"Operating System :: OS Independent",
12-
"Programming Language :: Python :: 3.7",
1312
"Programming Language :: Python :: 3.8",
1413
"Programming Language :: Python :: 3.9",
15-
"Programming Language :: Python :: 3.10"
14+
"Programming Language :: Python :: 3.10",
15+
"Programming Language :: Python :: 3.11"
1616
]
1717
description-file = "README.md"
1818
requires = [
1919
"requests >= 2.12.5"
2020
]
21-
requires-python=">=3.7"
21+
requires-python=">=3.8"
2222
dist-name = "python-tss-sdk"

tests/test_server.py

Lines changed: 56 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,56 @@
1-
import pytest
2-
3-
from delinea.secrets.server import (
4-
AccessTokenAuthorizer,
5-
SecretServer,
6-
SecretServerClientError,
7-
SecretServerError,
8-
ServerSecret,
9-
)
10-
11-
12-
def test_bad_url(env_vars, authorizer):
13-
bad_server = SecretServer(
14-
f"https://{env_vars['tenant']}.secretservercloud.com/nonexistent",
15-
authorizer,
16-
)
17-
with pytest.raises(SecretServerError):
18-
bad_server.get_secret(env_vars["secret_id"])
19-
20-
21-
def test_token_url(env_vars, authorizer):
22-
assert (
23-
authorizer.token_url
24-
== f"https://{env_vars['tenant']}.secretservercloud.com/oauth2/token"
25-
)
26-
27-
28-
def test_api_url(secret_server, env_vars):
29-
assert (
30-
secret_server.api_url
31-
== f"https://{env_vars['tenant']}.secretservercloud.com/api/v1"
32-
)
33-
34-
35-
def test_access_token_authorizer(env_vars, authorizer):
36-
assert SecretServer(
37-
f"https://{env_vars['tenant']}.secretservercloud.com/",
38-
AccessTokenAuthorizer(authorizer.get_access_token()),
39-
).get_secret(env_vars["secret_id"])["id"] == int(env_vars["secret_id"])
40-
41-
42-
def test_server_secret(env_vars, secret_server):
43-
assert ServerSecret(**secret_server.get_secret(env_vars["secret_id"])).id == int(
44-
env_vars["secret_id"]
45-
)
46-
47-
48-
def test_server_secret_by_path(env_vars, secret_server):
49-
assert ServerSecret(
50-
**secret_server.get_secret_by_path(env_vars["secret_path"])
51-
).id == int(env_vars["secret_id"])
52-
53-
54-
def test_nonexistent_secret(secret_server):
55-
with pytest.raises(SecretServerClientError):
56-
secret_server.get_secret(1000)
1+
import pytest
2+
3+
from delinea.secrets.server import (
4+
AccessTokenAuthorizer,
5+
SecretServer,
6+
SecretServerClientError,
7+
SecretServerError,
8+
ServerSecret,
9+
)
10+
11+
12+
def test_bad_url(env_vars, authorizer):
13+
bad_server = SecretServer(
14+
f"https://{env_vars['tenant']}.secretservercloud.com/nonexistent",
15+
authorizer,
16+
)
17+
with pytest.raises(SecretServerError):
18+
bad_server.get_secret(env_vars["secret_id"])
19+
20+
21+
def test_token_url(env_vars, authorizer):
22+
assert (
23+
authorizer.token_url
24+
== f"https://{env_vars['tenant']}.secretservercloud.com/oauth2/token"
25+
)
26+
27+
28+
def test_api_url(secret_server, env_vars):
29+
assert (
30+
secret_server.api_url
31+
== f"https://{env_vars['tenant']}.secretservercloud.com/api/v1"
32+
)
33+
34+
35+
def test_access_token_authorizer(env_vars, authorizer):
36+
assert SecretServer(
37+
f"https://{env_vars['tenant']}.secretservercloud.com/",
38+
AccessTokenAuthorizer(authorizer.get_access_token()),
39+
).get_secret(env_vars["secret_id"])["id"] == int(env_vars["secret_id"])
40+
41+
42+
def test_server_secret(env_vars, secret_server):
43+
assert ServerSecret(**secret_server.get_secret(env_vars["secret_id"])).id == int(
44+
env_vars["secret_id"]
45+
)
46+
47+
48+
def test_server_secret_by_path(env_vars, secret_server):
49+
assert ServerSecret(
50+
**secret_server.get_secret_by_path("/tss-sdk-go/Amazon")
51+
).id == int(env_vars["secret_id"])
52+
53+
54+
def test_nonexistent_secret(secret_server):
55+
with pytest.raises(SecretServerClientError):
56+
secret_server.get_secret(1000)

tox.ini

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
1-
# tox (https://tox.readthedocs.io/) is a tool for running tests
2-
# in multiple virtualenvs. This configuration file will run the
3-
# test suite on all supported python versions. To use it, "pip install tox"
4-
# and then run "tox" from this directory.
5-
6-
# Docs for tox config -> https://tox.readthedocs.io/en/latest/config.html
7-
8-
[tox]
9-
envlist = 3.7, 3.8, 3.9, 3.10
10-
isolated_build = True
11-
skipsdist = True
12-
13-
[testenv]
14-
deps =
15-
pytest
16-
requests
17-
python-dotenv
18-
passenv =
19-
TSS_USERNAME
20-
TSS_PASSWORD
21-
TSS_TENANT
22-
SECRET_ID
23-
SECRET_PATH
24-
commands =
25-
pytest
1+
# tox (https://tox.readthedocs.io/) is a tool for running tests
2+
# in multiple virtualenvs. This configuration file will run the
3+
# test suite on all supported python versions. To use it, "pip install tox"
4+
# and then run "tox" from this directory.
5+
6+
# Docs for tox config -> https://tox.readthedocs.io/en/latest/config.html
7+
8+
[tox]
9+
envlist = 3.8, 3.9, 3.10, 3.11
10+
isolated_build = True
11+
skipsdist = True
12+
13+
[testenv]
14+
deps =
15+
pytest
16+
requests
17+
python-dotenv
18+
passenv =
19+
TSS_USERNAME
20+
TSS_PASSWORD
21+
TSS_TENANT
22+
TSS_SECRET_ID
23+
TSS_SECRET_PATH
24+
commands =
25+
pytest

0 commit comments

Comments
 (0)