Implement Clerk as authentication backend (OAuth2).

This commit is contained in:
Orne Brocaar
2023-12-19 13:49:16 +00:00
parent f45d12519c
commit 9198d7d51b
30 changed files with 4430 additions and 1125 deletions

File diff suppressed because one or more lines are too long

View File

@ -140,10 +140,12 @@ class GlobalSearchResult(_message.Message):
def __init__(self, kind: _Optional[str] = ..., score: _Optional[float] = ..., tenant_id: _Optional[str] = ..., tenant_name: _Optional[str] = ..., application_id: _Optional[str] = ..., application_name: _Optional[str] = ..., device_dev_eui: _Optional[str] = ..., device_name: _Optional[str] = ..., gateway_id: _Optional[str] = ..., gateway_name: _Optional[str] = ...) -> None: ...
class SettingsResponse(_message.Message):
__slots__ = ["openid_connect"]
__slots__ = ["openid_connect", "oauth2"]
OPENID_CONNECT_FIELD_NUMBER: _ClassVar[int]
OAUTH2_FIELD_NUMBER: _ClassVar[int]
openid_connect: OpenIdConnect
def __init__(self, openid_connect: _Optional[_Union[OpenIdConnect, _Mapping]] = ...) -> None: ...
oauth2: OAuth2
def __init__(self, openid_connect: _Optional[_Union[OpenIdConnect, _Mapping]] = ..., oauth2: _Optional[_Union[OAuth2, _Mapping]] = ...) -> None: ...
class OpenIdConnect(_message.Message):
__slots__ = ["enabled", "login_url", "login_label", "logout_url"]
@ -157,6 +159,18 @@ class OpenIdConnect(_message.Message):
logout_url: str
def __init__(self, enabled: bool = ..., login_url: _Optional[str] = ..., login_label: _Optional[str] = ..., logout_url: _Optional[str] = ...) -> None: ...
class OAuth2(_message.Message):
__slots__ = ["enabled", "login_url", "login_label", "logout_url"]
ENABLED_FIELD_NUMBER: _ClassVar[int]
LOGIN_URL_FIELD_NUMBER: _ClassVar[int]
LOGIN_LABEL_FIELD_NUMBER: _ClassVar[int]
LOGOUT_URL_FIELD_NUMBER: _ClassVar[int]
enabled: bool
login_url: str
login_label: str
logout_url: str
def __init__(self, enabled: bool = ..., login_url: _Optional[str] = ..., login_label: _Optional[str] = ..., logout_url: _Optional[str] = ...) -> None: ...
class OpenIdConnectLoginRequest(_message.Message):
__slots__ = ["code", "state"]
CODE_FIELD_NUMBER: _ClassVar[int]
@ -171,6 +185,20 @@ class OpenIdConnectLoginResponse(_message.Message):
token: str
def __init__(self, token: _Optional[str] = ...) -> None: ...
class OAuth2LoginRequest(_message.Message):
__slots__ = ["code", "state"]
CODE_FIELD_NUMBER: _ClassVar[int]
STATE_FIELD_NUMBER: _ClassVar[int]
code: str
state: str
def __init__(self, code: _Optional[str] = ..., state: _Optional[str] = ...) -> None: ...
class OAuth2LoginResponse(_message.Message):
__slots__ = ["token"]
TOKEN_FIELD_NUMBER: _ClassVar[int]
token: str
def __init__(self, token: _Optional[str] = ...) -> None: ...
class GetDevicesSummaryRequest(_message.Message):
__slots__ = ["tenant_id"]
TENANT_ID_FIELD_NUMBER: _ClassVar[int]

View File

@ -56,6 +56,11 @@ class InternalServiceStub(object):
request_serializer=chirpstack__api_dot_api_dot_internal__pb2.OpenIdConnectLoginRequest.SerializeToString,
response_deserializer=chirpstack__api_dot_api_dot_internal__pb2.OpenIdConnectLoginResponse.FromString,
)
self.OAuth2Login = channel.unary_unary(
'/api.InternalService/OAuth2Login',
request_serializer=chirpstack__api_dot_api_dot_internal__pb2.OAuth2LoginRequest.SerializeToString,
response_deserializer=chirpstack__api_dot_api_dot_internal__pb2.OAuth2LoginResponse.FromString,
)
self.GetDevicesSummary = channel.unary_unary(
'/api.InternalService/GetDevicesSummary',
request_serializer=chirpstack__api_dot_api_dot_internal__pb2.GetDevicesSummaryRequest.SerializeToString,
@ -153,6 +158,13 @@ class InternalServiceServicer(object):
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def OAuth2Login(self, request, context):
"""OAuth2 login.
"""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
def GetDevicesSummary(self, request, context):
"""GetDevicesSummary returns an aggregated summary of the devices.
"""
@ -245,6 +257,11 @@ def add_InternalServiceServicer_to_server(servicer, server):
request_deserializer=chirpstack__api_dot_api_dot_internal__pb2.OpenIdConnectLoginRequest.FromString,
response_serializer=chirpstack__api_dot_api_dot_internal__pb2.OpenIdConnectLoginResponse.SerializeToString,
),
'OAuth2Login': grpc.unary_unary_rpc_method_handler(
servicer.OAuth2Login,
request_deserializer=chirpstack__api_dot_api_dot_internal__pb2.OAuth2LoginRequest.FromString,
response_serializer=chirpstack__api_dot_api_dot_internal__pb2.OAuth2LoginResponse.SerializeToString,
),
'GetDevicesSummary': grpc.unary_unary_rpc_method_handler(
servicer.GetDevicesSummary,
request_deserializer=chirpstack__api_dot_api_dot_internal__pb2.GetDevicesSummaryRequest.FromString,
@ -427,6 +444,23 @@ class InternalService(object):
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@staticmethod
def OAuth2Login(request,
target,
options=(),
channel_credentials=None,
call_credentials=None,
insecure=False,
compression=None,
wait_for_ready=None,
timeout=None,
metadata=None):
return grpc.experimental.unary_unary(request, target, '/api.InternalService/OAuth2Login',
chirpstack__api_dot_api_dot_internal__pb2.OAuth2LoginRequest.SerializeToString,
chirpstack__api_dot_api_dot_internal__pb2.OAuth2LoginResponse.FromString,
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@staticmethod
def GetDevicesSummary(request,
target,