Skip to content

Commit 88fb404

Browse files
author
Jongmin Kim
committed
feat: apply internal authentication
1 parent d360761 commit 88fb404

File tree

3 files changed

+172
-129
lines changed

3 files changed

+172
-129
lines changed

src/spaceone/core/handler/authentication_handler.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import json
22
import logging
33

4-
from spaceone.core import cache
4+
from spaceone.core import cache, config
55
from spaceone.core.connector.space_connector import SpaceConnector
66
from spaceone.core.auth.jwt import JWTAuthenticator, JWTUtil
77
from spaceone.core.transaction import get_transaction
@@ -43,9 +43,11 @@ def verify(self, params: dict) -> None:
4343

4444
@cache.cacheable(key="handler:authentication:{domain_id}:public-key", alias="local")
4545
def _get_public_key(self, domain_id: str) -> str:
46+
system_token = config.get_global("TOKEN")
47+
4648
_LOGGER.debug(f"[_get_public_key] get jwk from identity service: {domain_id}")
4749
response = self.identity_conn.dispatch(
48-
"Domain.get_public_key", {"domain_id": domain_id}
50+
"Domain.get_public_key", {"domain_id": domain_id}, token=system_token
4951
)
5052

5153
return response["public_key"]
@@ -54,13 +56,16 @@ def _get_public_key(self, domain_id: str) -> str:
5456
key="handler:authentication:{domain_id}:client:{client_id}", alias="local"
5557
)
5658
def _check_app(self, client_id, domain_id) -> list:
59+
system_token = config.get_global("TOKEN")
60+
5761
_LOGGER.debug(f"[_check_app] check app from identity service: {client_id}")
5862
response = self.identity_conn.dispatch(
5963
"App.check",
6064
{
6165
"client_id": client_id,
6266
"domain_id": domain_id,
6367
},
68+
token=system_token,
6469
)
6570

6671
return response.get("permissions", [])

src/spaceone/core/pygrpc/api.py

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,25 @@ def service_name(self):
4242
return self.pb2.DESCRIPTOR.services_by_name[self.__class__.__name__].full_name
4343

4444
def _load_grpc_messages(self):
45-
service_desc: ServiceDescriptor = self._desc_pool.FindServiceByName(self.service_name)
45+
service_desc: ServiceDescriptor = self._desc_pool.FindServiceByName(
46+
self.service_name
47+
)
4648
for method_desc in service_desc.methods:
4749
self._grpc_messages[method_desc.name] = {
48-
'request': method_desc.input_type.name,
49-
'response': method_desc.output_type.name
50+
"request": method_desc.input_type.name,
51+
"response": method_desc.output_type.name,
5052
}
5153

5254
def _check_variables(self):
53-
if not hasattr(self, 'pb2'):
54-
raise Exception(f'gRPC Servicer has not set <pb2> variable. (servicer={self.__class__.__name__})')
55+
if not hasattr(self, "pb2"):
56+
raise Exception(
57+
f"gRPC Servicer has not set <pb2> variable. (servicer={self.__class__.__name__})"
58+
)
5559

56-
if not hasattr(self, 'pb2_grpc'):
57-
raise Exception(f'gRPC Servicer has not set <pb2_grpc> variable. (servicer={self.__class__.__name__})')
60+
if not hasattr(self, "pb2_grpc"):
61+
raise Exception(
62+
f"gRPC Servicer has not set <pb2_grpc> variable. (servicer={self.__class__.__name__})"
63+
)
5864

5965
def _get_grpc_servicer(self):
6066
grpc_servicer = None
@@ -63,14 +69,18 @@ def _get_grpc_servicer(self):
6369
grpc_servicer = base_class
6470

6571
if grpc_servicer is None:
66-
raise Exception(f'gRPC servicer is not set. (servicer={self.__class__.__name__})')
72+
raise Exception(
73+
f"gRPC servicer is not set. (servicer={self.__class__.__name__})"
74+
)
6775

6876
return grpc_servicer
6977

7078
def _set_grpc_method(self):
7179
grpc_servicer = self._get_grpc_servicer()
7280

73-
for f_name, f_object in inspect.getmembers(self.__class__, predicate=inspect.isfunction):
81+
for f_name, f_object in inspect.getmembers(
82+
self.__class__, predicate=inspect.isfunction
83+
):
7484
if hasattr(grpc_servicer, f_name):
7585
setattr(self, f_name, self._grpc_method(f_object))
7686

@@ -79,10 +89,10 @@ def _error_method(error, context):
7989
if not isinstance(error, ERROR_BASE):
8090
error = ERROR_UNKNOWN(message=error)
8191

82-
if not error.meta.get('skip_error_log'):
83-
_LOGGER.error(f'(Error) => {error.message} {error}', exc_info=True)
92+
if not error.meta.get("skip_error_log"):
93+
_LOGGER.error(f"(Error) => {error.message} {error}", exc_info=True)
8494

85-
details = f'{error.error_code}: {error.message}'
95+
details = f"{error.error_code}: {error.message}"
8696
context.abort(grpc.StatusCode[error.status_code], details)
8797

8898
def _generate_response(self, response_iterator, context):
@@ -118,8 +128,7 @@ def _get_metadata(context):
118128
for key, value in context.invocation_metadata():
119129
metadata[key.strip()] = value.strip()
120130

121-
metadata.update({'peer': context.peer()})
122-
131+
metadata.update({"peer": context.peer()})
123132
return metadata
124133

125134
def _generate_message(self, request_iterator):
@@ -128,9 +137,13 @@ def _generate_message(self, request_iterator):
128137

129138
def parse_request(self, request_or_iterator, context):
130139
if isinstance(request_or_iterator, Iterable):
131-
return self._generate_message(request_or_iterator), self._get_metadata(context)
140+
return self._generate_message(request_or_iterator), self._get_metadata(
141+
context
142+
)
132143
else:
133-
return self._convert_message(request_or_iterator), self._get_metadata(context)
144+
return self._convert_message(request_or_iterator), self._get_metadata(
145+
context
146+
)
134147

135148
def empty(self):
136149
return Empty()
@@ -139,17 +152,19 @@ def dict_to_message(self, response: dict):
139152
# Get grpc method name from call stack
140153
method_name = inspect.stack()[1][3]
141154

142-
response_message_name = self._grpc_messages[method_name]['response']
155+
response_message_name = self._grpc_messages[method_name]["response"]
143156

144157
if hasattr(self.pb2, response_message_name):
145158
response_message = getattr(self.pb2, response_message_name)()
146-
elif response_message_name == 'Struct':
159+
elif response_message_name == "Struct":
147160
response_message = Struct()
148161
else:
149-
raise Exception(f'Not found response message in pb2. (message={response_message_name})')
162+
raise Exception(
163+
f"Not found response message in pb2. (message={response_message_name})"
164+
)
150165

151166
return ParseDict(response, response_message)
152167

153168
@staticmethod
154169
def get_minimal(params: dict):
155-
return params.get('query', {}).get('minimal', False)
170+
return params.get("query", {}).get("minimal", False)

0 commit comments

Comments
 (0)