Skip to content

Commit c492a0a

Browse files
authored
feat(secret): add option to generate passwords (#124)
1 parent b321cb3 commit c492a0a

File tree

8 files changed

+166
-0
lines changed

8 files changed

+166
-0
lines changed

scaleway-async/scaleway_async/secret/v1alpha1/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from .types import AccessSecretVersionResponse
77
from .types import ListSecretVersionsResponse
88
from .types import ListSecretsResponse
9+
from .types import PasswordGenerationParams
910
from .types import Secret
1011
from .types import SecretVersion
1112
from .api import SecretV1Alpha1API
@@ -17,6 +18,7 @@
1718
"AccessSecretVersionResponse",
1819
"ListSecretVersionsResponse",
1920
"ListSecretsResponse",
21+
"PasswordGenerationParams",
2022
"Secret",
2123
"SecretVersion",
2224
"SecretV1Alpha1API",

scaleway-async/scaleway_async/secret/v1alpha1/api.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
AccessSecretVersionResponse,
1818
ListSecretVersionsResponse,
1919
ListSecretsResponse,
20+
PasswordGenerationParams,
2021
Secret,
2122
SecretVersion,
2223
CreateSecretRequest,
@@ -343,6 +344,7 @@ async def create_secret_version(
343344
disable_previous: bool,
344345
region: Optional[Region] = None,
345346
description: Optional[str] = None,
347+
password_generation: Optional[PasswordGenerationParams] = None,
346348
) -> SecretVersion:
347349
"""
348350
Create a version.
@@ -353,6 +355,12 @@ async def create_secret_version(
353355
:param description: Description of the version.
354356
:param disable_previous: Disable the previous secret version.
355357
If there is no previous version or if the previous version was already disabled, does nothing.
358+
:param password_generation: Options to generate a password.
359+
If specified, a random password will be generated. The data field must be empty.
360+
By default, the generator will use upper and lower case letters, and digits.
361+
This behavior can be tuned using the generation params.
362+
363+
One-of ('_password_generation'): at most one of 'password_generation' could be set.
356364
:return: :class:`SecretVersion <SecretVersion>`
357365
358366
Usage:
@@ -380,6 +388,7 @@ async def create_secret_version(
380388
disable_previous=disable_previous,
381389
region=region,
382390
description=description,
391+
password_generation=password_generation,
383392
),
384393
self.client,
385394
),

scaleway-async/scaleway_async/secret/v1alpha1/marshalling.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,16 @@
44
from typing import Any, Dict
55

66
from scaleway_core.profile import ProfileDefaults
7+
from scaleway_core.utils import (
8+
OneOfPossibility,
9+
resolve_one_of,
10+
)
711
from dateutil import parser
812
from .types import (
913
AccessSecretVersionResponse,
1014
ListSecretVersionsResponse,
1115
ListSecretsResponse,
16+
PasswordGenerationParams,
1217
Secret,
1318
SecretVersion,
1419
CreateSecretRequest,
@@ -142,6 +147,19 @@ def unmarshal_ListSecretsResponse(data: Any) -> ListSecretsResponse:
142147
return ListSecretsResponse(**args)
143148

144149

150+
def marshal_PasswordGenerationParams(
151+
request: PasswordGenerationParams,
152+
defaults: ProfileDefaults,
153+
) -> Dict[str, Any]:
154+
return {
155+
"additional_chars": request.additional_chars,
156+
"length": request.length,
157+
"no_digits": request.no_digits,
158+
"no_lowercase_letters": request.no_lowercase_letters,
159+
"no_uppercase_letters": request.no_uppercase_letters,
160+
}
161+
162+
145163
def marshal_CreateSecretRequest(
146164
request: CreateSecretRequest,
147165
defaults: ProfileDefaults,
@@ -159,6 +177,18 @@ def marshal_CreateSecretVersionRequest(
159177
defaults: ProfileDefaults,
160178
) -> Dict[str, Any]:
161179
return {
180+
**resolve_one_of(
181+
[
182+
OneOfPossibility(
183+
"password_generation",
184+
marshal_PasswordGenerationParams(
185+
request.password_generation, defaults
186+
)
187+
if request.password_generation is not None
188+
else None,
189+
),
190+
]
191+
),
162192
"data": request.data,
163193
"description": request.description,
164194
"disable_previous": request.disable_previous,

scaleway-async/scaleway_async/secret/v1alpha1/types.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,38 @@ class ListSecretsResponse:
9898
"""
9999

100100

101+
@dataclass
102+
class PasswordGenerationParams:
103+
"""
104+
Password generation params.
105+
"""
106+
107+
length: int
108+
"""
109+
Length of the password to generate (between 1 and 1024).
110+
"""
111+
112+
no_lowercase_letters: bool
113+
"""
114+
Do not include lower case letters by default in the alphabet.
115+
"""
116+
117+
no_uppercase_letters: bool
118+
"""
119+
Do not include upper case letters by default in the alphabet.
120+
"""
121+
122+
no_digits: bool
123+
"""
124+
Do not include digits by default in the alphabet.
125+
"""
126+
127+
additional_chars: str
128+
"""
129+
Additional ascii characters to be included in the alphabet.
130+
"""
131+
132+
101133
@dataclass
102134
class Secret:
103135
"""
@@ -355,6 +387,16 @@ class CreateSecretVersionRequest:
355387
If there is no previous version or if the previous version was already disabled, does nothing.
356388
"""
357389

390+
password_generation: Optional[PasswordGenerationParams]
391+
"""
392+
Options to generate a password.
393+
If specified, a random password will be generated. The data field must be empty.
394+
By default, the generator will use upper and lower case letters, and digits.
395+
This behavior can be tuned using the generation params.
396+
397+
One-of ('_password_generation'): at most one of 'password_generation' could be set.
398+
"""
399+
358400

359401
@dataclass
360402
class GetSecretVersionRequest:

scaleway/scaleway/secret/v1alpha1/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from .types import AccessSecretVersionResponse
77
from .types import ListSecretVersionsResponse
88
from .types import ListSecretsResponse
9+
from .types import PasswordGenerationParams
910
from .types import Secret
1011
from .types import SecretVersion
1112
from .api import SecretV1Alpha1API
@@ -17,6 +18,7 @@
1718
"AccessSecretVersionResponse",
1819
"ListSecretVersionsResponse",
1920
"ListSecretsResponse",
21+
"PasswordGenerationParams",
2022
"Secret",
2123
"SecretVersion",
2224
"SecretV1Alpha1API",

scaleway/scaleway/secret/v1alpha1/api.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
AccessSecretVersionResponse,
1818
ListSecretVersionsResponse,
1919
ListSecretsResponse,
20+
PasswordGenerationParams,
2021
Secret,
2122
SecretVersion,
2223
CreateSecretRequest,
@@ -343,6 +344,7 @@ def create_secret_version(
343344
disable_previous: bool,
344345
region: Optional[Region] = None,
345346
description: Optional[str] = None,
347+
password_generation: Optional[PasswordGenerationParams] = None,
346348
) -> SecretVersion:
347349
"""
348350
Create a version.
@@ -353,6 +355,12 @@ def create_secret_version(
353355
:param description: Description of the version.
354356
:param disable_previous: Disable the previous secret version.
355357
If there is no previous version or if the previous version was already disabled, does nothing.
358+
:param password_generation: Options to generate a password.
359+
If specified, a random password will be generated. The data field must be empty.
360+
By default, the generator will use upper and lower case letters, and digits.
361+
This behavior can be tuned using the generation params.
362+
363+
One-of ('_password_generation'): at most one of 'password_generation' could be set.
356364
:return: :class:`SecretVersion <SecretVersion>`
357365
358366
Usage:
@@ -380,6 +388,7 @@ def create_secret_version(
380388
disable_previous=disable_previous,
381389
region=region,
382390
description=description,
391+
password_generation=password_generation,
383392
),
384393
self.client,
385394
),

scaleway/scaleway/secret/v1alpha1/marshalling.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,16 @@
44
from typing import Any, Dict
55

66
from scaleway_core.profile import ProfileDefaults
7+
from scaleway_core.utils import (
8+
OneOfPossibility,
9+
resolve_one_of,
10+
)
711
from dateutil import parser
812
from .types import (
913
AccessSecretVersionResponse,
1014
ListSecretVersionsResponse,
1115
ListSecretsResponse,
16+
PasswordGenerationParams,
1217
Secret,
1318
SecretVersion,
1419
CreateSecretRequest,
@@ -142,6 +147,19 @@ def unmarshal_ListSecretsResponse(data: Any) -> ListSecretsResponse:
142147
return ListSecretsResponse(**args)
143148

144149

150+
def marshal_PasswordGenerationParams(
151+
request: PasswordGenerationParams,
152+
defaults: ProfileDefaults,
153+
) -> Dict[str, Any]:
154+
return {
155+
"additional_chars": request.additional_chars,
156+
"length": request.length,
157+
"no_digits": request.no_digits,
158+
"no_lowercase_letters": request.no_lowercase_letters,
159+
"no_uppercase_letters": request.no_uppercase_letters,
160+
}
161+
162+
145163
def marshal_CreateSecretRequest(
146164
request: CreateSecretRequest,
147165
defaults: ProfileDefaults,
@@ -159,6 +177,18 @@ def marshal_CreateSecretVersionRequest(
159177
defaults: ProfileDefaults,
160178
) -> Dict[str, Any]:
161179
return {
180+
**resolve_one_of(
181+
[
182+
OneOfPossibility(
183+
"password_generation",
184+
marshal_PasswordGenerationParams(
185+
request.password_generation, defaults
186+
)
187+
if request.password_generation is not None
188+
else None,
189+
),
190+
]
191+
),
162192
"data": request.data,
163193
"description": request.description,
164194
"disable_previous": request.disable_previous,

scaleway/scaleway/secret/v1alpha1/types.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,38 @@ class ListSecretsResponse:
9898
"""
9999

100100

101+
@dataclass
102+
class PasswordGenerationParams:
103+
"""
104+
Password generation params.
105+
"""
106+
107+
length: int
108+
"""
109+
Length of the password to generate (between 1 and 1024).
110+
"""
111+
112+
no_lowercase_letters: bool
113+
"""
114+
Do not include lower case letters by default in the alphabet.
115+
"""
116+
117+
no_uppercase_letters: bool
118+
"""
119+
Do not include upper case letters by default in the alphabet.
120+
"""
121+
122+
no_digits: bool
123+
"""
124+
Do not include digits by default in the alphabet.
125+
"""
126+
127+
additional_chars: str
128+
"""
129+
Additional ascii characters to be included in the alphabet.
130+
"""
131+
132+
101133
@dataclass
102134
class Secret:
103135
"""
@@ -355,6 +387,16 @@ class CreateSecretVersionRequest:
355387
If there is no previous version or if the previous version was already disabled, does nothing.
356388
"""
357389

390+
password_generation: Optional[PasswordGenerationParams]
391+
"""
392+
Options to generate a password.
393+
If specified, a random password will be generated. The data field must be empty.
394+
By default, the generator will use upper and lower case letters, and digits.
395+
This behavior can be tuned using the generation params.
396+
397+
One-of ('_password_generation'): at most one of 'password_generation' could be set.
398+
"""
399+
358400

359401
@dataclass
360402
class GetSecretVersionRequest:

0 commit comments

Comments
 (0)