public Mono> handlePlatformAuthenticationResponse(AuthenticationResponse authenticationResponse) { IssuerResponse issuerResponse= authenticationService.retrieveIssuerResponse(authenticationResponse.getState()); String jwtToken = authenticationResponse.getIdToken(); String issuerId = issuerResponse.getIssuerId(); return platformConfigurationService .getByIssuerId(issuerId) .flatMap(platformConfiguration -> getPublicKeyData(platformConfiguration)) .flatMap(publicKeyData -> { setPlatformConfigurationServicePublicKeyData(platformConfiguration, publicKeyData); return Tuples.of(platformConfiguration, publicKeyData); }) .flatMap(tuple -> jwtHelper.getClaimsFromJWTToken(jwtToken, tuple.getT2())) .map(claims -> { RumbaRole rumbaRole = obtainRumbaRoleFromLTIRoles(claims); String messageType = claims.get(Constants.CLAIM_PREFIX + "message_type", String.class); LaunchRequestProviderType.getLaunchRequestProviderType(messageType) .map(launchRequestProviderType -> launchRequestServiceLocator.getProvider(launchRequestProviderType)) .map(launchRequestService -> { launchRequestService.validateLaunchRequest(claims); launchRequestService.processRequest(claims) .map(ltiLaunchRequest -> setLtiLaunchRequest(ltiLaunchRequest, tuple.getT1().getRumbaDistrictId(), rumbaRole)); }); });