Package com.google.step2.example.consumer

Source Code of com.google.step2.example.consumer.GuiceModule$JettyModule

/**
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

package com.google.step2.example.consumer;

import com.google.appengine.api.urlfetch.URLFetchService;
import com.google.appengine.api.urlfetch.URLFetchServiceFactory;
import com.google.inject.AbstractModule;
import com.google.inject.CreationException;
import com.google.inject.Provides;
import com.google.inject.Scopes;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import com.google.inject.name.Names;
import com.google.step2.consumer.OAuthProviderInfoStore;
import com.google.step2.discovery.DefaultHostMetaFetcher;
import com.google.step2.discovery.HostMetaFetcher;
import com.google.step2.discovery.ParallelHostMetaFetcher;
import com.google.step2.example.consumer.appengine.AppEngineHttpFetcher;
import com.google.step2.example.consumer.appengine.AppEngineTrustsRootProvider;
import com.google.step2.example.consumer.appengine.Openid4javaFetcher;
import com.google.step2.example.consumer.appengine.SerialExecutorService;
import com.google.step2.http.HttpFetcher;
import com.google.step2.hybrid.HybridOauthMessage;
import com.google.step2.openid.ax2.AxMessage2;
import com.google.step2.xmlsimplesign.CertValidator;
import com.google.step2.xmlsimplesign.CnConstraintCertValidator;
import com.google.step2.xmlsimplesign.DefaultCertValidator;
import com.google.step2.xmlsimplesign.DisjunctiveCertValidator;
import com.google.step2.xmlsimplesign.TrustRootsProvider;

import org.openid4java.consumer.ConsumerAssociationStore;
import org.openid4java.consumer.InMemoryConsumerAssociationStore;
import org.openid4java.message.Message;
import org.openid4java.message.MessageException;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
*
* @author Dirk Balfanz (dirk.balfanz@gmail.com)
* @author Breno de Medeiros (breno.demedeiros@gmail.com)
*/
public class GuiceModule extends AbstractModule {
  @Override
  protected void configure() {

    try {
      Message.addExtensionFactory(AxMessage2.class);
    } catch (MessageException e) {
      throw new CreationException(null);
    }

    try {
      Message.addExtensionFactory(HybridOauthMessage.class);
    } catch (MessageException e) {
      throw new CreationException(null);
    }

    bind(ConsumerAssociationStore.class)
        .to(InMemoryConsumerAssociationStore.class)
        .in(Scopes.SINGLETON);

    bind(OAuthProviderInfoStore.class)
        .to(SimpleProviderInfoStore.class).in(Scopes.SINGLETON);

    if (isRunningOnAppengine()) {
      install(new AppEngineModule());
    } else {
      install(new JettyModule());
    }
  }

  private boolean isRunningOnAppengine() {

    if (System.getSecurityManager() == null) {
      return false;
    }

    return System.getSecurityManager().getClass().getCanonicalName()
        .startsWith("com.google");
  }

  // we're using a cert validator that will validate certs either if they
  // belong to the expected signer of the XRD, or if they're signed
  // by Google.
  @Provides @Singleton
  public CertValidator provideCertValidator(DefaultCertValidator defaultValidator) {
    CertValidator hardCodedValidator = new CnConstraintCertValidator() {
      @Override
      protected String getRequiredCn(String authority) {
        return "hosted-id.google.com";
      }
    };

    return new DisjunctiveCertValidator(defaultValidator, hardCodedValidator);
  }

  // we're using a ParallelHostMetaFetcher to fetch host-metas both from their
  // default location, and from a special location at Google.
  @Provides @Singleton
  public HostMetaFetcher provideHostMetaFetcher(
      @Named("HostMetaFetcherExecutor") ExecutorService executor,
      DefaultHostMetaFetcher fetcher1,
      GoogleHostedHostMetaFetcher fetcher2) {

    // we're waiting at most 10 seconds for the two host-meta fetchers to find
    // a host-meta
    long hostMetatimeout = 10; // seconds.

    return new ParallelHostMetaFetcher(executor, hostMetatimeout,
        fetcher1, fetcher2);
  }

  public static class JettyModule extends AbstractModule {
    @Override
    protected void configure() {
      bind(ExecutorService.class)
          .annotatedWith(Names.named("HostMetaFetcherExecutor"))
          .toInstance(Executors.newFixedThreadPool(20));
    }
  }

  public static class AppEngineModule extends AbstractModule {
    @Override
    protected void configure() {
      bind(HttpFetcher.class)
          .to(AppEngineHttpFetcher.class).in(Scopes.SINGLETON);

      bind(TrustRootsProvider.class)
          .to(AppEngineTrustsRootProvider.class).in(Scopes.SINGLETON);

      bind(ExecutorService.class)
          .annotatedWith(Names.named("HostMetaFetcherExecutor"))
          .to(SerialExecutorService.class).in(Scopes.SINGLETON);

      bind(org.openid4java.util.HttpFetcher.class)
          .to(Openid4javaFetcher.class)
          .in(Scopes.SINGLETON);
    }
  }

  @Provides @Singleton
  public URLFetchService provideUrlFetchService() {
    return URLFetchServiceFactory.getURLFetchService();
  }
}
TOP

Related Classes of com.google.step2.example.consumer.GuiceModule$JettyModule

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.