code: def handle_client_registration_request(self, request, http_headers=None):
          # type: (Optional[str], Optional[Mapping[str, str]]) -> oic.oic.message.RegistrationResponse
          
          registration_req = RegistrationRequest().deserialize(request, 'json')
  
          for validator in self.registration_request_validators:
              validator(registration_req)
          logger.debug('parsed authentication_request: %s', registration_req)
  
          client_id, client_secret = self._issue_new_client()
          credentials = {
              'client_id': client_id,
              'client_id_issued_at': int(time.time()),
              'client_secret': client_secret,
              'client_secret_expires_at': 0  # never expires
          }
  
          response_params = self.match_client_preferences_with_provider_capabilities(registration_req)
          response_params.update(credentials)
          self.clients[client_id] = copy.deepcopy(response_params)
  
          registration_resp = RegistrationResponse(**response_params)
          logger.debug('registration_resp=%s from registration_req=%s', registration_resp, registration_req)
          return registration_resp
docs: Handles a client registration request.
          :param request: JSON request from POST body
          :param http_headers: http headers