Skip to content
This repository was archived by the owner on Jun 23, 2023. It is now read-only.
Merged
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
25 changes: 19 additions & 6 deletions src/oidcop/oidc/registration.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from oidcop.exception import CapabilitiesMisMatch
from oidcop.exception import InvalidRedirectURIError
from oidcop.exception import InvalidSectorIdentifier
from oidcop.util import split_uri
from oidcop.util import split_uri, importer

PREFERENCE2PROVIDER = {
# "require_signed_request_object": "request_object_algs_supported",
Expand Down Expand Up @@ -117,6 +117,15 @@ def comb_uri(args):
args['request_uris'] = val


def random_client_id(length:int=16, reserved:list=[], **kwargs):
# create new id och secret
client_id = rndstr(16)
# cdb client_id MUST be unique!
while client_id in reserved:
client_id = rndstr(16)
return client_id


class Registration(Endpoint):
request_cls = RegistrationRequest
response_cls = RegistrationResponse
Expand Down Expand Up @@ -394,11 +403,15 @@ def client_registration_setup(self, request, new_id=True, set_secret=True):

_context = self.server_get("endpoint_context")
if new_id:
# create new id och secret
client_id = rndstr(12)
# cdb client_id MUST be unique!
while client_id in _context.cdb:
client_id = rndstr(12)
if self.kwargs.get('client_id_generator'):
cid_generator = importer(
self.kwargs['client_id_generator']['class']
)
cid_gen_kwargs = self.kwargs['client_id_generator'].get('kwargs', {})
else:
cid_generator = importer('oidcop.oidc.registration.random_client_id')
cid_gen_kwargs = {}
client_id = cid_generator(reserved=_context.cdb.keys(), **cid_gen_kwargs)
if "client_id" in request:
del request["client_id"]
else:
Expand Down