@Override
  protected Object formBackingObject(HttpServletRequest hreq) throws Exception {

    String artifactId = hreq.getParameter(SsoHttpArtifactBinding.SSO_ARTIFACT_ID);
    CollectUsernamePasswordClaims collectClaims;

    // No request parameter , try to get the form from the session
    if (artifactId == null) {

      collectClaims =
          (CollectUsernamePasswordClaims)
              hreq.getSession().getAttribute("CollectUsernamePasswordClaims");
      // No collect claims in session, build an empty value and return.
      if (collectClaims == null) collectClaims = new CollectUsernamePasswordClaims();

      return collectClaims;
    }

    collectClaims = new CollectUsernamePasswordClaims();

    if (logger.isDebugEnabled())
      logger.debug("Creating form backing object for artifact " + artifactId);

    // Lookup for ClaimsRequest!
    CredentialClaimsRequest credentialClaimsRequest =
        (CredentialClaimsRequest) artifactQueueManager.pullMessage(new ArtifactImpl(artifactId));

    if (credentialClaimsRequest != null) {

      if (logger.isDebugEnabled())
        logger.debug(
            "Received claims request "
                + credentialClaimsRequest.getId()
                + " from "
                + credentialClaimsRequest.getIssuerChannel()
                + " at "
                + credentialClaimsRequest.getIssuerEndpoint());

      if (credentialClaimsRequest.getLastErrorId() != null) {
        if (logger.isDebugEnabled())
          logger.debug(
              "Received last error ID : "
                  + credentialClaimsRequest.getLastErrorId()
                  + " ("
                  + credentialClaimsRequest.getLastErrorMsg()
                  + ")");

        hreq.setAttribute("statusMessageKey", "claims.text.invalidCredentials");
      }

      List<DashboardMessage> ssoPolicyMsgs = new ArrayList<DashboardMessage>();

      // Publish SSO Policies information to be displayed ...
      for (SSOPolicyEnforcementStatement ssoPolicyEnforcement :
          credentialClaimsRequest.getSsoPolicyEnforcements()) {
        List<Object> values = null;
        if (ssoPolicyEnforcement.getValues().size() > 0) {
          values = new ArrayList<Object>();
          values.addAll(ssoPolicyEnforcement.getValues());
        }
        ssoPolicyMsgs.add(
            new DashboardMessage("claims.text." + ssoPolicyEnforcement.getName(), values));
      }

      if (ssoPolicyMsgs.size() > 0) hreq.setAttribute("ssoPolicyMessages", ssoPolicyMsgs);

      collectClaims.setCredentialClaimsRequest(credentialClaimsRequest);

    } else {
      // TODO : redirect User to configured fallback URL
      if (logger.isDebugEnabled())
        logger.debug("No claims request received, use the one stored in session, if any!");
      CollectUsernamePasswordClaims oldClaims =
          (CollectUsernamePasswordClaims)
              hreq.getSession().getAttribute("CollectUsernamePasswordClaims");
      if (oldClaims != null) {
        if (logger.isDebugEnabled())
          logger.debug(
              "No claims request received, using old claims request : "
                  + oldClaims.getCredentialClaimsRequest());

        collectClaims.setCredentialClaimsRequest(oldClaims.getCredentialClaimsRequest());
      }
    }

    hreq.getSession().setAttribute("CollectUsernamePasswordClaims", collectClaims);

    return collectClaims;
  }
Example #2
0
 /**
  * Adds a message queue to the message listener. When a pub/sub message is received by the message
  * listener, it duplicates it and provides a copy to all the message queues added to it. Different
  * message queue can implement different functionalities to handle this message.
  *
  * @param msgQueue
  */
 public void addMessageQueue(MessageQueue msgQueue) {
   msgListener.addMessageQueue(msgQueue);
 }