Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add unset ExternalAuth api #148

Merged
merged 1 commit into from
Dec 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,22 @@ def init(self, options: dict, domain_id: str):
except Exception as e:
raise ERROR_AUTHENTICATION_FAILURE_PLUGIN(messsage=str(e))

def authorize(self, credentials, options, secret_data, domain_id, schema_id=None):
def authorize(
self,
credentials,
options,
secret_data,
domain_id,
schema_id=None,
metadata=None,
):
params = {
"options": options,
"secret_data": secret_data,
"user_credentials": credentials,
"schema_id": schema_id,
"domain_id": domain_id,
"metadata": metadata or {},
}

try:
Expand Down
10 changes: 9 additions & 1 deletion src/spaceone/identity/manager/external_auth_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ def _rollback(old_data):

return external_auth_vo

@staticmethod
def delete_external_auth_by_vo(external_auth_vo: ExternalAuth):
external_auth_vo.delete()

def get_external_auth(self, domain_id: str) -> ExternalAuth:
return self.external_auth_model.get(domain_id=domain_id)

Expand All @@ -63,7 +67,11 @@ def get_auth_info(self, domain_vo: Domain) -> dict:

if external_auth_vos.count() > 0:
external_auth_state = "ENABLED"
metadata = external_auth_vos[0].plugin_info.get("metadata", {})
plugin_info = external_auth_vos[0].plugin_info
metadata = plugin_info.get("metadata", {})
# if secret_id := plugin_info.get("secret_id"):
# secret_mgr = SecretManager()
# secret_data = secret_mgr.get_secret_data(secret_id, domain_vo.domain_id)

else:
external_auth_state = "DISABLED"
Expand Down
5 changes: 5 additions & 0 deletions src/spaceone/identity/manager/secret_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ def __init__(self, *args, **kwargs):
"SpaceConnector", service="secret"
)

def get_secret_data(self, secret_id: str, domain_id: str) -> dict:
return self.secret_conn.dispatch(
"Secret.get_data", {"secret_id": secret_id, "domain_id": domain_id}
)

def create_trusted_secret(self, params: dict) -> dict:
return self.secret_conn.dispatch("TrustedSecret.create", params)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ def authenticate(self, domain_id: str, **kwargs):
endpoint, version = self.external_auth_mgr.get_auth_plugin_endpoint(
self.domain.domain_id, self.external_auth.plugin_info
)

external_auth_user_info = self._authenticate_with_plugin(
endpoint, credentials, domain_id
)
Expand Down Expand Up @@ -96,11 +97,18 @@ def _authenticate_with_plugin(
self, endpoint: str, credentials: dict, domain_id: str
) -> dict:
options = self.external_auth.plugin_info.options
metadata = self.external_auth.plugin_info.metadata

auth_plugin_conn = ExternalAuthPluginConnector()
auth_plugin_conn.initialize(endpoint)

return auth_plugin_conn.authorize(credentials, options, {}, domain_id)
return auth_plugin_conn.authorize(
credentials=credentials,
secret_data={},
options=options,
domain_id=domain_id,
metadata=metadata,
)

def _check_domain_state(self):
external_auth_info = self.external_auth_mgr.get_auth_info(domain_vo=self.domain)
Expand Down
8 changes: 4 additions & 4 deletions src/spaceone/identity/service/domain_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
from spaceone.identity.manager.role_manager import RoleManager
from spaceone.identity.manager.role_binding_manager import RoleBindingManager
from spaceone.identity.manager.user_manager import UserManager
from spaceone.identity.manager.system_manager import SystemManager
from spaceone.identity.manager.config_manager import ConfigManager
from spaceone.identity.manager.system_manager import SystemManager
from spaceone.identity.model.domain.request import *
from spaceone.identity.model.domain.response import *
from spaceone.identity.error.error_domain import *
Expand Down Expand Up @@ -191,12 +191,12 @@ def get_auth_info(

domain_vo = self.domain_mgr.get_domain_by_name(params.name)
external_auth_mgr = ExternalAuthManager()
auth_info = external_auth_mgr.get_auth_info(domain_vo)
external_auth_info = external_auth_mgr.get_auth_info(domain_vo)

config_mgr = ConfigManager()
auth_info["config"] = config_mgr.get_auth_config(domain_vo.domain_id)
external_auth_info["config"] = config_mgr.get_auth_config(domain_vo.domain_id)

return DomainAuthInfoResponse(**auth_info)
return DomainAuthInfoResponse(**external_auth_info)

@transaction(exclude=["authentication", "authorization", "mutation"])
@convert_model
Expand Down
15 changes: 12 additions & 3 deletions src/spaceone/identity/service/external_auth_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,10 @@ def unset(
ExternalAuthResponse:
"""

return {}
external_auth_vo = self.external_auth_mgr.get_external_auth(params.domain_id)
self.external_auth_mgr.delete_external_auth_by_vo(external_auth_vo)

return {"domain_id": params.domain_id, "state": "DISABLED"}

@transaction(permission="identity:ExternalAuth.read", role_types=["DOMAIN_ADMIN"])
@convert_model
Expand All @@ -73,5 +76,11 @@ def get(self, params: ExternalAuthGetRequest) -> Union[ExternalAuthResponse, dic
ExternalAuthResponse:
"""

external_auth_vo = self.external_auth_mgr.get_external_auth(params.domain_id)
return ExternalAuthResponse(**external_auth_vo.to_dict())
external_auth_vos = self.external_auth_mgr.filter_external_auth(
domain_id=params.domain_id
)
if external_auth_vos.count() > 0:
external_auth_vo = external_auth_vos[0]
return ExternalAuthResponse(**external_auth_vo.to_dict())
else:
return {"domain_id": params.domain_id, "state": "DISABLED"}