diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES index 53370b0..0b05204 100644 --- a/.openapi-generator/FILES +++ b/.openapi-generator/FILES @@ -70,7 +70,9 @@ docs/GroupRemoteInfoGitlabGroup.md docs/GroupRemoteInfoGoogleGroup.md docs/GroupRemoteInfoLdapGroup.md docs/GroupRemoteInfoOktaGroup.md +docs/GroupRemoteInfoOktaGroupRule.md docs/GroupRemoteInfoSnowflakeRole.md +docs/GroupRemoteInfoWorkdayUserSecurityGroup.md docs/GroupResource.md docs/GroupResourceList.md docs/GroupTypeEnum.md @@ -298,7 +300,9 @@ opal_security/models/group_remote_info_gitlab_group.py opal_security/models/group_remote_info_google_group.py opal_security/models/group_remote_info_ldap_group.py opal_security/models/group_remote_info_okta_group.py +opal_security/models/group_remote_info_okta_group_rule.py opal_security/models/group_remote_info_snowflake_role.py +opal_security/models/group_remote_info_workday_user_security_group.py opal_security/models/group_resource.py opal_security/models/group_resource_list.py opal_security/models/group_type_enum.py @@ -435,4 +439,6 @@ setup.cfg setup.py test-requirements.txt test/__init__.py +test/test_group_remote_info_okta_group_rule.py +test/test_group_remote_info_workday_user_security_group.py tox.ini diff --git a/README.md b/README.md index 791f72b..c184442 100644 --- a/README.md +++ b/README.md @@ -325,7 +325,9 @@ Class | Method | HTTP request | Description - [GroupRemoteInfoGoogleGroup](docs/GroupRemoteInfoGoogleGroup.md) - [GroupRemoteInfoLdapGroup](docs/GroupRemoteInfoLdapGroup.md) - [GroupRemoteInfoOktaGroup](docs/GroupRemoteInfoOktaGroup.md) + - [GroupRemoteInfoOktaGroupRule](docs/GroupRemoteInfoOktaGroupRule.md) - [GroupRemoteInfoSnowflakeRole](docs/GroupRemoteInfoSnowflakeRole.md) + - [GroupRemoteInfoWorkdayUserSecurityGroup](docs/GroupRemoteInfoWorkdayUserSecurityGroup.md) - [GroupResource](docs/GroupResource.md) - [GroupResourceList](docs/GroupResourceList.md) - [GroupTypeEnum](docs/GroupTypeEnum.md) diff --git a/api/openapi.yaml b/api/openapi.yaml index a6e8974..191c933 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -10,6 +10,26 @@ info: servers: - description: Production url: https://api.opal.dev/v1 +# keep tags alphabetized, also add any new tags to the list below +tags: + - name: access-rules + - name: apps + - name: bundles + - name: configuration-templates + - name: events + - name: groups + - name: group-bindings + - name: idp-group-mappings + - name: message-channels + - name: non-human-identities + - name: on-call-schedules + - name: owners + - name: requests + - name: resources + - name: sessions + - name: tags + - name: uars + - name: users paths: /apps: get: @@ -6323,6 +6343,26 @@ components: type: object required: - role_id + okta_group_rule: + description: Remote info for Okta Directory group rule. + properties: + rule_id: + description: The id of the Okta group rule. + example: 0pr3f7zMZZHPgUoWO0g4 + type: string + type: object + required: + - rule_id + workday_user_security_group: + description: Remote info for Workday User Security group. + properties: + group_id: + description: The id of the Workday User Security group. + example: 123abc456def + type: string + type: object + required: + - group_id type: object ResourceRemoteInfo: description: Information that defines the remote resource. This replaces the deprecated remote_id and metadata fields. diff --git a/docs/GroupRemoteInfo.md b/docs/GroupRemoteInfo.md index 3101f6f..88523e6 100644 --- a/docs/GroupRemoteInfo.md +++ b/docs/GroupRemoteInfo.md @@ -16,6 +16,8 @@ Name | Type | Description | Notes **azure_ad_security_group** | [**GroupRemoteInfoAzureAdSecurityGroup**](GroupRemoteInfoAzureAdSecurityGroup.md) | | [optional] **azure_ad_microsoft_365_group** | [**GroupRemoteInfoAzureAdMicrosoft365Group**](GroupRemoteInfoAzureAdMicrosoft365Group.md) | | [optional] **snowflake_role** | [**GroupRemoteInfoSnowflakeRole**](GroupRemoteInfoSnowflakeRole.md) | | [optional] +**okta_group_rule** | [**GroupRemoteInfoOktaGroupRule**](GroupRemoteInfoOktaGroupRule.md) | | [optional] +**workday_user_security_group** | [**GroupRemoteInfoWorkdayUserSecurityGroup**](GroupRemoteInfoWorkdayUserSecurityGroup.md) | | [optional] ## Example diff --git a/docs/GroupRemoteInfoOktaGroupRule.md b/docs/GroupRemoteInfoOktaGroupRule.md new file mode 100644 index 0000000..67b60fc --- /dev/null +++ b/docs/GroupRemoteInfoOktaGroupRule.md @@ -0,0 +1,30 @@ +# GroupRemoteInfoOktaGroupRule + +Remote info for Okta Directory group rule. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**rule_id** | **str** | The id of the Okta group rule. | + +## Example + +```python +from opal_security.models.group_remote_info_okta_group_rule import GroupRemoteInfoOktaGroupRule + +# TODO update the JSON string below +json = "{}" +# create an instance of GroupRemoteInfoOktaGroupRule from a JSON string +group_remote_info_okta_group_rule_instance = GroupRemoteInfoOktaGroupRule.from_json(json) +# print the JSON string representation of the object +print(GroupRemoteInfoOktaGroupRule.to_json()) + +# convert the object into a dict +group_remote_info_okta_group_rule_dict = group_remote_info_okta_group_rule_instance.to_dict() +# create an instance of GroupRemoteInfoOktaGroupRule from a dict +group_remote_info_okta_group_rule_from_dict = GroupRemoteInfoOktaGroupRule.from_dict(group_remote_info_okta_group_rule_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/GroupRemoteInfoWorkdayUserSecurityGroup.md b/docs/GroupRemoteInfoWorkdayUserSecurityGroup.md new file mode 100644 index 0000000..aad7281 --- /dev/null +++ b/docs/GroupRemoteInfoWorkdayUserSecurityGroup.md @@ -0,0 +1,30 @@ +# GroupRemoteInfoWorkdayUserSecurityGroup + +Remote info for Workday User Security group. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**group_id** | **str** | The id of the Workday User Security group. | + +## Example + +```python +from opal_security.models.group_remote_info_workday_user_security_group import GroupRemoteInfoWorkdayUserSecurityGroup + +# TODO update the JSON string below +json = "{}" +# create an instance of GroupRemoteInfoWorkdayUserSecurityGroup from a JSON string +group_remote_info_workday_user_security_group_instance = GroupRemoteInfoWorkdayUserSecurityGroup.from_json(json) +# print the JSON string representation of the object +print(GroupRemoteInfoWorkdayUserSecurityGroup.to_json()) + +# convert the object into a dict +group_remote_info_workday_user_security_group_dict = group_remote_info_workday_user_security_group_instance.to_dict() +# create an instance of GroupRemoteInfoWorkdayUserSecurityGroup from a dict +group_remote_info_workday_user_security_group_from_dict = GroupRemoteInfoWorkdayUserSecurityGroup.from_dict(group_remote_info_workday_user_security_group_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/opal_security/__init__.py b/opal_security/__init__.py index a647ed7..adf4f3c 100644 --- a/opal_security/__init__.py +++ b/opal_security/__init__.py @@ -110,7 +110,9 @@ from opal_security.models.group_remote_info_google_group import GroupRemoteInfoGoogleGroup from opal_security.models.group_remote_info_ldap_group import GroupRemoteInfoLdapGroup from opal_security.models.group_remote_info_okta_group import GroupRemoteInfoOktaGroup +from opal_security.models.group_remote_info_okta_group_rule import GroupRemoteInfoOktaGroupRule from opal_security.models.group_remote_info_snowflake_role import GroupRemoteInfoSnowflakeRole +from opal_security.models.group_remote_info_workday_user_security_group import GroupRemoteInfoWorkdayUserSecurityGroup from opal_security.models.group_resource import GroupResource from opal_security.models.group_resource_list import GroupResourceList from opal_security.models.group_type_enum import GroupTypeEnum diff --git a/opal_security/models/__init__.py b/opal_security/models/__init__.py index 92232c0..249bd1e 100644 --- a/opal_security/models/__init__.py +++ b/opal_security/models/__init__.py @@ -76,7 +76,9 @@ from opal_security.models.group_remote_info_google_group import GroupRemoteInfoGoogleGroup from opal_security.models.group_remote_info_ldap_group import GroupRemoteInfoLdapGroup from opal_security.models.group_remote_info_okta_group import GroupRemoteInfoOktaGroup +from opal_security.models.group_remote_info_okta_group_rule import GroupRemoteInfoOktaGroupRule from opal_security.models.group_remote_info_snowflake_role import GroupRemoteInfoSnowflakeRole +from opal_security.models.group_remote_info_workday_user_security_group import GroupRemoteInfoWorkdayUserSecurityGroup from opal_security.models.group_resource import GroupResource from opal_security.models.group_resource_list import GroupResourceList from opal_security.models.group_type_enum import GroupTypeEnum diff --git a/opal_security/models/group_remote_info.py b/opal_security/models/group_remote_info.py index 9a28167..acc7b49 100644 --- a/opal_security/models/group_remote_info.py +++ b/opal_security/models/group_remote_info.py @@ -29,7 +29,9 @@ from opal_security.models.group_remote_info_google_group import GroupRemoteInfoGoogleGroup from opal_security.models.group_remote_info_ldap_group import GroupRemoteInfoLdapGroup from opal_security.models.group_remote_info_okta_group import GroupRemoteInfoOktaGroup +from opal_security.models.group_remote_info_okta_group_rule import GroupRemoteInfoOktaGroupRule from opal_security.models.group_remote_info_snowflake_role import GroupRemoteInfoSnowflakeRole +from opal_security.models.group_remote_info_workday_user_security_group import GroupRemoteInfoWorkdayUserSecurityGroup from typing import Optional, Set from typing_extensions import Self @@ -47,8 +49,10 @@ class GroupRemoteInfo(BaseModel): azure_ad_security_group: Optional[GroupRemoteInfoAzureAdSecurityGroup] = None azure_ad_microsoft_365_group: Optional[GroupRemoteInfoAzureAdMicrosoft365Group] = None snowflake_role: Optional[GroupRemoteInfoSnowflakeRole] = None + okta_group_rule: Optional[GroupRemoteInfoOktaGroupRule] = None + workday_user_security_group: Optional[GroupRemoteInfoWorkdayUserSecurityGroup] = None additional_properties: Dict[str, Any] = {} - __properties: ClassVar[List[str]] = ["active_directory_group", "github_team", "gitlab_group", "google_group", "ldap_group", "okta_group", "duo_group", "azure_ad_security_group", "azure_ad_microsoft_365_group", "snowflake_role"] + __properties: ClassVar[List[str]] = ["active_directory_group", "github_team", "gitlab_group", "google_group", "ldap_group", "okta_group", "duo_group", "azure_ad_security_group", "azure_ad_microsoft_365_group", "snowflake_role", "okta_group_rule", "workday_user_security_group"] model_config = ConfigDict( populate_by_name=True, @@ -121,6 +125,12 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of snowflake_role if self.snowflake_role: _dict['snowflake_role'] = self.snowflake_role.to_dict() + # override the default output from pydantic by calling `to_dict()` of okta_group_rule + if self.okta_group_rule: + _dict['okta_group_rule'] = self.okta_group_rule.to_dict() + # override the default output from pydantic by calling `to_dict()` of workday_user_security_group + if self.workday_user_security_group: + _dict['workday_user_security_group'] = self.workday_user_security_group.to_dict() # puts key-value pairs in additional_properties in the top level if self.additional_properties is not None: for _key, _value in self.additional_properties.items(): @@ -147,7 +157,9 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "duo_group": GroupRemoteInfoDuoGroup.from_dict(obj["duo_group"]) if obj.get("duo_group") is not None else None, "azure_ad_security_group": GroupRemoteInfoAzureAdSecurityGroup.from_dict(obj["azure_ad_security_group"]) if obj.get("azure_ad_security_group") is not None else None, "azure_ad_microsoft_365_group": GroupRemoteInfoAzureAdMicrosoft365Group.from_dict(obj["azure_ad_microsoft_365_group"]) if obj.get("azure_ad_microsoft_365_group") is not None else None, - "snowflake_role": GroupRemoteInfoSnowflakeRole.from_dict(obj["snowflake_role"]) if obj.get("snowflake_role") is not None else None + "snowflake_role": GroupRemoteInfoSnowflakeRole.from_dict(obj["snowflake_role"]) if obj.get("snowflake_role") is not None else None, + "okta_group_rule": GroupRemoteInfoOktaGroupRule.from_dict(obj["okta_group_rule"]) if obj.get("okta_group_rule") is not None else None, + "workday_user_security_group": GroupRemoteInfoWorkdayUserSecurityGroup.from_dict(obj["workday_user_security_group"]) if obj.get("workday_user_security_group") is not None else None }) # store additional fields in additional_properties for _key in obj.keys(): diff --git a/opal_security/models/group_remote_info_okta_group_rule.py b/opal_security/models/group_remote_info_okta_group_rule.py new file mode 100644 index 0000000..66fdb89 --- /dev/null +++ b/opal_security/models/group_remote_info_okta_group_rule.py @@ -0,0 +1,101 @@ +# coding: utf-8 + +""" + Opal API + + The Opal API is a RESTful API that allows you to interact with the Opal Security platform programmatically. + + The version of the OpenAPI document: 1.0 + Contact: hello@opal.dev + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List +from typing import Optional, Set +from typing_extensions import Self + +class GroupRemoteInfoOktaGroupRule(BaseModel): + """ + Remote info for Okta Directory group rule. + """ # noqa: E501 + rule_id: StrictStr = Field(description="The id of the Okta group rule.") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["rule_id"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GroupRemoteInfoOktaGroupRule from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set([ + "additional_properties", + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GroupRemoteInfoOktaGroupRule from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "rule_id": obj.get("rule_id") + }) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj + + diff --git a/opal_security/models/group_remote_info_workday_user_security_group.py b/opal_security/models/group_remote_info_workday_user_security_group.py new file mode 100644 index 0000000..28cecb1 --- /dev/null +++ b/opal_security/models/group_remote_info_workday_user_security_group.py @@ -0,0 +1,101 @@ +# coding: utf-8 + +""" + Opal API + + The Opal API is a RESTful API that allows you to interact with the Opal Security platform programmatically. + + The version of the OpenAPI document: 1.0 + Contact: hello@opal.dev + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +from __future__ import annotations +import pprint +import re # noqa: F401 +import json + +from pydantic import BaseModel, ConfigDict, Field, StrictStr +from typing import Any, ClassVar, Dict, List +from typing import Optional, Set +from typing_extensions import Self + +class GroupRemoteInfoWorkdayUserSecurityGroup(BaseModel): + """ + Remote info for Workday User Security group. + """ # noqa: E501 + group_id: StrictStr = Field(description="The id of the Workday User Security group.") + additional_properties: Dict[str, Any] = {} + __properties: ClassVar[List[str]] = ["group_id"] + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of GroupRemoteInfoWorkdayUserSecurityGroup from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + * Fields in `self.additional_properties` are added to the output dict. + """ + excluded_fields: Set[str] = set([ + "additional_properties", + ]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + # puts key-value pairs in additional_properties in the top level + if self.additional_properties is not None: + for _key, _value in self.additional_properties.items(): + _dict[_key] = _value + + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of GroupRemoteInfoWorkdayUserSecurityGroup from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({ + "group_id": obj.get("group_id") + }) + # store additional fields in additional_properties + for _key in obj.keys(): + if _key not in cls.__properties: + _obj.additional_properties[_key] = obj.get(_key) + + return _obj + + diff --git a/test/test_group_remote_info_okta_group_rule.py b/test/test_group_remote_info_okta_group_rule.py new file mode 100644 index 0000000..7f3def4 --- /dev/null +++ b/test/test_group_remote_info_okta_group_rule.py @@ -0,0 +1,53 @@ +# coding: utf-8 + +""" + Opal API + + The Opal API is a RESTful API that allows you to interact with the Opal Security platform programmatically. + + The version of the OpenAPI document: 1.0 + Contact: hello@opal.dev + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from opal_security.models.group_remote_info_okta_group_rule import GroupRemoteInfoOktaGroupRule + +class TestGroupRemoteInfoOktaGroupRule(unittest.TestCase): + """GroupRemoteInfoOktaGroupRule unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GroupRemoteInfoOktaGroupRule: + """Test GroupRemoteInfoOktaGroupRule + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GroupRemoteInfoOktaGroupRule` + """ + model = GroupRemoteInfoOktaGroupRule() + if include_optional: + return GroupRemoteInfoOktaGroupRule( + rule_id = '0pr3f7zMZZHPgUoWO0g4' + ) + else: + return GroupRemoteInfoOktaGroupRule( + rule_id = '0pr3f7zMZZHPgUoWO0g4', + ) + """ + + def testGroupRemoteInfoOktaGroupRule(self): + """Test GroupRemoteInfoOktaGroupRule""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_group_remote_info_workday_user_security_group.py b/test/test_group_remote_info_workday_user_security_group.py new file mode 100644 index 0000000..d3a45fa --- /dev/null +++ b/test/test_group_remote_info_workday_user_security_group.py @@ -0,0 +1,53 @@ +# coding: utf-8 + +""" + Opal API + + The Opal API is a RESTful API that allows you to interact with the Opal Security platform programmatically. + + The version of the OpenAPI document: 1.0 + Contact: hello@opal.dev + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + + +import unittest + +from opal_security.models.group_remote_info_workday_user_security_group import GroupRemoteInfoWorkdayUserSecurityGroup + +class TestGroupRemoteInfoWorkdayUserSecurityGroup(unittest.TestCase): + """GroupRemoteInfoWorkdayUserSecurityGroup unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def make_instance(self, include_optional) -> GroupRemoteInfoWorkdayUserSecurityGroup: + """Test GroupRemoteInfoWorkdayUserSecurityGroup + include_optional is a boolean, when False only required + params are included, when True both required and + optional params are included """ + # uncomment below to create an instance of `GroupRemoteInfoWorkdayUserSecurityGroup` + """ + model = GroupRemoteInfoWorkdayUserSecurityGroup() + if include_optional: + return GroupRemoteInfoWorkdayUserSecurityGroup( + group_id = '123abc456def' + ) + else: + return GroupRemoteInfoWorkdayUserSecurityGroup( + group_id = '123abc456def', + ) + """ + + def testGroupRemoteInfoWorkdayUserSecurityGroup(self): + """Test GroupRemoteInfoWorkdayUserSecurityGroup""" + # inst_req_only = self.make_instance(include_optional=False) + # inst_req_and_optional = self.make_instance(include_optional=True) + +if __name__ == '__main__': + unittest.main()