A PHP Error was encountered

Severity: 8192

Message: Function create_function() is deprecated

Filename: geshi/geshi.php

Line Number: 4698

Backtrace:

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 4698
Function: _error_handler

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 4621
Function: _optimize_regexp_list_tokens_to_string

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 1655
Function: optimize_regexp_list

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 2029
Function: optimize_keyword_group

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/geshi/geshi.php
Line: 2168
Function: build_parse_cache

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/libraries/Process.php
Line: 45
Function: parse_code

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/models/Pastes.php
Line: 517
Function: syntax

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/application/controllers/Main.php
Line: 693
Function: getPaste

File: /home/httpd/vhosts/scratchbook.ch/geopaste.scratchbook.ch/index.php
Line: 315
Function: require_once

Untitled - Stikked
From Diminutive Peafowl, 5 Years ago, written in Java.
Embed
  1. /*
  2.  * Copyright 2019, Pearson Education, Learning Technology Group
  3.  *
  4.  * PlatformAuthenticationResponseService.java
  5.  */
  6. package com.pearson.ltg.rbs.ltitoolgateway.service.openidconnect;
  7.  
  8. import java.util.List;
  9. import java.util.Objects;
  10. import java.util.Set;
  11. import java.util.stream.Collectors;
  12.  
  13. import javax.annotation.PostConstruct;
  14.  
  15. import org.apache.commons.collections.CollectionUtils;
  16. import org.slf4j.Logger;
  17. import org.slf4j.LoggerFactory;
  18. import org.springframework.beans.factory.annotation.Autowired;
  19. import org.springframework.beans.factory.annotation.Value;
  20. import org.springframework.stereotype.Service;
  21.  
  22. import com.pearson.ltg.rbs.ltitoolgateway.constant.Constants;
  23. import com.pearson.ltg.rbs.ltitoolgateway.jwt.JwtHelper;
  24. import com.pearson.ltg.rbs.ltitoolgateway.model.AuthenticationResponse;
  25. import com.pearson.ltg.rbs.ltitoolgateway.model.IssuerResponse;
  26. import com.pearson.ltg.rbs.ltitoolgateway.model.LTILaunchRequest;
  27. import com.pearson.ltg.rbs.ltitoolgateway.model.LTILaunchRequestSettings;
  28. import com.pearson.ltg.rbs.ltitoolgateway.model.PlatformConfiguration;
  29. import com.pearson.ltg.rbs.ltitoolgateway.model.PublicKeyData;
  30. import com.pearson.ltg.rbs.ltitoolgateway.model.RumbaRole;
  31. import com.pearson.ltg.rbs.ltitoolgateway.service.IPlatformConfigurationService;
  32. import com.pearson.ltg.rbs.ltitoolgateway.util.Encryption;
  33. import com.pearson.ltg.samlutils.model.SamlResponseInputData;
  34. import com.pearson.ltg.samlutils.service.ISamlResponseService;
  35.  
  36. import io.jsonwebtoken.Claims;
  37. import reactor.core.publisher.Mono;
  38. import reactor.util.function.Tuples;
  39.  
  40. @Service
  41. public class PlatformAuthenticationResponseService implements IPlatformAuthenticationResponseService {
  42.     private static final Logger LOGGER = LoggerFactory.getLogger(PlatformAuthenticationResponseService.class);
  43.  
  44.     @Value("${saml.issuerId}")
  45.     String issuerId;
  46.  
  47.     @Value("${saml.rumbaSSOUrl}")
  48.     String rumbaSSOUrl;
  49.  
  50.     @Value("${saml.externalIdp}")
  51.     String externalIdp;
  52.  
  53.     @Value("${saml.nameIdentitifer}")
  54.     String nameIdentitifer;
  55.  
  56.     @Value("${saml.nameQualifier}")
  57.     String nameQualifier;
  58.  
  59.     @Value("${saml.certificatePath}")
  60.     String certificatePath;
  61.  
  62.     @Value("${saml.privateKeyPkcs8Path}")
  63.     String privateKeyPkcs8Path;
  64.  
  65.     @Autowired
  66.     JwtHelper jwtHelper;
  67.  
  68.     @Autowired
  69.     Encryption encryption;
  70.  
  71.     @Autowired
  72.     IAuthenticationService authenticationService;
  73.  
  74.     @Autowired
  75.     IPlatformConfigurationService platformConfigurationService;
  76.  
  77.     @Autowired
  78.     ILaunchRequestServiceLocator launchRequestServiceLocator;
  79.  
  80.     @Autowired
  81.     ISamlResponseService samlResponseService;
  82.  
  83.     @Value("${ims.roles.mapped.to.rumba.teacher}")
  84.     Set<String> imsRolesMappedToRumbaTeacher;
  85.     @Value("${ims.roles.mapped.to.rumba.student}")
  86.     Set<String> imsRolesMappedToRumbaStudent;
  87.  
  88.     @PostConstruct
  89.     public void init() {
  90.         LOGGER.info("rolesMappedToRumbaTeacher {}", imsRolesMappedToRumbaTeacher);
  91.         LOGGER.info("rolesMappedToRumbaStudent {}", imsRolesMappedToRumbaStudent);
  92.     }
  93.  
  94.     @Override
  95.     public Mono<LTILaunchRequest<LTILaunchRequestSettings>> handlePlatformAuthenticationResponse(AuthenticationResponse authenticationResponse) {
  96.         IssuerResponse issuerResponse= authenticationService.retrieveIssuerResponse(authenticationResponse.getState());
  97.         String jwtToken = authenticationResponse.getIdToken();
  98.         String issuerId = issuerResponse.getIssuerId();
  99.         return platformConfigurationService
  100.                         .getByIssuerId(issuerId)
  101.                         .flatMap(platformConfiguration -> getPublicKeyData(platformConfiguration)
  102.                             .map(publicKeyData -> Tuples.of(platformConfiguration, publicKeyData)))
  103.                         .flatMap(tuple -> jwtHelper.getClaimsFromJWTToken(jwtToken, tuple.getT2())
  104.                             .map(claims -> {
  105.                                 updatePlatformConfigurationWithPulicKey(tuple.getT1(), tuple.getT2());
  106.                                 return Tuples.of(platformConfiguration, claims);
  107.                              }))
  108.                         .flatMap(claimsKeyConfigTuple -> {
  109.                              RumbaRole rumbaRole = obtainRumbaRoleFromLTIRoles(claimsKeyConfigTuple.getT2());
  110.                              String messageType = claims.get(Constants.CLAIM_PREFIX + "message_type", String.class);
  111.                              LaunchRequestProviderType launchRequestProviderType = LaunchRequestProviderType.getLaunchRequestProviderType(messageType);
  112.                              return Mono.just(launchRequestProviderType)
  113.                                  .map(launchRequestServiceLocator::getProvider)
  114.                                  .flatMap(launchRequestService ->  {
  115.                                      launchRequestService.validateLaunchRequest(claimsKeyConfigTuple.getT2().getSubject(), rumbaRole);
  116.                                      LTILaunchRequest<LTILaunchRequestSettings> ltiLaunchRequest = launchRequestService.processRequest(claimsKeyConfigTuple.getT3());
  117.                                      setLtiLaunchRequest(ltiLaunchRequest, claimsKeyConfigTuple.getT1().getRumbaDistrictId(), rumbaRole);
  118.                                      return Mono.just(ltiLaunchRequest);
  119.                                  });
  120.                         });
  121.     }
  122.  
  123.     @Override
  124.     public String getAutoSubmitForm(String redirectUrl, String rumbaUserId) {
  125.         SamlResponseInputData samlResponseInputData = new SamlResponseInputData();
  126.         samlResponseInputData.setIssuer(issuerId);
  127.         samlResponseInputData.setAuthTokenForSaml(rumbaUserId);
  128.         samlResponseInputData.setRumbaSSOUrl(rumbaSSOUrl);
  129.         samlResponseInputData.setExternalIdpUrl(externalIdp);
  130.         samlResponseInputData.setServiceUrl(redirectUrl);
  131.         samlResponseInputData.setTimeInSecondsTillValid(3000);
  132.         samlResponseInputData.setNameIdentifier(nameIdentitifer);
  133.         samlResponseInputData.setNameQualifier(nameQualifier);
  134.         samlResponseInputData.setCertificateFilePath(certificatePath);
  135.         samlResponseInputData.setPrivateKeyFilePath(privateKeyPkcs8Path);
  136.         LOGGER.info("Created auto submit form request {}", samlResponseInputData);
  137.         String autoSubmitForm = samlResponseService.getRumbaAutoSubmitForm(samlResponseInputData);
  138.         LOGGER.info("Created auto submit form {}", autoSubmitForm);
  139.         return autoSubmitForm;
  140.     }
  141.  
  142.     @SuppressWarnings("unchecked")
  143.     private RumbaRole obtainRumbaRoleFromLTIRoles(Claims claims) {
  144.  
  145.         List<String> roles = (List<String>) claims.get(Constants.CLAIM_PREFIX + "roles");
  146.         if (CollectionUtils.isNotEmpty(roles)) {
  147.             List<String> studentRoles = roles
  148.                     .stream()
  149.                     .filter(imsRolesMappedToRumbaStudent::contains)
  150.                     .collect(Collectors.toList());
  151.             if(CollectionUtils.isNotEmpty(studentRoles)) {
  152.                 return RumbaRole.S;
  153.             }
  154.             List<String> teacherRoles = roles
  155.                     .stream()
  156.                     .filter(imsRolesMappedToRumbaTeacher::contains)
  157.                     .collect(Collectors.toList());
  158.             if (CollectionUtils.isNotEmpty(teacherRoles)) {
  159.                 return RumbaRole.T;
  160.             }
  161.         }
  162.         return null;
  163.     }
  164.  
  165.     private Mono<PublicKeyData> getPublicKeyData(PlatformConfiguration platformConfiguration) {
  166.         PublicKeyData publicKeyData = new PublicKeyData();
  167.         publicKeyData.setPublicKeyString(platformConfiguration.getPlatformPublicKey());
  168.         publicKeyData.setPublicKeyId(platformConfiguration.getPlatformPublicKeyId());
  169.         publicKeyData.setPublicKeySetUrl(platformConfiguration.getPlatformPublicKeySetUrl());
  170.         publicKeyData.setPublicKeyType(platformConfiguration.getPlatformPublicKeyType());
  171.         publicKeyData.setPublicKeyAlgorithm(platformConfiguration.getPlatformPublicKeyAlgorithm());
  172.         return Mono.just(publicKeyData);
  173.     }
  174.  
  175.     private void setPlatformConfigurationPublicKeyData(PlatformConfiguration platformConfiguration, PublicKeyData publicKeyData) {
  176.         String platformPublicKey = encryption.keyToString(publicKeyData.getPublicKey());
  177.         platformConfiguration.setPlatformPublicKey(platformPublicKey);
  178.         platformConfiguration.setPlatformPublicKeyAlgorithm(publicKeyData.getPublicKeyAlgorithm());
  179.         platformConfiguration.setPlatformPublicKeyId(publicKeyData.getPublicKeyId());
  180.         platformConfiguration.setPlatformPublicKeyType(publicKeyData.getPublicKeyType());
  181.     }
  182.  
  183.     private void updatePlatformConfigurationWithPulicKey(PlatformConfiguration platformConfiguration, PublicKeyData publicKeyData) {
  184.         if (publicKeyData.getIsNewPublicKey()) {
  185.           setPlatformConfigurationPublicKeyData(platformConfiguration, publicKeyData);
  186.           platformConfigurationService.update(platformConfiguration, issuerId);
  187.           LOGGER.debug("platform configuration has been updated issuerId {}, public key id {}", platformConfiguration.getIssuerId(), publicKeyData.getPublicKeyId());
  188.       }
  189.     }
  190.    
  191.     private void setLtiLaunchRequest(LTILaunchRequest<LTILaunchRequestSettings> ltiLaunchRequest, String rumbaDistrictId, RumbaRole rumaRole) {
  192.       ltiLaunchRequest.setIssuer(issuerId);
  193.       ltiLaunchRequest.setOrganizationId(rumbaDistrictId);
  194.       ltiLaunchRequest.setRumbaRole(rumaRole);
  195.     }
  196. }
  197.