HybridIssuerService.java

  1. /*******************************************************************************
  2.  * Copyright 2017 The MIT Internet Trust Consortium
  3.  *
  4.  * Portions copyright 2011-2013 The MITRE Corporation
  5.  *
  6.  * Licensed under the Apache License, Version 2.0 (the "License");
  7.  * you may not use this file except in compliance with the License.
  8.  * You may obtain a copy of the License at
  9.  *
  10.  *   http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  *******************************************************************************/
  18. package org.mitre.openid.connect.client.service.impl;

  19. import java.util.Set;

  20. import javax.servlet.http.HttpServletRequest;

  21. import org.mitre.openid.connect.client.model.IssuerServiceResponse;
  22. import org.mitre.openid.connect.client.service.IssuerService;

  23. import com.google.common.collect.Sets;

  24. /**
  25.  *
  26.  * Issuer service that tries to parse input from the inputs from a third-party
  27.  * account chooser service (if possible), but falls back to webfinger discovery
  28.  * if not.
  29.  *
  30.  * @author jricher
  31.  *
  32.  */
  33. public class HybridIssuerService implements IssuerService {

  34.     /**
  35.      * @return
  36.      * @see org.mitre.openid.connect.client.service.impl.ThirdPartyIssuerService#getAccountChooserUrl()
  37.      */
  38.     public String getAccountChooserUrl() {
  39.         return thirdPartyIssuerService.getAccountChooserUrl();
  40.     }

  41.     /**
  42.      * @param accountChooserUrl
  43.      * @see org.mitre.openid.connect.client.service.impl.ThirdPartyIssuerService#setAccountChooserUrl(java.lang.String)
  44.      */
  45.     public void setAccountChooserUrl(String accountChooserUrl) {
  46.         thirdPartyIssuerService.setAccountChooserUrl(accountChooserUrl);
  47.     }

  48.     /**
  49.      * @return
  50.      * @see org.mitre.openid.connect.client.service.impl.WebfingerIssuerService#isForceHttps()
  51.      */
  52.     public boolean isForceHttps() {
  53.         return webfingerIssuerService.isForceHttps();
  54.     }

  55.     /**
  56.      * @param forceHttps
  57.      * @see org.mitre.openid.connect.client.service.impl.WebfingerIssuerService#setForceHttps(boolean)
  58.      */
  59.     public void setForceHttps(boolean forceHttps) {
  60.         webfingerIssuerService.setForceHttps(forceHttps);
  61.     }

  62.     private ThirdPartyIssuerService thirdPartyIssuerService = new ThirdPartyIssuerService();
  63.     private WebfingerIssuerService webfingerIssuerService = new WebfingerIssuerService();

  64.     @Override
  65.     public IssuerServiceResponse getIssuer(HttpServletRequest request) {

  66.         IssuerServiceResponse resp = thirdPartyIssuerService.getIssuer(request);
  67.         if (resp.shouldRedirect()) {
  68.             // if it wants us to redirect, try the webfinger approach first
  69.             return webfingerIssuerService.getIssuer(request);
  70.         } else {
  71.             return resp;
  72.         }

  73.     }

  74.     public Set<String> getWhitelist() {
  75.         return Sets.union(thirdPartyIssuerService.getWhitelist(), webfingerIssuerService.getWhitelist());
  76.     }

  77.     public void setWhitelist(Set<String> whitelist) {
  78.         thirdPartyIssuerService.setWhitelist(whitelist);
  79.         webfingerIssuerService.setWhitelist(whitelist);
  80.     }

  81.     public Set<String> getBlacklist() {
  82.         return Sets.union(thirdPartyIssuerService.getBlacklist(), webfingerIssuerService.getWhitelist());
  83.     }

  84.     public void setBlacklist(Set<String> blacklist) {
  85.         thirdPartyIssuerService.setBlacklist(blacklist);
  86.         webfingerIssuerService.setBlacklist(blacklist);
  87.     }

  88.     public String getParameterName() {
  89.         return webfingerIssuerService.getParameterName();
  90.     }

  91.     public void setParameterName(String parameterName) {
  92.         webfingerIssuerService.setParameterName(parameterName);
  93.     }

  94.     public String getLoginPageUrl() {
  95.         return webfingerIssuerService.getLoginPageUrl();
  96.     }

  97.     public void setLoginPageUrl(String loginPageUrl) {
  98.         webfingerIssuerService.setLoginPageUrl(loginPageUrl);
  99.         thirdPartyIssuerService.setAccountChooserUrl(loginPageUrl); // set the same URL on both, but this one gets ignored
  100.     }


  101. }