diff --git a/scaleway-async/scaleway_async/iam/v1alpha1/__init__.py b/scaleway-async/scaleway_async/iam/v1alpha1/__init__.py index fcb4941f..7be11678 100644 --- a/scaleway-async/scaleway_async/iam/v1alpha1/__init__.py +++ b/scaleway-async/scaleway_async/iam/v1alpha1/__init__.py @@ -112,6 +112,8 @@ from .types import MFAOTP from .types import Organization from .types import OrganizationSecuritySettings +from .types import ParseSamlMetadataRequest +from .types import ParseSamlMetadataResponse from .types import RemoveGroupMemberRequest from .types import RemoveUserConnectionRequest from .types import Saml @@ -248,6 +250,8 @@ "MFAOTP", "Organization", "OrganizationSecuritySettings", + "ParseSamlMetadataRequest", + "ParseSamlMetadataResponse", "RemoveGroupMemberRequest", "RemoveUserConnectionRequest", "Saml", diff --git a/scaleway-async/scaleway_async/iam/v1alpha1/api.py b/scaleway-async/scaleway_async/iam/v1alpha1/api.py index 13b9b9f9..797ea7ef 100644 --- a/scaleway-async/scaleway_async/iam/v1alpha1/api.py +++ b/scaleway-async/scaleway_async/iam/v1alpha1/api.py @@ -5,6 +5,9 @@ from typing import Optional from scaleway_core.api import API +from scaleway_core.bridge import ( + ScwFile, +) from scaleway_core.utils import ( OneOfPossibility, random_name, @@ -64,6 +67,8 @@ MFAOTP, Organization, OrganizationSecuritySettings, + ParseSamlMetadataRequest, + ParseSamlMetadataResponse, PermissionSet, Policy, Quotum, @@ -123,6 +128,7 @@ unmarshal_MFAOTP, unmarshal_Organization, unmarshal_OrganizationSecuritySettings, + unmarshal_ParseSamlMetadataResponse, unmarshal_Saml, unmarshal_SetRulesResponse, unmarshal_ValidateUserMFAOTPResponse, @@ -137,6 +143,7 @@ marshal_CreateSSHKeyRequest, marshal_CreateUserRequest, marshal_JoinUserConnectionRequest, + marshal_ParseSamlMetadataRequest, marshal_RemoveGroupMemberRequest, marshal_RemoveUserConnectionRequest, marshal_SetGroupMembersRequest, @@ -3188,6 +3195,38 @@ async def delete_saml( self._throw_on_error(res) + async def parse_saml_metadata( + self, + *, + file: ScwFile, + ) -> ParseSamlMetadataResponse: + """ + Parse SAML xml metadata file. + :param file: + :return: :class:`ParseSamlMetadataResponse ` + + Usage: + :: + + result = await api.parse_saml_metadata( + file=, + ) + """ + + res = self._request( + "POST", + "/iam/v1alpha1/parse-saml-metadata", + body=marshal_ParseSamlMetadataRequest( + ParseSamlMetadataRequest( + file=file, + ), + self.client, + ), + ) + + self._throw_on_error(res) + return unmarshal_ParseSamlMetadataResponse(res.json()) + async def list_saml_certificates( self, *, diff --git a/scaleway-async/scaleway_async/iam/v1alpha1/marshalling.py b/scaleway-async/scaleway_async/iam/v1alpha1/marshalling.py index 0bc990e1..bd96fceb 100644 --- a/scaleway-async/scaleway_async/iam/v1alpha1/marshalling.py +++ b/scaleway-async/scaleway_async/iam/v1alpha1/marshalling.py @@ -5,6 +5,9 @@ from dateutil import parser from scaleway_core.profile import ProfileDefaults +from scaleway_core.bridge import ( + marshal_ScwFile, +) from scaleway_core.utils import ( OneOfPossibility, resolve_one_of, @@ -56,6 +59,7 @@ MFAOTP, Organization, OrganizationSecuritySettings, + ParseSamlMetadataResponse, SamlServiceProvider, Saml, SetRulesResponse, @@ -73,6 +77,7 @@ CreateUserRequestMember, CreateUserRequest, JoinUserConnectionRequest, + ParseSamlMetadataRequest, RemoveGroupMemberRequest, RemoveUserConnectionRequest, SetGroupMembersRequest, @@ -1601,6 +1606,35 @@ def unmarshal_OrganizationSecuritySettings(data: Any) -> OrganizationSecuritySet return OrganizationSecuritySettings(**args) +def unmarshal_ParseSamlMetadataResponse(data: Any) -> ParseSamlMetadataResponse: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'ParseSamlMetadataResponse' failed as data isn't a dictionary." + ) + + args: dict[str, Any] = {} + + field = data.get("single_sign_on_url", None) + if field is not None: + args["single_sign_on_url"] = field + else: + args["single_sign_on_url"] = None + + field = data.get("entity_id", None) + if field is not None: + args["entity_id"] = field + else: + args["entity_id"] = None + + field = data.get("signing_certificates", None) + if field is not None: + args["signing_certificates"] = field + else: + args["signing_certificates"] = None + + return ParseSamlMetadataResponse(**args) + + def unmarshal_SamlServiceProvider(data: Any) -> SamlServiceProvider: if not isinstance(data, dict): raise TypeError( @@ -2020,6 +2054,18 @@ def marshal_JoinUserConnectionRequest( return output +def marshal_ParseSamlMetadataRequest( + request: ParseSamlMetadataRequest, + defaults: ProfileDefaults, +) -> dict[str, Any]: + output: dict[str, Any] = {} + + if request.file is not None: + output["file"] = marshal_ScwFile(request.file, defaults) + + return output + + def marshal_RemoveGroupMemberRequest( request: RemoveGroupMemberRequest, defaults: ProfileDefaults, diff --git a/scaleway-async/scaleway_async/iam/v1alpha1/types.py b/scaleway-async/scaleway_async/iam/v1alpha1/types.py index 60984d5b..8a94fea2 100644 --- a/scaleway-async/scaleway_async/iam/v1alpha1/types.py +++ b/scaleway-async/scaleway_async/iam/v1alpha1/types.py @@ -9,6 +9,7 @@ from scaleway_core.bridge import ( Region as ScwRegion, + ScwFile, Zone as ScwZone, ) from scaleway_core.utils import ( @@ -2139,6 +2140,18 @@ class OrganizationSecuritySettings: """ +@dataclass +class ParseSamlMetadataRequest: + file: ScwFile + + +@dataclass +class ParseSamlMetadataResponse: + single_sign_on_url: str + entity_id: str + signing_certificates: list[str] + + @dataclass class RemoveGroupMemberRequest: group_id: str diff --git a/scaleway/scaleway/iam/v1alpha1/__init__.py b/scaleway/scaleway/iam/v1alpha1/__init__.py index fcb4941f..7be11678 100644 --- a/scaleway/scaleway/iam/v1alpha1/__init__.py +++ b/scaleway/scaleway/iam/v1alpha1/__init__.py @@ -112,6 +112,8 @@ from .types import MFAOTP from .types import Organization from .types import OrganizationSecuritySettings +from .types import ParseSamlMetadataRequest +from .types import ParseSamlMetadataResponse from .types import RemoveGroupMemberRequest from .types import RemoveUserConnectionRequest from .types import Saml @@ -248,6 +250,8 @@ "MFAOTP", "Organization", "OrganizationSecuritySettings", + "ParseSamlMetadataRequest", + "ParseSamlMetadataResponse", "RemoveGroupMemberRequest", "RemoveUserConnectionRequest", "Saml", diff --git a/scaleway/scaleway/iam/v1alpha1/api.py b/scaleway/scaleway/iam/v1alpha1/api.py index d4856b3a..fa30d80c 100644 --- a/scaleway/scaleway/iam/v1alpha1/api.py +++ b/scaleway/scaleway/iam/v1alpha1/api.py @@ -5,6 +5,9 @@ from typing import Optional from scaleway_core.api import API +from scaleway_core.bridge import ( + ScwFile, +) from scaleway_core.utils import ( OneOfPossibility, random_name, @@ -64,6 +67,8 @@ MFAOTP, Organization, OrganizationSecuritySettings, + ParseSamlMetadataRequest, + ParseSamlMetadataResponse, PermissionSet, Policy, Quotum, @@ -123,6 +128,7 @@ unmarshal_MFAOTP, unmarshal_Organization, unmarshal_OrganizationSecuritySettings, + unmarshal_ParseSamlMetadataResponse, unmarshal_Saml, unmarshal_SetRulesResponse, unmarshal_ValidateUserMFAOTPResponse, @@ -137,6 +143,7 @@ marshal_CreateSSHKeyRequest, marshal_CreateUserRequest, marshal_JoinUserConnectionRequest, + marshal_ParseSamlMetadataRequest, marshal_RemoveGroupMemberRequest, marshal_RemoveUserConnectionRequest, marshal_SetGroupMembersRequest, @@ -3188,6 +3195,38 @@ def delete_saml( self._throw_on_error(res) + def parse_saml_metadata( + self, + *, + file: ScwFile, + ) -> ParseSamlMetadataResponse: + """ + Parse SAML xml metadata file. + :param file: + :return: :class:`ParseSamlMetadataResponse ` + + Usage: + :: + + result = api.parse_saml_metadata( + file=, + ) + """ + + res = self._request( + "POST", + "/iam/v1alpha1/parse-saml-metadata", + body=marshal_ParseSamlMetadataRequest( + ParseSamlMetadataRequest( + file=file, + ), + self.client, + ), + ) + + self._throw_on_error(res) + return unmarshal_ParseSamlMetadataResponse(res.json()) + def list_saml_certificates( self, *, diff --git a/scaleway/scaleway/iam/v1alpha1/marshalling.py b/scaleway/scaleway/iam/v1alpha1/marshalling.py index 0bc990e1..bd96fceb 100644 --- a/scaleway/scaleway/iam/v1alpha1/marshalling.py +++ b/scaleway/scaleway/iam/v1alpha1/marshalling.py @@ -5,6 +5,9 @@ from dateutil import parser from scaleway_core.profile import ProfileDefaults +from scaleway_core.bridge import ( + marshal_ScwFile, +) from scaleway_core.utils import ( OneOfPossibility, resolve_one_of, @@ -56,6 +59,7 @@ MFAOTP, Organization, OrganizationSecuritySettings, + ParseSamlMetadataResponse, SamlServiceProvider, Saml, SetRulesResponse, @@ -73,6 +77,7 @@ CreateUserRequestMember, CreateUserRequest, JoinUserConnectionRequest, + ParseSamlMetadataRequest, RemoveGroupMemberRequest, RemoveUserConnectionRequest, SetGroupMembersRequest, @@ -1601,6 +1606,35 @@ def unmarshal_OrganizationSecuritySettings(data: Any) -> OrganizationSecuritySet return OrganizationSecuritySettings(**args) +def unmarshal_ParseSamlMetadataResponse(data: Any) -> ParseSamlMetadataResponse: + if not isinstance(data, dict): + raise TypeError( + "Unmarshalling the type 'ParseSamlMetadataResponse' failed as data isn't a dictionary." + ) + + args: dict[str, Any] = {} + + field = data.get("single_sign_on_url", None) + if field is not None: + args["single_sign_on_url"] = field + else: + args["single_sign_on_url"] = None + + field = data.get("entity_id", None) + if field is not None: + args["entity_id"] = field + else: + args["entity_id"] = None + + field = data.get("signing_certificates", None) + if field is not None: + args["signing_certificates"] = field + else: + args["signing_certificates"] = None + + return ParseSamlMetadataResponse(**args) + + def unmarshal_SamlServiceProvider(data: Any) -> SamlServiceProvider: if not isinstance(data, dict): raise TypeError( @@ -2020,6 +2054,18 @@ def marshal_JoinUserConnectionRequest( return output +def marshal_ParseSamlMetadataRequest( + request: ParseSamlMetadataRequest, + defaults: ProfileDefaults, +) -> dict[str, Any]: + output: dict[str, Any] = {} + + if request.file is not None: + output["file"] = marshal_ScwFile(request.file, defaults) + + return output + + def marshal_RemoveGroupMemberRequest( request: RemoveGroupMemberRequest, defaults: ProfileDefaults, diff --git a/scaleway/scaleway/iam/v1alpha1/types.py b/scaleway/scaleway/iam/v1alpha1/types.py index 60984d5b..8a94fea2 100644 --- a/scaleway/scaleway/iam/v1alpha1/types.py +++ b/scaleway/scaleway/iam/v1alpha1/types.py @@ -9,6 +9,7 @@ from scaleway_core.bridge import ( Region as ScwRegion, + ScwFile, Zone as ScwZone, ) from scaleway_core.utils import ( @@ -2139,6 +2140,18 @@ class OrganizationSecuritySettings: """ +@dataclass +class ParseSamlMetadataRequest: + file: ScwFile + + +@dataclass +class ParseSamlMetadataResponse: + single_sign_on_url: str + entity_id: str + signing_certificates: list[str] + + @dataclass class RemoveGroupMemberRequest: group_id: str